더 자세히 알고싶다면?
V8 힙과 Buffer 메모리
들어가기에 앞서, 해당 내용은 프로그래밍을 막 시작하신 분들에게 생소하고 어려운 개념들을 많이 포함하고 있습니다.
따라서, 다른 내용들에 관해 먼저 탐구하신 뒤, 탐구 과정에서 V8 엔진, libuv, JS core API 등 이벤트 루프 의 생명주기에 관한 내용들이 여러번 등장하고, 해당 내용들에 대한 개념이 필요한 시점에 다시 들려 학습을 이어나가시는 것을 강력하게 추천드립니다.
→ 모든 학습에있어 매우 훌륭한 선생님은 “흥미”입니다. 여러분이 당장의 복잡한 용어와 개념에 사로잡혀 소중한 학습 동기를 잃지 않기를 진심으로 바랍니다.
아래는 V8 엔진에 대한 초보자 수준의 간략한 소개와, Node.js 내부에서 js-core 라이브러리와 libuv가 어떻게 맞물려 작동하는지에 대한 고급 설명입니다.
간단 설명: V8 엔진이란?
V8 엔진은 Google이 만든 자바스크립트 엔진입니다.
- 역할: 자바스크립트 코드를 빠르게 컴파일하고 실행합니다.
- 특징:
- **C++**로 작성되어 있어 매우 빠릅니다.
- 자바스크립트를 기계어로 변환하여 네이티브 코드로 실행함으로써 높은 성능을 발휘합니다.
→ 음.. 비유하자면 JS 속도의 영업비밀이랄까?
- Chrome 브라우저와 Node.js에서 사용됩니다.
간단히 말해, V8은 자바스크립트 코드를 읽고 실행하는 **“뇌”**와 같은 역할을 합니다.
프로그래밍을 처음 입문하신 분들이라면, 이정도로 간단히 알고 넘어가도 충분합니다 :)
Node.js에서 V8, js-core libs, 그리고 libuv의 상호 작용
Node.js는 자바스크립트 런타임 환경으로, V8 엔진 위에 다양한 네이티브 모듈과 라이브러리(libuv, js-core libs 등)를 결합하여 비동기 I/O와 이벤트 기반 시스템을 구현합니다.
1. V8 엔진의 역할
- 자바스크립트 실행:
- V8은 Node.js 내에서 모든 자바스크립트 코드를 컴파일하고 실행합니다.
- *Just-In-Time (JIT)* 컴파일러를 사용해 코드를 네이티브 머신 코드로 변환, 이를 통해 실행 속도를 최적화합니다.
- 메모리 관리:
- V8은 자체 가비지 컬렉션(GC) 메커니즘을 가지고 있어, 자바스크립트 객체와 데이터를 관리합니다.
- 다만, 대용량 바이너리 데이터(예: Buffer)는 V8 힙 외부의 네이티브 메모리로 할당되어 GC의 부담을 줄입니다. → About V8 heap & buffer memory
2. js-core 라이브러리 (Node.js의 자바스크립트 핵심 라이브러리)
- 내장 모듈과 API:
- Node.js는 V8 위에 다양한 자바스크립트 API(예:
fs
, http
, crypto
등)를 제공합니다.
- 이들 API는 V8 엔진에서 실행되는 자바스크립트 코드와 C/C++로 작성된 네이티브 코드가 상호작용할 수 있도록 하는 브릿지(bridge) 역할을 합니다.