CS

[ Web ] V8 - #01 Javascript Engine

dev-byul 2024. 5. 4. 17:41

JavaScript Engine

JavaScript Engine은 간단히 정의하면 JavaScript 코드를 실행하는 프로그램 또는 인터프리터 입니다.

인터프리터(Interpreter)

코드를 한 줄씩 읽어 내려가며 기계어로 번역하여 실행하는 프로그램

코드를 실행하기 전 컴파일 단계가 없기 때문에 실행 속도가 빠르다는 장점이 있습니다.

컴파일러(Compiler)

파일 전체를 읽은 뒤, 이를 컴파일 하여 기계어로 변환합니다. 이후 기계어는 CPU로 입력되어 코드가 실행 됩니다.

컴파일러는 작업을 단순화 시키는 장점이 있습니다. 특정 함수를 반복할 경우 컴파일 과정에서 반복하는 것이 아니라 함수의 결과물을 반복하도록 컴파일 합니다. 이처럼 불필요한 동작을 제거하는 컴파일러의 방식을 최적화(Optimization)이라고 합니다.

V8 Engine

C++ 로 작성된 Google의 오픈소스 JavaScript 및 WebAssembly 엔진입니다.Chrome 과 Node.js 등에서 사용되며 모든 C++ Application에 내장될 수 있습니다.

V8은 JavaScript 소스 코드를 컴파일 및 실행하고, 객체에 대한 메모리 할당을 처리하며, 더이상 필요하지 않은 객체를 GC(Garbage Collector)처리를 합니다. 이는 V8 핵심 성능 중 하나입니다.

JavaScript를 이용한 브라우저(클라이언트) 측 개발을 하게 될 경우 Documentn Object Model(DOM)객체를 조작하는데 사용됩니다. DOM은 V8 엔진같은 JavaScript 엔진측에서 제공하는 것이 아닌 웹 브라우저 자체 측에서 제공합니다. 예를 들면 Google Chrome같은 웹 브라우저에서 웹 페이지의 DOM을 제공합니다.
V8엔진은 ECMA 스크립트 표준에서 정의된 다양한 기능을 제공하며, document.getElementById() 와 같이 DOM 에 접근하거나 수정하는 등의 기능들을 제공합니다.

Link : https://v8.dev/docs

 

분명 JavaScript Engine은 위에서 인터프리터라 설명을 했다. 하지만 V8 엔진에서 부터는 컴파일을 한다고 V8 홈페이지에서 작성이 되어 있다. 이는 Just-In-Time 컴파일러(JIT 컴파일러)를 사용하여 JavaScript 코드를 기계어로 변환하고 실행하여, 기존 인터프리터 방식의 단점 이였던 코드가 많을 경우 속도가 느려지는 부분을 보안했다.

 

V8 블로그에 2023년 12월 5일자에 Maglev 라는 새로운 최적화 컴파일러를 도입한 것으로 나오고 있다. 이에 대해서는 추후 자세히 다뤄볼까 하여, 지금은 해당 블로그 링크만을 남기도록 하겠습니다.

 

V8 Engine 등장 배경

모든 웹 브라우저의 핵심 부분은 JavaScript 엔진입니다. 빠르고 안정적인 JavaScript 엔진 없이는 웹 애플리케이션이 반응적이고 안정적일 수 없습니다. Google 크롬에는 처음부터 성능을 고려하여 설계된 새로운 JavaScript 엔진인 V8이 탑재되어 있습니다. 특히 우리는 웹 애플리케이션에서 사용할 수 있는 JavaScript 코드의 양과 복잡성을 제한하는 몇 가지 일반적인 병목 현상을 제거하고 싶었습니다.

V8 디자인의 초석은 다음과 같습니다.
JavaScript 소스 코드를 기본 기계어 코드로 직접 컴파일합니다.
빠른 객체 할당과 작은 가비지 수집 일시 중지를 초래하는 효율적인 메모리 관리 시스템입니다.
속성 액세스 및 함수 호출 속도를 높이는 숨겨진 클래스 및 인라인 캐시가 도입되었습니다.

Link : https://blog.chromium.org/2008/09/

V8 엔진이 개발하게 된 많은 이유들이 있었겠지만 가장 큰 이유는 기존 JavaScript 엔진의 인터프리터 방식으로 하여 서비스가 커지면 커질수록 속도가 느려지는 부분을 개선하고 싶었던 것이 아닐까 싶습니다.

디자인 초석을 보면 JIT 컴파일, 메모리 할당과 GC를 이용한 메모리 삭제 등 효율적인 메모리 관리 등 모든 부분이 속도 개선을 위한 과정이라 보여진다.

 

Google Chrome 은 2008년 9월 3일에 베타를 출시하여 2009 년 9월까지의 점유율은 다음과 같다. 당시만 해도 MS Explorer 과 Firefox 가 압도적인 시기였다. 당시 웹 Application의 규모가 점차 복잡해지고 커져가고 있었으며 JavaScript Engine의 실행 속도와 성능이 중요해졌다.

이에 Google 측에서는 V8 엔진의 디자인 초석을 실행속도를 향상시키는 방향으로 정의한게 아닐까 싶다.

'CS' 카테고리의 다른 글

[ Web ] V8 - #2 Garbage Collector - Major GC  (0) 2024.05.18
WebSocket Protocol  (0) 2024.04.25