Chrome V8이란?

Chrome V8은 JavaScript 코드를 실행합니다. Node.js는 Chrome V8을 기반으로 구축되었으며 서버리스 JavaScript 함수를 위해 널리 사용되는 런타임 환경입니다. 하지만 V8에서 직접 함수를 실행하는 것은 장점이 있습니다.

학습 목표

이 글을 읽은 후에 다음을 할 수 있습니다:

  • JavaScript 엔진의 정의
  • Chrome V8 및 Node.js에 대해 알아보기
  • 서버리스 아키텍처에서 Chrome V8이 수행할 수 있는 역할 이해

글 링크 복사

Chrome V8이란?

Chrome V8은 JavaScript 엔진으로, JavaScript 코드를 실행합니다. 원래 JavaScript는 웹 브라우저에서 실행되도록 작성되었습니다. Chrome V8은 브라우저 내부 또는 외부에서 JavaScript 코드를 실행할 수 있으므로 서버측 스크립팅이 가능합니다.

V8(8기통) 자동차 엔진처럼 Chrome V8은 빠르고 강력합니다. V8은 컴퓨터가 실제로 이해할 수 있도록 JavaScript 코드를 기계어*로 직접 번역한 다음, 번역된 코드, 즉 컴파일된 코드를 실행합니다. V8은 JavaScript 실행도 최적화합니다.

*기계어는 CPU가 이해할 수 있는 언어입니다. 기계어는 숫자로만 구성된 순수 디지털 방식입니다.

컴파일이란?

컴파일은 한 프로그래밍 언어에서 다른 프로그래밍 언어로 코드를 번역하는 프로세스입니다. 일반적으로 컴파일러는 코드를 높은 수준의 추상화에서 낮은 수준의 추상화로, JavaScript와 같이 사람이 사용할 수 있는 언어에서 기계가 읽을 수 있는 코드로 변환합니다.

Chrome V8은 저스트 인 타임 컴파일이라는 기능을 수행합니다. JavaScript를 미리 컴파일하는 대신 코드가 실행되는 동시에 컴파일합니다.

샌드박싱이란?

Chrome V8 샌드박싱

'샌드박스'는 같은 컴퓨터 내에서도 다른 환경과 분리되어 파티션이 지정된 소프트웨어를 실행할 수 있는 환경입니다.

샌드박싱은 Chrome V8의 핵심 기능입니다. 각 프로세스에는 샌드박스가 적용되어 JavaScript 함수가 개별적으로 실행되고 한 코드의 실행이 다른 코드에 영향을 미치지 않도록 보장됩니다. (격리된 가상 머신 내에서 실행 파일을 열고 실행하는 많은 샌드박싱 엔터프라이즈 제품과 달리 V8 샌드박싱은 성능 저하가 없습니다.)

Node.js란?

Node.js는 JavaScript 코드를 실행하기 위한 런타임 환경* 으로, Chrome V8 엔진을 기반으로 합니다. 비동기식이므로 한 프로세스가 완료될 때까지 기다렸다가 다른 프로세스를 시작할 필요가 없습니다. V8과 마찬가지로 Node.js는 무료이며 오픈 소스입니다. Node.js에는 V8과 달리 샌드박싱 기능이 내장되어 있지 않습니다.

(JavaScript에 익숙한 분들은 '.js' 파일 확장자에 주목하실 것입니다. 그러나 이는 런타임 환경의 이름이 JavaScript와의 연관성을 나타내기 위한 미적 선택일 뿐, Node.js가 JavaScript파일임을 의미하지는 않습니다.)

*런타임 환경은 코드가 실행되는 소프트웨어 환경입니다.

서버리스 컴퓨팅에 V8과 Node.js가 중요한 이유는?

서버리스 함수는 트리거될 때 실행할 방법이 필요합니다.여러 서버리스 컴퓨팅 벤더에서 서버리스 JavaScript 함수를 위한 런타임으로 Node.js를 제공합니다(다른 언어에는 다른 런타임이 사용됨).

그러나 Cloudflare Workers는 V8에서 직접 실행됩니다.여기에는 몇 가지 이유가 있습니다.그중 한 가지 이유는 최근에 사용하지 않은 기능의 실행 속도입니다.콜드 스타트는 서버리스 컴퓨팅에서 문제가 되지만, V8에서 함수를 실행하면 일반적으로 5밀리초 이내에 함수를 '스핀업'하여 실행할 수 있습니다.(Node.js는 오버헤드가 더 많으며 일반적으로 몇 밀리초 더 오래 걸립니다.)또 하나의 이유는 V8이 JavaScript 기능을 자동으로 샌드박스 처리하여 보안을 강화하기 때문입니다.