์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ํด์ ๊ฐ๋ฅํ๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ด์ฅํ ์ ์๊ฒ ๋น ๋ฅด๊ณ ์ต์ ํ๋ ์ฝ๋๋ก ๋ณํ์ํค๋ ์ญํ ์ ํ๋ค.
๋ธ๋ผ์ฐ์ ๋ณ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ข ๋ฅ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Firefox : Spidermonkey
- Edge : Chakra
- Safari : JavaScriptCore
- Chrome : V8
V8์ ๊ตฌ๊ธ์์ ์ ๊ณตํ๋ ์คํ์์ค ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด๋ค. C++๋ก ์์ฑ๋์์ผ๋ฉฐ Chrome๊ณผ Node.js, Electron์์ ์ฌ์ฉ๋๋ค. ECMA-262์ ์ ์๋๋๋ก ECMAScript๋ฅผ ๊ตฌํํ๋ค.
ECAM-262 : ์ ๋ณดํต์ ํ์ค์ ์ ์ ํ๋ ๋น์๋ฆฌ ํ์คํ๊ธฐ๊ตฌ ecma๊ฐ ์ ์ ํ ๊ธฐ์ ๊ท๊ฒฉ์ผ๋ก ๋ฒ์ฉ ๋ชฉ์ ์ ์คํฌ๋ฆฝํธ ์ธ์ด์ ๋ํ ๋ช ์ธ์ด๋ค.
ECMAScript : ECMA-262์์ ์ ์๋ ํ๋์ ์ฌ์ ์ฆ, ์คํฌ๋ฆฝํธ ์ธ์ด๊ฐ ์ง์ผ์ผํ ๊ท์น์ด๋ ์ธ๋ถ์ฌํญ ๋ฑ์ ์ ์ํ๋ค.
V8์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋ ์ ์์ผ๋ฉฐ C++์ ์์ฒด์ ์ธ ํจ์ ๊ตฌํ์ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค.
์๋ฅผ ๋ค์ด print('hello world')๋ Node.js์์ ์ ํจํ ๋ช
๋ น๋ฌธ์ด ์๋๋ฉฐ ์ด ๋ช
๋ น๋ฌธ์ ์ปดํ์ผํ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋ฌ๋ V8 ์คํ์์ค์์ C++๋ก print() ํจ์๋ฅผ ๊ตฌํํด ์ถ๊ฐํ๋ฉด ์ ์์ ์ผ๋ก ๋์ํ๋๋ก ํ ์ ์๋ค.
ํ์ฑ์ด๋ ์์ค ์ฝ๋๋ฅผ ๋ถ๋ฌ์จ ํ AST๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค. AST๋ ์์ค ์ฝ๋๋ฅผ ์ปดํจํฐ๊ฐ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๊ตฌ์กฐํํ๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
Ignition์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํํ๋ ์ธํฐํ๋ฆฌํฐ์ด๋ค.
์์ค ์ฝ๋๋ฅผ ์ปดํจํฐ๊ฐ ํด์ํ๊ธฐ ์ฌ์ด ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํํด ์๋ณธ ์ฝ๋๋ฅผ ๋ซ์ ํ์ฑํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ ์ค์ด๊ณ ์ฝ๋์ ์๋ ์ค์ฌ์ ์ฝ๋ ์คํ ์ ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ ์ ์๋ค.
TurborFan์ ์ต์ ํ๋ฅผ ๋ด๋นํ๋ ์ปดํ์ผ๋ฌ์ด๋ค. ๋ฐํ์์ ๊ตฌ์ฑํ๋ ์์์ค ํ๋์ธ Profiler์๊ฒ ํจ์๋ ๋ณ์์ ํธ์ถ ๋น๋์ ๊ฐ์ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์์ง ๋ฐ์ ๊ธฐ์ค์ ์ถฉ์กฑํ๋ ์ฝ๋๋ค์ ์ต์ ํํ๋ค.
์ค์ V8์์์ ์ปดํ์ผ ๊ณผ์ ์ ์๋์ ๊ฐ๋ค.
- V8์ ์์ค ์ฝ๋๋ฅผ ๊ฐ์ ธ์ ํ์๋ก ๋ณด๋ธ๋ค.
- ํ์๋ ์์ค ์ฝ๋๋ฅผ ๋ถ์ํ ํ AST(์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ)๋ก ๋ณํํ๋ค.
- AST๋ฅผ Ignition๋ก ์ ์กํ๋ค.
- ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํจ์ผ๋ก์จ ์์ค ์ฝ๋๊ฐ ์ค์ ๋ก ์๋ํ๋ฉฐ ์์ฃผ ์ฌ์ฉ๋๋ ์ฝ๋๋ TurboFan์ผ๋ก ๋ณด๋ด์ ธ ์ต์ ํ ์ฝ๋(Optimized Machine Code)๋ก ์ปดํ์ผ๋๋ค.
- ์ต์ ํ ์ฝ๋์ ์ฌ์ฉ๋น๋๊ฐ ์ ์ด์ง๋ฉด de-optimizing๊ฐ ๋๊ธฐ๋ ํ๋ค.
Reference

