[자바스크립트 개발자라면 알아야 할 33가지 개념] #11 V8 엔진이 JS를 기계 코드로 바꾸는 방법

이윤우·2023년 5월 10일
0

JavaScript

목록 보기
29/34
post-thumbnail

크롬의 V8엔진을 배우기 전에, 먼저, 기초를 잡고 갑시다. 우리의 모든 시스템은 마이크로프로세서(CPU)를 포함합니다. 지금 컴퓨터 안에 들어있는 그 녀석입니다. 당신이 이 글을 읽는 것도 그 덕이죠.

마이크로프로세서는 전자적인 신호로 동작하는 작은 기계입니다. 그리고 궁극적으로 job을 수행하죠. 우리는 마이크로프로세서들에게 지시(instruction)를 주죠. 여기서 지시란 것은 마이크로프로세서가 해석(interpret)할 수 있는 언어로 되어 있는 것을 말합니다. 다른 마이크로프로세서들은 다른 언어로 말합니다. 가장 일반적인 언어로는 IA-32, x86-64, MIPS 그리고 ARM이 있습니다. 이러한 언어들은 직접 하드웨어와 소통합니다.그래서 거기에 쓰여진 코드는 기계어라 불립니다. 우리가 컴퓨터에 쓴 코드는 변형되거나 컴파일되어 기계어가 됩니다.

기계어는 다음과 같이 생겼습니다.

위 코드는 우리 시스템에서 낮은 레벨의 어떤 메모리 위에 올려져 동작하는 지시(instruction)가 들어있습니다. 프로그램을 동작시키기 위해 이러한 것들을 작성해야 할 필요가 없다는 것은 참으로 행운입니다!

고수준의 언어는 기계어에서 많은 추상화가 이루어져있습니다. 아래 추상화의 수준에서, 자바스크립트가 기계어로부터 얼마나 추상화가 됐는지 알 수 있습니다. C/C++는 상대적으로 하드웨어 언어와 가깝고 다른 고수준 언어들보다 훨씬 빠릅니다.

이제 자바스크립트 V8엔진으로 다시 돌아가봅시다. V8은 구글이 제공하는 강력한 오픈소스 자바스크립트 엔진입니다. 자바스크립트 엔진이란 무엇일까요? 자바스크립트 엔진이란 자바스크립트 코드를 마이크로프로세서가 이해할 수 있는 더 낮은 수준의 언어 혹은 기계어로 변환해주는 역할을 합니다.

Rhino, JavaScriptCore, SpiderMonkey와 같은 다양한 종류의 자바스크립트 엔진이 존재합니다. 이 엔진들은 ECMAScript 표준을 따릅니다. ECMAScript는 스크립팅 언어를 위한 표준을 정의합니다. 자바스크립트는 ECMAScript 표준을 기반으로 합니다. 이러한 표준은 언어가 어떻게 동작할지 그리고 어떤 특성을 가져야 하는지를 정의합니다.

크롭 V8엔진의 특성은 다음과 같습니다.

  • V8엔진은 C++로 작성됐고 Chrome과 NodeJS에서 사용됩니다.
  • V8엔진은 ECMA-262에 기재된 ECMAScript를 구현했습니다.
  • V8엔진은 standalone으로 동작할 수 있어서 우리는 자바스크립트 엔진을 C++ 프로그램에 내장시킬 수 있습니다.

마지막 항목을 좀 더 깊이 이해해봅시다. V8 엔진은 standalone으로 동작할 수 있고 동시에 우리는 C++로 구현된 함수를 자바스크립트의 새로운 특성으로 넣을 수 있습니다.

그래서 예를 들면, print('hello world')는 NodeJS에서 유효한 구문이 아닙니다. 컴파일하면 에러를 송출할 것입니다. 하지만 우리는 깃허브에 오픈소스로 제공된 V8엔진의 맨 위에 프린트 문을 추가할 수 있습니다.

NodeJS 자체는 V8엔진, C++ 구현입니다. C++로 구현된 V8엔진은 서버사이드 프로그래밍과 네트워킹 어플리케이션을 다룰 수 있게 해줍니다.

0개의 댓글