V8! V8! V8! V8!

구름미각·2024년 6월 20일
1
post-thumbnail

개요

잠시 워보이에 빙의좀 하겠습니다.

V8은 웹 표준을 가장 잘 지키는 오픈소스 자바스크립트 엔진이다.
그리고 자바스크립트 런타임인 node.js에서도 브라우저에서 동작하지 않기 위해 V8 엔진에 의존하고 있다.
사실상 자바스크립트로 돌아가는 거의 모든 것들은 V8에 의존하고 있다고 봐도 무방하다.

자바스크립트의 심장, V8 엔진 없이는 우리가 꿈꾸는 모든 웹 애플리케이션은 존재할 수 없다. 브라우저와 Node.js에서 자바스크립트의 빠르고 안정적이게 동작하도록 이끌어내는 V8 엔진을 찬양하라!

V8 만세!

웹 표준의 수호자

V8은 ECMAScript와 WebAssembly 표준을 완벽하게 구현하여, 최신 웹 기술을 지원하고 브라우저와의 호환성을 완벽하게 보장한다. V8 덕분에 우리는 최첨단 웹 애플리케이션을 만들 수 있다. 오픈 소스 프로젝트라 지금 이 순간에도 계속해서 커뮤니티에서 최신 기능과 버그 수정이 이루어지고 있어 항상 최상의 상태를 유지를 하고 있다.

번개 같은 속도

V8은 JIT(Just In Time)의 상징과도 같다.
JIT 컴파일러는 컴파일러와 인터프리터의 장점을 합치고자 만들어진 개념이다.
일반 프로그래밍 코드를 기계어로 컴파일하는 것보다 컴파일 시간이 획기적으로 단축되었기 때문에 자바스크립트 코드를 실행과 동시에 바이너리 코드로 변환후 컴파일을 가능하게 만든 계기가 되었다.

다양한 플랫폼의 지배자

V8은 Windows, macOS, Linux 등 다양한 운영 체제에서 웹 브라우저로 동작할 목적을 가졌기 때문에, x64, IA-32, ARM 등의 다양한 프로세서 아키텍처에서 동작하므로 현존하는 모든 플랫폼에서 동작한다고 할 수 있다!

심지어 V8은 Node.js의 중심 엔진으로, 브라우저 없이도 서버 측에서 자바스크립트를 매우 빠르게 실행할 수 있다.

V8은 어떤 C++ 애플리케이션에도 내장될 수 있다. 이를 통해 우리는 우리의 객체와 함수를 JavaScript에 노출하여, 어플리케이션과 서로 상호작용과 기능을 나눌 수 있다.

이 모든 것이 가능하게 해주는 V8의 위엄을 다시 한 번 기억하라!

지상 최강의 엔진의 행동법

  1. 가장 먼저 환경을 초기화한다!
    환경의 호출 스택, 힙, 콜백 큐, 이벤트 루프, Web API, Web DOM 설정이 초기화 된다.

  2. JavaScript 코드 컴파일과 파싱을 한다!
    JavaScript 코드를 파싱하여 추상 구문 트리(Abstract Syntax Tree)로 변환해서 엔진이 쉽게 작업을 처리할 수 있도록 한다.

  3. 바이트코드 생성한다.
    V8 엔진은 AST를 인터프리터가 실행할 명령어 집합인 바이트코드로 변환한다.

  4. 바이트코드 해석하고 실행한다.
    인터프리터는 생성된 바이트코드를 한 줄씩 읽고 명령을 실행한다.

  5. 최적화를 하고 기계어 코드 실행한다!
    V8 엔진은 자주 사용되는 바이트코드를 감지하여 "핫" 스팟으로 표시된다.
    이러한 핫 스팟은 더 효율적인 기계어 코드로 컴파일되어 CPU에서 실행된다.
    최적화에 실패하면, 원래의 바이트코드를 다시 실행한다.

잠깐 바이트코드와 기계어 코드 비교하자면
기계어 코드는 메모리 사용량이 많지만 실행 속도가 빠르고
바이트 코드는 메모리 사용량이 적지만 실행 속도가 느리다.
언제나 V8엔진은 둘 사이의 균형을 맞추면서 행동한다.

  1. 쓰레기까지 수집하는 친환경적인 최강의 엔진.
    JavaScript는 동적으로 할당된 메모리를 관리하기 위해 Garbage Collection을 사용합니다.
    GC는 사용되지 않는 메모리(쓰레기)를 자동으로 감지하고 해제하여, 메모리 누수를 방지하고 자원을 효율적으로 관리합니다.
  • Mark-and-Sweep: 사용되는 객체들을 마킹하고, 마킹되지 않은 객체들을 쓰레기로 간주하여 해제한다.
  • Generational Collection: 객체들을 세대에 따라 관리하여, 더 자주 사용되는 객체는 더 높은 세대로 분류하여 별도로 관리한다.

JS뿐만이 아니다! WASM도 있다!

V8 엔진은 WebAssembly (Wasm)을 실행하기 위한 아주 강력하게 지원한다.
WebAssembly는 웹 브라우저 및 다른 환경에서 고성능의 이식 가능한 코드를 실행하기 위한 바이너리 형식 파일이다.

  1. Wasm 모듈을 가지고 온다!
    v8 엔진은 Wasm 모듈을 로드합니다. 이 모듈은 보통 .wasm 확장자를 가지며, 바이너리 형식으로 인코딩된 WebAssembly 코드를 포함한다.

  2. 파싱한다!
    로드된 Wasm 모듈은 구문 분석 단계에서 바이트 코드를 해석하고 내부적으로 이해할 수 있는 형태로 변환한다.

  3. 컴파일한다!
    구문 분석 후, v8 엔진은 Wasm 코드를 기계 코드로 컴파일합니다. 이 과정에서 Wasm 모듈의 각 함수 및 기본 블록은 해당 플랫폼의 네이티브 기계 코드로 변환된다.

  4. 최적화한다!
    컴파일된 기계 코드는 최적화 단계를 거친니다. V8 엔진은 다양한 최적화 기법을 사용하여 코드 실행 속도를 향상시키고 메모리 사용을 최적화한다.
    이 v8 엔진의 주요 강점은 Wasm 코드의 성능을 극대화하는 데 중요한 역할을 한다.

  5. 실행한다!
    최적화된 코드는 최종적으로 V8 엔진에서 실행됩니다. 이 과정에서 Wasm 모듈의 함수들은 자바스크립트와 마찬가지로 호출되며, 웹 브라우저 환경에서는 DOM 조작이나 다른 웹 API 호출과 통합이 가능하다.

결론

V8 엔진은 현대 웹 개발에서 심장과도 같다.
자바스크립트와 WebAssembly의 빠른 실행을 지원하며, 최신 웹 표준을 완벽하게 준수하여 개발자들이 최첨단 웹 애플리케이션을 구현할 수 있도록 도와준다.

이 모든 특성들로 인해 V8 엔진은 브라우저와 Node.js 등 여러 환경에서 필수적인 역할을 한다.
따라서 V8 엔진은 자바스크립트의 발전과 함께 끊임없이 진화하고 있으며, 앞으로도 더욱 혁신적인 기능을 기대할 수 밖에 없다.

profile
(돈과 인맥을 만들어 나가는)학생 개발자

0개의 댓글

관련 채용 정보