logo

자바스크립트 엔진

Chapter 11

35 조회

0 추천

846 단어

5분 예상

2024. 08. 16. 게시

2025. 02. 27. 수정

luasenvy 작성

CC BY-NC-SA 4.0

V8 자바스크립트 엔진

  • V8 엔진은 C++로 작성되어 Chrome과 Nodejs에서 사용된다.
  • 단독 실행이 가능하며 사용자 정의 프로그램을 C++로 작성하면 기능을 임베드하여 사용할 수 있다.
  • 인터프리터와 컴파일러 모두 사용한다.

인터프리터 vs 컴파일

인터프리터 언어는 흔히 스크립트라고 칭하는 것들이 속한다. 소스코드를 작성하고 실행하면 한 줄씩 읽어들이며 기계어 코드로 변환한 이후에 실행하고 다시 다음 줄을 읽는 과정을 반복하며 프로그램을 실행한다.

컴파일 언어는 소스코드를 모두 기계어 코드로 전환하는 "컴파일"이라는 단계를 거친다. 실행 단계가 분리되어있기 때문에 프로그램을 실행하는 속도가 빠르다.

JavaScript 언어는 컴파일 언어인지 인터프리터 형식의 인터프리터 언어인지에 대한 논쟁이 있었다. 전통적으로 인터프리터 언어로 분류되었지만 V8처럼 기계어 코드로 컴파일한 후 실행하는 엔진들이 등장하면서 컴파일과 인터프리팅의 혼합방식으로 동작하게 되었다. 실행 전에 일부 코드를 최적화하고 즉시 기계어로 변환하여 더 빠르게 처리할 수 있게 되었다. 실행은 여전히 한 줄씩 실행하는 인터프리터 방식이지만 더 빠른 성능을 위해 전처리하는 일종의 "프리컴파일" 단계를 거치는 형태이다.

(()=>{
  console.info('executed'); // 콘솔에 로그가 먼저 남음
  
  console.info(variable); // Uncaught ReferenceError: variable is not defined
})()

예제를 실행해보면 함수도 올바르게 작동하고 콘솔에 로그도 잘 남는다. 한 줄씩 읽고 실행하기 때문에 variable 변수를 선언한 적이 없지만 해당 줄을 실행하기 전까지는 오류가 발생하지 않는다.

다양한 엔진

브라우저 전국시대에서는 브라우저마다 구현된 자바스크립트의 버전이 달라 크로스플랫폼을 지원하는 것이 큰 일이었다. 크롬으로 대동단결된 현시점에서는 고민할 거리가 많이 줄긴 했지만 여전히 Safari나 IE의 점유율은 무시할 수 없는 수준이긴해도 그나마 희망적인건 웹 개발자들의 야근과 뱃살을 재물로 삼던 지방호족들의 가문 싸움이 대충 정리가 되었다는 점이다.

물론, 아직도 Safari, Firefox 같은 거대한 브라우저들이 남아있지만 그 핏줄이 Chromium이나 WebKit으로 흡수통일 되었기에 크롬에서만 잘 나오면 나머지는 얼추 정리가 된다. WebKit의 JavaScriptCore와 같이 태생이 다른 엔진들도 있지만 대부분 아직까지 살아남은 거대 브라우저라면 버전이 상당히 높기 때문에 표준에 맞춘 다양한 기능들이 제공되어 크로스플랫폼에 대해 깊이 생각하지 않아도 어느정도 호환이 잘 된다.