귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!== 역사 == === 개발 배경 === 2000년대 중반까지 JavaScript는 주로 웹 페이지의 보조적인 동작을 구현하는 언어로 여겨졌다. 그러나 [[Gmail]], [[Google Maps]]와 같은 복잡한 웹 애플리케이션이 등장하면서 브라우저 안에서 대규모 JavaScript 코드를 빠르게 실행하는 능력이 중요해졌다. Google은 Chrome을 개발하면서 웹 애플리케이션이 기존 데스크톱 애플리케이션에 가까운 반응성과 복잡성을 가질 수 있어야 한다고 보았고, 이를 위해 새로운 JavaScript 엔진인 V8을 만들었다.<ref name="google-browser" /> V8 프로젝트는 가상 머신과 동적 언어 구현 경험이 많은 [[Lars Bak]]이 주도하였다. 2008년 9월 2일 Google Chrome이 처음 공개되었을 때 V8도 함께 공개되었고, 같은 날 오픈 소스 프로젝트가 되었다.<ref name="v8-10years">{{웹 인용|url=https://v8.dev/blog/10-years|제목=Celebrating 10 years of V8|웹사이트=V8.dev|출판사=Google|날짜=2018-09-11|확인날짜=2026-06-16}}</ref><ref name="chrome-v8-launch">{{웹 인용|url=https://developers.googleblog.com/google-chrome-chromium-and-v8-launch-today/|제목=Google Chrome, Chromium, and V8 launch today|웹사이트=Google Developers Blog|출판사=Google|날짜=2008-09-02|확인날짜=2026-06-16}}</ref> === 2008년: Chrome과 함께 공개 === 2008년 9월 2일 Google은 Chrome 베타를 공개하면서 Chromium과 V8도 함께 공개하였다.<ref name="chrome-v8-launch" /> 초기 V8은 JavaScript를 중간 바이트코드로 오래 머무르게 하지 않고 가능한 한 빠르게 기계어로 컴파일하는 접근을 취했다. 당시 이 방식은 복잡한 웹 애플리케이션을 더 빠르게 실행하기 위한 핵심 전략으로 소개되었다.<ref name="chrome-speed">{{웹 인용|url=https://blog.chromium.org/2008/09/google-chromes-need-for-speed_02.html|제목=Google Chrome's Need for Speed|웹사이트=Chromium Blog|출판사=Google|날짜=2008-09-02|확인날짜=2026-06-16}}</ref> 초기 V8의 설계에는 빠른 속성 접근, 숨겨진 클래스, 인라인 캐시, 효율적인 가비지 컬렉션 같은 기술이 포함되었다. 이러한 기술들은 동적 타입 언어인 JavaScript에서 객체 구조가 실행 중 바뀔 수 있다는 문제를 다루면서도 가능한 한 정적 언어에 가까운 최적화 기회를 얻기 위한 것이었다. === Crankshaft 시대 === 2010년대 초반 V8은 '''Crankshaft'''라는 최적화 컴파일러를 도입하였다. Crankshaft는 자주 실행되는 코드를 찾아 더 빠른 기계어로 다시 컴파일하는 역할을 했다. 그러나 JavaScript 언어가 빠르게 발전하고, 예외 처리, 모듈, 클래스, 다양한 ES2015 이후 문법이 보편화되면서 Crankshaft의 구조적 한계가 점점 커졌다. V8 팀은 Crankshaft가 새로운 언어 기능과 다양한 아키텍처를 장기적으로 지원하기에 복잡도가 높고 유지보수가 어렵다고 보았다.<ref name="ignition-turbofan" /> === Ignition과 TurboFan으로의 전환 === 2017년 V8 v5.9부터 V8은 JavaScript 실행 파이프라인을 '''Ignition'''과 '''TurboFan''' 중심으로 재구성하였다.<ref name="ignition-turbofan" /> Ignition은 JavaScript를 바이트코드로 변환하고 이를 실행하는 인터프리터이며, TurboFan은 실행 중 수집된 타입 피드백과 프로파일 정보를 바탕으로 최적화된 기계어를 생성하는 컴파일러이다. 이 전환의 중요한 목적은 다음과 같다. * 메모리 사용량 감소 * 모바일 환경에서의 시작 성능 개선 * 새 ECMAScript 기능을 더 쉽게 지원 * 아키텍처별 코드 중복 감소 * 최적화 컴파일러의 유지보수성 향상 * Crankshaft와 Full-codegen 제거 Ignition과 TurboFan의 도입은 V8 역사에서 매우 큰 구조 변화였다. V8 팀은 이를 통해 JavaScript 언어 전체를 더 일관되게 최적화할 수 있는 기반을 마련했다고 설명하였다.<ref name="ignition-turbofan" /> === WebAssembly 지원 === V8은 JavaScript뿐 아니라 [[WebAssembly]] 실행 엔진이기도 하다. WebAssembly는 C, C++, Rust 같은 언어로 작성된 프로그램을 웹과 기타 실행 환경에서 효율적이고 안전하게 실행하기 위한 이진 명령어 형식이다. V8은 WebAssembly 모듈을 빠르게 시작하기 위해 '''Liftoff'''라는 baseline compiler를 도입하였고, 더 높은 성능이 필요한 코드에는 TurboFan 계열의 최적화 컴파일러를 사용한다.<ref name="liftoff">{{웹 인용|url=https://v8.dev/blog/liftoff|제목=Liftoff: a new baseline compiler for WebAssembly in V8|웹사이트=V8.dev|출판사=Google|날짜=2018-08-20|확인날짜=2026-06-16}}</ref><ref name="wasm-pipeline">{{웹 인용|url=https://v8.dev/docs/wasm-compilation-pipeline|제목=WebAssembly compilation pipeline|웹사이트=V8.dev|출판사=Google|확인날짜=2026-06-16}}</ref> 2020년대에는 WebAssembly SIMD, WebAssembly BigInt 통합, WebAssembly tail calls, WasmGC, WebAssembly 동적 티어링, WebAssembly 최적화와 deoptimization 지원 등도 발전하였다.<ref name="wasm-features">{{웹 인용|url=https://v8.dev/features|제목=JavaScript and WebAssembly features|웹사이트=V8.dev|출판사=Google|확인날짜=2026-06-16}}</ref><ref name="wasm-speculative">{{웹 인용|url=https://v8.dev/blog/wasm-speculative-optimizations|제목=Speculative Optimizations for WebAssembly using Deopts and Data Structures|웹사이트=V8.dev|출판사=Google|날짜=2025-06-24|확인날짜=2026-06-16}}</ref> === Sparkplug 도입 === 2021년 V8은 '''Sparkplug'''라는 빠른 비최적화 JavaScript 컴파일러를 도입하였다.<ref name="sparkplug" /> Sparkplug는 Ignition 바이트코드를 기반으로 빠르게 기계어 코드를 생성한다. Sparkplug의 목표는 TurboFan처럼 무거운 최적화를 수행하지 않으면서도 인터프리터 실행보다 빠른 코드를 제공하는 것이다. Sparkplug는 V8의 티어드 컴파일 구조에서 Ignition과 TurboFan 사이의 간격을 줄였다. JavaScript 코드는 처음에는 Ignition으로 빠르게 시작하고, 이후 Sparkplug로 더 빠르게 실행되며, 충분히 자주 실행되고 최적화 가치가 있는 코드는 Maglev나 TurboFan으로 넘어갈 수 있다. === Maglev 도입 === 2023년 Chrome M117에서 V8은 '''Maglev'''라는 새로운 중간 단계 최적화 JIT 컴파일러를 도입하였다.<ref name="maglev" /> Maglev는 Sparkplug보다 훨씬 빠른 코드를 만들면서도 TurboFan보다 훨씬 빠르게 컴파일되는 것을 목표로 한다. V8 팀은 Maglev가 웹 성능 벤치마크와 에너지 사용량 측면에서 이점을 제공한다고 설명하였다.<ref name="holiday2023">{{웹 인용|url=https://v8.dev/blog/holiday-season-2023|제목=V8 is Faster and Safer than Ever!|웹사이트=V8.dev|출판사=Google|날짜=2023-12-14|확인날짜=2026-06-16}}</ref> Maglev는 특히 짧은 시간 안에 최적화 이익을 얻어야 하는 실제 웹 페이지와 웹 애플리케이션에서 중요하다. TurboFan은 매우 고성능의 코드를 만들 수 있지만 컴파일 비용이 높기 때문에 모든 코드에 적용하기 어렵다. Maglev는 이러한 비용과 성능 사이의 균형을 맞추기 위해 도입되었다. === Turboshaft와 Sea of Nodes 탈피 === 2025년 V8 팀은 TurboFan 내부의 일부 구조를 기존의 '''Sea of Nodes''' 표현에서 더 전통적인 제어 흐름 그래프 기반 중간 표현인 '''Turboshaft'''로 옮기는 작업을 설명하였다.<ref name="turboshaft" /> Sea of Nodes는 이론적으로 강력한 최적화 표현이지만, JavaScript와 WebAssembly처럼 복잡한 제어 흐름, 부작용, 타입 체크, 메모리 접근이 많은 언어에서는 분석과 유지보수가 어렵다는 문제가 있었다. Turboshaft는 컴파일러 내부 구조를 더 명확하게 만들고, 버그 조사와 최적화 구현을 쉽게 하며, 컴파일 시간을 줄이기 위한 방향으로 도입되었다. V8 팀은 2025년 기준으로 JavaScript 백엔드 전체와 WebAssembly 파이프라인 전체에서 Turboshaft가 사용되고 있다고 설명하였다.<ref name="turboshaft" /> 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림)