개요
JSP를 사용하여 웹 프로그래밍을 할 시에 Html,Css,JavaScript등을 사용하여 프론트-엔드 부분을 표현할 수 있습니다.
그렇다면, 자바언어를 사용하여 컴파일을 할 시에도 자바 내부에서 JVM에서 실행엔진, JIT, 인터프리터 등이실행되어 컴파일을 하듯이 웹 개발자가 되기 위해서는 웹 브라우저에서는 어떻게 개발자들이 사용한 언어들이 어떤 방식으로 컴파일되며, 어떻게 컴퓨터에게 어셈블리어 형식으로 변환이 되는지 기본적인 실행 구조를 알아야 합니다.
이번 포스팅에서는 구글 크롬 브라우저에서 사용하는 V8엔진에 대한 특징들에 대해 알아보겠습니다.
V8 엔진이란?
정의 -
V8엔진은 웹 브라우저를 만드는데 사용하는 구글에서 개발된 오픈소스 자바스크립트 엔진입니다.
특징 -
- 웹 브라우저를 만드는데 사용하는 구글에서 개발된 오픈소스 형식의 자바스크립트 엔진이다.
- 내부적으로 자바스크립트를 바이트코드로 컴파일하는 JIT형식의 컴파일을 가진다.
- 메모리 관리를 위해 내부적으로 GC를 수행한다.
- 내부에서 소스를 파서(Parser)을 통해 코드를 분석, 추상 구문 트리(AST)로 변환하는 역할을 가지고 있다.
파서(Parser) : 파서는 코드의 구문을 분석하여 해당 코드를 이해하고 실행 가능한 형태로 변환하는 역할을 가지고 있습니다. 주요한 기능으로는 코드의 최소 의미 단위인 토큰화, 토큰화를 바탕으로 구문,선언,스코프,식 분석 및 오류처리 등을 가지고 있습니다.
추상 구문 트리(Abstract Syntax Tree) : 프로그래밍 언어의 소스코드를 구문적인 구조로 나타내는 트리형식의 구조입니다.
개발자의 프로그래밍 언어를 컴퓨터의 어셈블리어로 변환하는 컴파일러나 인터프리터 중간단계에서 활용합니다.
이 외에도 여러가지의 특징을 가지고 있지만, 주요한 특징들에 대해 알아보았습니다.
V8 엔진의 작동 원리
V8엔진의 작동원리를 순서대로 표현하겠습니다.
1. 개발자의 JavaScript Source Code를 파서에게 넘겨줍니다.
2. 파서는 해당 소스코드를 낱말 분석 이라는 과정을 통해 토큰으로 분해하는 토큰화를 실행합니다.
3. 파싱을 통해 토큰화된 소스코드를 AST에 넘겨주며, AST는 인터프리터에게 넘겨줍니다.
4. Ignition에서는 토큰화된 각각의 토큰들을 바이트코드로 변환 및 실행을 합니다.
4.1 실행 중 자주 사용하는 코드들은 Compiler TurboFan에게 보내며, 최적화된 코드로 컴파일을 합니다.
4.2 컴파일된 코드들은 파싱과정이 아닌 Optimized Machine Code에서 다시 바이트코드로 변환을하여 실행합니다.
V8엔진의 특징으로는 Just-In-Time 형식의 컴파일을 하는 특징을 가지고 있었는데, 위의 설명한 작동원리에서 JIT컴파일을 순서대로 표현해 보았습니다.
즉, V8엔진은 자바스크립트 언어를 JIT 컴파일 형식으로 코드를 실행하는 엔진이라고 나타낼 수 있습니다.
정리
V8엔진 : 구글에서 개발되어 웹브라우저에서 사용하는 오픈소스 자바스크립트 엔진이다.
특징
1. 소스코드를 파싱과 AST를 사용하여 컴파일하는 JIT형식의 컴파일 구조이다.
2. 자바 JVM에서의 JIT와 같이 자주 사용하는 소스코드들을 내부적으로 저장하여 재사용 한다.
3. 내부적으로 GC를 가지고 있으며, 상황에 따라 저장되어있는 코드들을 삭제한다.
느낀점
웹 브라우저를 처음 접하였을때는 웹브라우저는 V8엔진을 사용하여 컴파일 한다 하였을때는 이해가 안가는 부분이 많았습니다. 하지만, 학습을 하고 난 후 자바언어에서 실행되는 JVM의 JIT형식과 유사한점이 많았으며, 이를 통해 기존의 JVM 에대한 포스팅을 하여 이해를 더 빠르게 할 수 있었습니다.
이번 포스팅을 통하여 왜 기초를 잘 알아야지에 대한 이유를 다시한번 확인할 수 있었습니다.
출처 및 참고내역