Santos의 개발블로그

ES5 .Intro(10) - V8 엔진 코드 변환 방법 본문

Language & Framework & Library/JavaScript

ES5 .Intro(10) - V8 엔진 코드 변환 방법

Santos 2019. 12. 20. 12:00

모든 시스템은 CPU를 포함한다. CPU는 마이크로프로세서라고도 불리우는데, 이는 전자적인 신호로 동작하는 작은 기계이다. 

 

마이크로프로세서는 기본적으로 우리들이 지시한 명령들을 수행한다. 여기서 지시란 마이크로프로세서가 해석할 수 있는 언어로 되어 있는 것을 말한다.

 

사람들이 사용하는 언어와 기계들이 사용하는 언어는 당연히 다를 것이므로, 기계, 여기서는 마이크로프로세서가 알아들을 수 있는 언어로 지시를 해야 한다. 

 

마이크로프로세서는 IA-32, x86-64, MIPS 그리고 ARM이라는 언어를 사용하는데, 이들을 사용해 직접 하드웨어와 소통한다. 이들을 우리는 기계어라고 부른다. 

 

사람들이 내리는 지시는 컴파일되어 기계들이 알아들을 수 있는 언어로 변형된다. 

- 기계어 -

언어가 고수준으로 발전할 수록 기계어에서 많은 추상화들이 이루어져 있다. 여기서 추상화란 익숙하지 않은 기계어를 사용하여 소통하는 것보다 사람들끼리 약속된 언어로 탈바꿈하는 것을 의미한다. 

 

하드웨어 언어와 가까울 수록 해석되는 속도가 빠른데, C, C++ 같은 언어가 이에 속한다. JavaScript는 C, C++보다 상대적으로 많은 추상화가 이루어졌다는 것을 그림에서 알 수 있다.  

 


JavaScript의 V8 엔진

다시 처음으로 돌아가서 V8엔진은 구글이 제공하는 JavaScript 엔진이며, 오픈소스이다. 

 

JavaScript엔진은 JavaScript 코드를 마이크로프로세서가 이해할 수 있는 기계어로 변환해주는 역할을 한다.

 

V8 엔진 이외에도 다양한 엔진들이 존재하지만, 이들의 공통점은 스크립팅 언어를 위해 표준을 정의한 ECMAScript 표준을 따른다는 것이다. 물론 JavaScript도 ECMAScript 표준을 기반으로 한다. 

 

V8 엔진의 대표적인 특징은 다음과 같다. 

 

- C++로 작성됐고, Chrome과 Node.js에서 사용된다. 

- ECMA-262에 기재된 ECMAScript를 구현하였다. 

- standalone으로 동작할 수 있어 JavaScript 엔진을 C++프로그램에 내장시킬 수 있다. 

 

"standalone으로 동작할 수 있어 JavaScript 엔진을 C++프로그램에 내장시킬 수 있다." 라는 말은 무슨 의미를 뜻하는 것일까? 

 

print('hello world')는 JavaScript에서 유효한 구문이 아니다. 하지만 오픈소스로 제공된 V8 엔진의 프린트 문을 추가하면 native로 동작할 수 있도록 만들수 있다. 

 

이러한 행위는 JavaScript가 ECMAScript표준이 정의하는 JavaScript 동작보다 더 많은 동작을 하도록 허용해 준다. 

 

C++는 JavaScript 보다 더 많은 특성을 갖고 있기 때문에, C++로 된 코드를 작성하도록 허용하고  Node.js 환경에서 동작이 가능하도록 한다면, 강력한 기능이 될 수 있다. 

 

아래 코드는 Print 함수를 엔진 내부의 오픈 소스 코드에 구현해 보기 위해 만든 예시이다. 

- 예시 -

print()가 Node.js 환경에서 호출 될때, 이 함수는 콜백을 만들고 함수가 실행된다. 


V8 엔진은 JavaScript 코드를 마이크로프로세서가 이해할 수 있는 기계어로 변환해주는 역할을 가지며, C++로 작성되어 있다. 그러므로 Chrome과 Node.js환경에서 C++된 코드를 작성하고, 해당 환경에서 동작이 가능하도록 한다면 강력한 기능을 가질 수 있다. 

 

다음은 setTimeout & setTimeInterval 에 대한 기록이다.

 

< 참고자료 >

https://github.com/leonardomso/33-js-concepts

 

<ES5 series> chapter 9, V8 엔진 코드 변환 방법 end


Comments