1️⃣ V8 엔진란?
V8은 Google Chrome과 Node.js에서 사용되는 JavaScript 엔진으로, Google이 개발한 오픈 소스 프로젝트다. 이 엔진은 JavaScript를 실행하는 핵심 특징으로 C++로 구현되어 있고, 고속 성능을 위해 JIT(Just-In-Time) 컴파일러를 사용한다.
정보: JIT 컴파일는 인터프리터 방식이 아니라, 특정 JavaScript 코드를 한번에 기계어로 변환하여 빠르게 실행하는 방식이다.
즉, V8 엔진은 기본적으로 인터프리터를 사용하지만 성능을 최적화하기 위해 JIT(Just-In-Time) 컴파일도 함께 사용한다.
2️⃣ V8 엔진의 실행 과정
- 파싱
- JavaScript 코드를 읽고, AST(Abstract Syntax Tree, 추상 구문 트리)로 변환
- 바이트코드 생성 (Ignition라고 불리는 작업 → 인터프리터 역할)
- V8의 Ignition이라는 인터프리터가 AST를 바이트코드로 변환
- 기계어로 변환을 하지 않고, 바이트코드를 한 줄씩 해석하면서 실행함으로 빠르게 시작하지만 실행 속도는 느릴 수 있음
- 최적화 (TurboFan이라고 불리는 작업 → JIT 컴파일러 역할)
- 코드가 실행되는 동안, V8는 성능을 분석
- 실행이 빈번한 함수나 반복되는 코드 패턴을 찾고, 이를 TurboFan이 JIT 컴파일하여 기계어로 변환하여 자주 사용되는 코드를 빠르게 실행될 수 있도록 함
3️⃣ JavaScript의 동작 방식
JavaScript는 자동 메모리 관리를 수행하며, 개발자가 직접 메모리를 할당하거나 해제할 필요가 없다.
메모리는 크게 Stack과 Heap 두 가지 공간으로 나뉜다.
Stack(스택)
- 함수 실행 컨텍스트와 원시 타입 데이터(number, string, boolean, null, undefined, symbol, bigint)가 저장됨
- Last In, First Out (후입선출) 방식으로 동작.
Heap(힙)
- 객체, 배열, 함수 등이 저장되는 공간으로 크기가 큰 데이터나 동적으로 생성되는 데이터가 저장됨.