자바스크립트가 브라우저에서 어떻게 동작하는지 알아보고 어떤 특성이 있는지 알아봅시다.
1. 자바스크립트 엔진 (Javascript Engine)
위키백과에서 자바스크립트 엔진은 아래와 같이 설명하고 있다.
자바스크립트 코드를 실행하는 프로그램 또는 인터프리터이다. 자바스크립트 엔진은 전통적인 인터프리터일 수도 있고, 특정한 방식으로 바이트코드로 JIT 컴파일을 할 수 있다. 여러 목적으로 자바스크립트 엔진을 사용하지만, 대체적으로 웹 브라우저에서 사용된다.
*인터프리터: 프로그래밍 언어의 소스코드를 바로 실행하는 프로그램 또는 환경을 말함
*JIT 컴파일: just-in-time compilation의 줄임말로 바이트코드를 실시간으로 읽어 기계어로 변환한다.
즉, 자바스크립트 엔진은 자바스크립트를 읽어서 컴퓨터가 읽을 수 있는 기계어로 변환해주는 역할을 한다.
2. 자바스크립트 엔진 종류
자바스크립트 엔진도 여러가지 종류가 있는데 가장 유명한 것은 Google의 V8이다.
Name | Provider | Description |
V8 | Google / Chorme / Node JS | - C++로 만들었음 - JIT 컴파일러 사용함 |
Rhino Engine | Mozilla / Firefox | - Java로 만들었음 - SpiderMonkey의 Java 버전 - 인터프리터 및 컴파일러로 JS Code를 Java bytecode로 변환한다. |
SpiderMonkey Engine | Mozilla / Firefox | - C로 만들었음 - 최초의 자바스크립트 엔진 - 넷스케이프 네비게이터 웹 브라우저를 위해 브랜던 아이크에 의해 개발됨 |
Chakra Engine | MS/IE 9+, Edge | - IE용 엔진 |
Webkit Engine | Apple / Safari | - Apple용 엔진 |
가장 많이 사용되는 V8 엔진에 대해 더 깊게 알아보자.
3. V8

V8은 Google에서 만든 자바스크립트 엔진이며 C++로 개발하였고 Node JS 런타임 및 Chrome 브라우저에서 사용되고 있다.
V8 엔진은 ECMAScript와 Web Assembly 표준에 맞게 구현하였다.
V8 엔진은 웹 브라우저 내부에서 자바스크립트 수행 속도 개선을 목표로 처음 고안되었다.
- V8 작동 원리

V8 엔진은 속도 향상을 위해 인터프리터를 사용하는 대신 JIT 컴파일러를 사용하여 더 효율적으로 JS Code를 기계어로 변환한다. 여기까지는 스파이더몽키나 리노같은 브라우저와 비슷하나 V8은 바이트코드와 같은 중간 코드를 생산하지 않는다.
V8 엔진은 내부적으로 여러 개의 쓰레드를 사용한다.
- 메인 쓰레드는 코드를 가져와서 컴파일하고 실행한다.
- 컴파일을 위한 별도의 쓰레드가 있어서 이 쓰레드가 코드를 최적화하는 동안 메인 쓰레드는 쉬지 않고 코드를 수행한다.
- 프로파일러 쓰레드는 어떤 메소드에서 사용자가 많은 시간을 보내는지 런타임에게 알려주어 크랭크샤프트가 이들을 최적화 할 수 있게 해준다.