
V8 엔진
들어가기 인간과 컴퓨터는 서로 사용하는 언어가 다릅니다. 따라서 컴퓨터가 이해할 수 있는 통역사가 필요한데, 여기서 말하는 통역사의 역할을 하는 것이 바로 컴파일러 혹은 인터프리터입니다. 우리가 컴퓨터와 소통하기 위해서는 코드를 작성하고 이러한 코드를 기계어로 변환하여 컴퓨터와 소통할…
2021. 05. 23읽기 2분770자
들어가기
인간과 컴퓨터는 서로 사용하는 언어가 다릅니다. 따라서 컴퓨터가 이해할 수 있는 통역사가 필요한데, 여기서 말하는 통역사의 역할을 하는 것이 바로 컴파일러 혹은 인터프리터입니다. 우리가 컴퓨터와 소통하기 위해서는 코드를 작성하고 이러한 코드를 기계어로 변환하여 컴퓨터와 소통할 수 있습니다.
컴파일러 VS 인터프리터
- 컴파일러는 소스코드 전체를 한 번 훑고 컴퓨터 프로세서가 실행할 수 있도록 바로 기계어로 변환합니다.
- 인터프리터는 고수준 언어를 중간 코드(intermediate code)로 변환하고 이를 각 행마다 연속적으로 실행합니다.
- 일반적으로 컴파일러가 인터프리터보다 실행 시간이 빠릅니다.
- 컴파일러는 전체 소스코드를 변환한 뒤 에러를 보고하지만, 인터프리터는 각 행마다 실행하는 도중 에러가 보고되면 이후 작성된 코드를 살펴보지 않습니다.
V8 엔진이란?
C++로 작성된 구글의 오픈소스 자바스크립트 엔진입니다.
즉, 자바스크립트 코드를 바이트코드 혹은 기계어로 바로 변환해주는 역할을 합니다.
세상에는 V8 엔진뿐만 아니라 다양한 종류의 자바스크립트 엔진이 존재하나, 모두 ECMAScript 표준을 따릅니다.
하지만 V8은 다른 엔진과 달리 모두 기계어로 변환하지 않고 바이트코드와 기계어로 변환합니다.
작동원리

- V8은 소스코드를 가져다가 파서에게 넘깁니다.
- 소스 코드를 분석 후 AST(Abstract Syntax Tree), 즉 추상 구문 트리로 변환하고 Ignition에게 넘겨줍니다.
- Ignition은 자바스크립트를 바이트코드로 컴파일해주는 역할을 수행합니다.
- 이후 이 바이트코드를 실행함으로써 소스 코드가 실제로 작동합니다.
- 그중 자주 사용되는 코드는 TurboFan에 넘겨져 최적화시키기 위해 다시 기계어로 컴파일됩니다.
V8의 역할
- JS, WASM 코드 컴파일 및 실행
- 콜 스택 처리 (함수 실행)
- 메모리 할당
- 가비지 컬렉션
참고자료
같은 카테고리의 글 · Javascript
JavascriptReflow는 언제 발생하는가?Reflow는 언제 발생하는가? 성능 최적화를 위해 Reflow를 줄이는 방법에 대해서 알아보는 중 DOM의 위치나 사이즈를 가져오는 것도 reflow를 발생시킬 수 있다는 내용을 접하게 되었고 테스트를 진행해보았습니다. 먼저 그냥 단순히 사이즈나 위치를 가져오는 것은 reflow를 발…
Javascripttry-catch와 .catch개요 회사 코드를 살펴보던 중 Redux 부분에서 saga를 통해 API를 호출하고 데이터를 받아오는 과정에서 API 요청은 .then.catch를 사용해서 받아오고, API를 랩핑하는 함수는 try-catch를 사용하고 있었습니다. 그러다 이 둘로 구분한 이유와 try-catch문의…