V8 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ TurboFan ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ธต์ ์ผ๋ก ์ดํด๋ณด๊ณ , ์ฝ๋ ์์ฑ ํ์ดํ๋ผ์ธ, ์ต์ ํ ๊ธฐ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ์น๋ ์ฑ๋ฅ ์ํฅ์ ํ๊ตฌํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ V8 ์ต์ ํ ์ปดํ์ผ๋ฌ ํ์ดํ๋ผ์ธ: TurboFan ์ฝ๋ ์์ฑ ๋ถ์
Google์ด ๊ฐ๋ฐํ V8 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ Chrome๊ณผ Node.js์ ๊ธฐ๋ฐ์ด ๋๋ ๋ฐํ์ ํ๊ฒฝ์ ๋๋ค. ์ฑ๋ฅ์ ๋ํ ๋์์๋ ์ถ๊ตฌ๋ V8์ ํ๋ ์น ๊ฐ๋ฐ์ ์ด์์ผ๋ก ๋ง๋ค์์ต๋๋ค. V8 ์ฑ๋ฅ์ ํต์ฌ ๊ตฌ์ฑ ์์๋ ์ต์ ํ ์ปดํ์ผ๋ฌ์ธ TurboFan์ ๋๋ค. ์ด ๊ธ์์๋ TurboFan์ ์ฝ๋ ์์ฑ ํ์ดํ๋ผ์ธ์ ์ฌ์ธต์ ์ผ๋ก ๋ถ์ํ๊ณ , ์ต์ ํ ๊ธฐ๋ฒ๊ณผ ๊ทธ๊ฒ์ด ์ ์ธ๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ดํด๋ด ๋๋ค.
V8 ๋ฐ ์ปดํ์ผ ํ์ดํ๋ผ์ธ ์๊ฐ
V8์ ์ต์ ์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ค๊ณ์ธต ์ปดํ์ผ ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํฉ๋๋ค. ์ฒ์์๋ Ignition ์ธํฐํ๋ฆฌํฐ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. Ignition์ ๋น ๋ฅธ ์์ ์๊ฐ์ ์ ๊ณตํ์ง๋ง, ์ค๋ ์คํ๋๊ฑฐ๋ ์์ฃผ ์คํ๋๋ ์ฝ๋์๋ ์ต์ ํ๋์ด ์์ง ์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ TurboFan์ด ๊ฐ์ ํฉ๋๋ค.
V8์ ์ปดํ์ผ ๊ณผ์ ์ ํฌ๊ฒ ๋ค์ ๋จ๊ณ๋ก ๋๋ ์ ์์ต๋๋ค:
- ํ์ฑ(Parsing): ์์ค ์ฝ๋๊ฐ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)๋ก ํ์ฑ๋ฉ๋๋ค.
- ์ด๊ทธ๋์ (Ignition): AST๊ฐ Ignition ์ธํฐํ๋ฆฌํฐ์ ์ํด ํด์๋ฉ๋๋ค.
- ํ๋กํ์ผ๋ง(Profiling): V8์ Ignition ๋ด์์ ์ฝ๋ ์คํ์ ๋ชจ๋ํฐ๋งํ์ฌ 'ํซ ์คํ'(์์ฃผ ์คํ๋๋ ์ฝ๋)์ ์๋ณํฉ๋๋ค.
- ํฐ๋ณดํฌ(TurboFan): ํซ ํจ์๋ TurboFan์ ์ํด ์ต์ ํ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ์ปดํ์ผ๋ฉ๋๋ค.
- ์ญ์ต์ ํ(Deoptimization): ์ปดํ์ผ ์ค TurboFan์ด ๋ง๋ ๊ฐ์ ์ด ๋ฌดํจํ๋๋ฉด, ์ฝ๋๋ ๋ค์ Ignition์ผ๋ก ์ญ์ต์ ํ๋ฉ๋๋ค.
์ด๋ฌํ ๊ณ์ธต์ ์ ๊ทผ ๋ฐฉ์์ ํตํด V8์ ์์ ์๊ฐ๊ณผ ์ต๊ณ ์ฑ๋ฅ ์ฌ์ด์ ๊ท ํ์ ํจ๊ณผ์ ์ผ๋ก ๋ง์ถ์ด ์ ์ธ๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๋ฐ์์ฑ ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค.
TurboFan ์ปดํ์ผ๋ฌ: ์ฌ์ธต ๋ถ์
TurboFan์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋งค์ฐ ํจ์จ์ ์ธ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ๋ณํํ๋ ์ ๊ตํ ์ต์ ํ ์ปดํ์ผ๋ฌ์ ๋๋ค. ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค:
- ์ ์ ๋จ์ผ ํ ๋น(SSA) ํ์: TurboFan์ ์ฝ๋๋ฅผ SSA ํ์์ผ๋ก ํํํ์ฌ ๋ง์ ์ต์ ํ ๊ณผ์ ์ ๋จ์ํํฉ๋๋ค. SSA์์๋ ๊ฐ ๋ณ์์ ๊ฐ์ด ํ ๋ฒ๋ง ํ ๋น๋๋ฏ๋ก ๋ฐ์ดํฐ ํ๋ฆ ๋ถ์์ด ๋ ๊ฐ๋จํด์ง๋๋ค.
- ์ ์ด ํ๋ฆ ๊ทธ๋ํ(CFG): ์ปดํ์ผ๋ฌ๋ ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ ๋ํ๋ด๊ธฐ ์ํด CFG๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฃฝ์ ์ฝ๋ ์ ๊ฑฐ ๋ฐ ๋ฃจํ ์ธ๋กค๋ง๊ณผ ๊ฐ์ ์ต์ ํ๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
- ํ์ ํผ๋๋ฐฑ(Type Feedback): V8์ Ignition์์ ์ฝ๋๋ฅผ ์คํํ๋ ๋์ ํ์ ์ ๋ณด๋ฅผ ์์งํฉ๋๋ค. ์ด ํ์ ํผ๋๋ฐฑ์ TurboFan์ด ํน์ ํ์ ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ํน์ํํ๋ ๋ฐ ์ฌ์ฉ๋์ด ์๋นํ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์ต๋๋ค.
- ์ธ๋ผ์ด๋(Inlining): TurboFan์ ํจ์ ํธ์ถ์ ์ธ๋ผ์ด๋ํ์ฌ ํธ์ถ ์์น๋ฅผ ํจ์ ๋ณธ๋ฌธ์ผ๋ก ๋์ฒดํฉ๋๋ค. ์ด๋ ํจ์ ํธ์ถ์ ์ค๋ฒํค๋๋ฅผ ์ ๊ฑฐํ๊ณ ์ถ๊ฐ์ ์ธ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๋ฃจํ ์ต์ ํ(Loop Optimization): TurboFan์ ๋ฃจํ ์ธ๋กค๋ง, ๋ฃจํ ํจ์ , ๊ฐ๋ ์ ๊ฐ๊ณผ ๊ฐ์ ๋ค์ํ ์ต์ ํ๋ฅผ ๋ฃจํ์ ์ ์ฉํฉ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ์ ์ธ์ง(Garbage Collection Awareness): ์ปดํ์ผ๋ฌ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ธ์งํ๊ณ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ธฐ๊ณ์ด ์ฝ๋๋ก: TurboFan ํ์ดํ๋ผ์ธ
TurboFan ์ปดํ์ผ ํ์ดํ๋ผ์ธ์ ๋ช ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๋ก ๋๋ ์ ์์ต๋๋ค:
- ๊ทธ๋ํ ๊ตฌ์ฑ: ์ด๊ธฐ ๋จ๊ณ๋ AST๋ฅผ ๊ทธ๋ํ ํํ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ทธ๋ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์ํํ๋ ๊ณ์ฐ์ ๋ํ๋ด๋ ๋ฐ์ดํฐ ํ๋ฆ ๊ทธ๋ํ์ ๋๋ค.
- ํ์ ์ถ๋ก : TurboFan์ ๋ฐํ์ ์ค์ ์์ง๋ ํ์ ํผ๋๋ฐฑ์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋์ ๋ณ์ ๋ฐ ํํ์์ ํ์ ์ ์ถ๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ปดํ์ผ๋ฌ๋ ํน์ ํ์ ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ํน์ํํ ์ ์์ต๋๋ค.
- ์ต์ ํ ํจ์ค: ์์ ํด๋ฉ, ์ฃฝ์ ์ฝ๋ ์ ๊ฑฐ, ๋ฃจํ ์ต์ ํ ๋ฑ ์ฌ๋ฌ ์ต์ ํ ํจ์ค๊ฐ ๊ทธ๋ํ์ ์ ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ํจ์ค๋ ๊ทธ๋ํ๋ฅผ ๋จ์ํํ๊ณ ์์ฑ๋ ์ฝ๋์ ํจ์จ์ฑ์ ํฅ์์ํค๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
- ๊ธฐ๊ณ์ด ์ฝ๋ ์์ฑ: ์ต์ ํ๋ ๊ทธ๋ํ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ๋ณํ๋ฉ๋๋ค. ์ด ๊ณผ์ ์๋ ๋์ ์ํคํ ์ฒ์ ์ ํฉํ ๋ช ๋ น์ด๋ฅผ ์ ํํ๊ณ ๋ณ์์ ๋ํ ๋ ์ง์คํฐ๋ฅผ ํ ๋นํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค.
- ์ฝ๋ ๋ง๋ฌด๋ฆฌ: ๋ง์ง๋ง ๋จ๊ณ๋ ์์ฑ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ํจ์นํ๊ณ ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ์ฝ๋์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋๋ค.
TurboFan์ ์ฃผ์ ์ต์ ํ ๊ธฐ๋ฒ
TurboFan์ ํจ์จ์ ์ธ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ๊ด๋ฒ์ํ ์ต์ ํ ๊ธฐ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ธฐ๋ฒ ์ค ์ผ๋ถ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
ํ์ ํน์ํ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ํ์ ์ธ์ด๋ก, ๋ณ์์ ํ์ ์ด ์ปดํ์ผ ์์ ์ ์๋ ค์ง์ง ์์์ ์๋ฏธํฉ๋๋ค. ์ด๋ก ์ธํด ์ปดํ์ผ๋ฌ๊ฐ ์ฝ๋๋ฅผ ์ต์ ํํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. TurboFan์ ํ์ ํผ๋๋ฐฑ์ ์ฌ์ฉํ์ฌ ํน์ ํ์ ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ํน์ํํจ์ผ๋ก์จ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์๊ฐํด ๋ด ์๋ค:
function add(x, y) {
return x + y;
}
ํ์ ์ ๋ณด๊ฐ ์์ผ๋ฉด TurboFan์ `x`์ `y`์ ๋ํ ๋ชจ๋ ํ์ ์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ปดํ์ผ๋ฌ๊ฐ `x`์ `y`๊ฐ ํญ์ ์ซ์๋ผ๋ ๊ฒ์ ์๋ค๋ฉด, ์ ์ ๋ง์ ์ ์ง์ ์ํํ๋ ํจ์ฌ ๋ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํ์ ํน์ํ๋ ์๋นํ ์ฑ๋ฅ ํฅ์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์ธ๋ผ์ด๋
์ธ๋ผ์ด๋์ ํจ์ ๋ณธ๋ฌธ์ ํธ์ถ ์์น์ ์ง์ ์ฝ์ ํ๋ ๊ธฐ๋ฒ์ ๋๋ค. ์ด๋ ํจ์ ํธ์ถ์ ์ค๋ฒํค๋๋ฅผ ์ ๊ฑฐํ๊ณ ์ถ๊ฐ์ ์ธ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. TurboFan์ ์์ ํจ์์ ํฐ ํจ์ ๋ชจ๋๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ธ๋ผ์ด๋ํฉ๋๋ค.
๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์๊ฐํด ๋ด ์๋ค:
function square(x) {
return x * x;
}
function calculateArea(radius) {
return Math.PI * square(radius);
}
๋ง์ฝ TurboFan์ด `square` ํจ์๋ฅผ `calculateArea` ํจ์์ ์ธ๋ผ์ด๋ํ๋ค๋ฉด, ๊ฒฐ๊ณผ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค:
function calculateArea(radius) {
return Math.PI * (radius * radius);
}
์ด๋ ๊ฒ ์ธ๋ผ์ด๋๋ ์ฝ๋๋ ํจ์ ํธ์ถ ์ค๋ฒํค๋๋ฅผ ์ ๊ฑฐํ๊ณ ์ปดํ์ผ๋ฌ๊ฐ ์์ ํด๋ฉ๊ณผ ๊ฐ์ ์ถ๊ฐ ์ต์ ํ(`Math.PI`๊ฐ ์ปดํ์ผ ์์ ์ ์๋ ค์ง ๊ฒฝ์ฐ)๋ฅผ ์ํํ ์ ์๊ฒ ํฉ๋๋ค.
๋ฃจํ ์ต์ ํ
๋ฃจํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์์ ํํ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์์ธ์ ๋๋ค. TurboFan์ ๋ฃจํ๋ฅผ ์ต์ ํํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ธฐ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- ๋ฃจํ ์ธ๋กค๋ง(Loop Unrolling): ์ด ๊ธฐ๋ฒ์ ๋ฃจํ์ ๋ณธ๋ฌธ์ ์ฌ๋ฌ ๋ฒ ๋ณต์ ํ์ฌ ๋ฃจํ ์ ์ด์ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
- ๋ฃจํ ํจ์ (Loop Fusion): ์ด ๊ธฐ๋ฒ์ ์ฌ๋ฌ ๋ฃจํ๋ฅผ ๋จ์ผ ๋ฃจํ๋ก ๊ฒฐํฉํ์ฌ ๋ฃจํ ์ ์ด์ ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ณ ๋ฐ์ดํฐ ์ง์ญ์ฑ์ ํฅ์์ํต๋๋ค.
- ๊ฐ๋ ์ ๊ฐ(Strength Reduction): ์ด ๊ธฐ๋ฒ์ ๋ฃจํ ๋ด์ ๋น์ผ ์ฐ์ฐ์ ๋ ์ ๋ ดํ ์ฐ์ฐ์ผ๋ก ๋์ฒดํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์์๋ฅผ ๊ณฑํ๋ ๊ฒ์ ์ผ๋ จ์ ๋ง์ ๊ณผ ์ํํธ ์ฐ์ฐ์ผ๋ก ๋์ฒด๋ ์ ์์ต๋๋ค.
์ญ์ต์ ํ
TurboFan์ ๊ณ ๋๋ก ์ต์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ ธ๋ ฅํ์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ๋ฐํ์ ๋์์ ์๋ฒฝํ๊ฒ ์์ธกํ๋ ๊ฒ์ ํญ์ ๊ฐ๋ฅํ ๊ฒ์ ์๋๋๋ค. ๋ง์ฝ ์ปดํ์ผ ์ค์ TurboFan์ด ์ธ์ด ๊ฐ์ ์ด ๋ฌดํจํ๋๋ฉด, ์ฝ๋๋ ๋ค์ Ignition์ผ๋ก ์ญ์ต์ ํ๋์ด์ผ ํฉ๋๋ค.
์ญ์ต์ ํ๋ ์ต์ ํ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ธํฐํ๋ฆฌํฐ๋ก ๋๋์๊ฐ์ผ ํ๋ฏ๋ก ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ ๋๋ค. ์ญ์ต์ ํ์ ๋น๋๋ฅผ ์ต์ํํ๊ธฐ ์ํด, TurboFan์ ๋ฐํ์์ ๊ฐ์ ์ ํ์ธํ๊ธฐ ์ํด ๊ฐ๋ ์กฐ๊ฑด์ ์ฌ์ฉํฉ๋๋ค. ๋ง์ฝ ๊ฐ๋ ์กฐ๊ฑด์ด ์คํจํ๋ฉด, ์ฝ๋๋ ์ญ์ต์ ํ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, TurboFan์ด ๋ณ์๊ฐ ํญ์ ์ซ์๋ผ๊ณ ๊ฐ์ ํ๋ฉด, ๋ณ์๊ฐ ์ค์ ๋ก ์ซ์์ธ์ง ํ์ธํ๋ ๊ฐ๋ ์กฐ๊ฑด์ ์ฝ์ ํ ์ ์์ต๋๋ค. ๋ง์ฝ ๋ณ์๊ฐ ๋ฌธ์์ด์ด ๋๋ฉด, ๊ฐ๋ ์กฐ๊ฑด์ ์คํจํ๊ณ ์ฝ๋๋ ์ญ์ต์ ํ๋ ๊ฒ์ ๋๋ค.
์ฑ๋ฅ ์ํฅ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
TurboFan์ ์๋ ๋ฐฉ์์ ์ดํดํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ ํจ์จ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋ค์์ ๋ช ์ฌํด์ผ ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค:
- ์๊ฒฉ ๋ชจ๋(Strict Mode) ์ฌ์ฉ: ์๊ฒฉ ๋ชจ๋๋ ๋ ์๊ฒฉํ ํ์ฑ ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ฌ TurboFan์ด ๋ ์ต์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค.
- ํ์ ํผ๋ ํผํ๊ธฐ: TurboFan์ด ์ฝ๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํน์ํํ ์ ์๋๋ก ๋ณ์์ ๋ํด ์ผ๊ด๋ ํ์ ์ ์ ์งํ์ญ์์ค. ํ์ ์ ์์ด ์ฌ์ฉํ๋ฉด ์ญ์ต์ ํ ๋ฐ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ์๊ณ ์ง์ค๋ ํจ์ ์์ฑ: ์์ ํจ์๋ TurboFan์ด ์ธ๋ผ์ด๋ํ๊ณ ์ต์ ํํ๊ธฐ ๋ ์ฝ์ต๋๋ค.
- ๋ฃจํ ์ต์ ํ: ๋ฃจํ๋ ์ข ์ข ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ๋ฏ๋ก ๋ฃจํ ์ฑ๋ฅ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ญ์์ค. ์ฑ๋ฅ ํฅ์์ ์ํด ๋ฃจํ ์ธ๋กค๋ง ๋ฐ ๋ฃจํ ํจ์ ๊ณผ ๊ฐ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ญ์์ค.
- ์ฝ๋ ํ๋กํ์ผ๋ง: ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋์ ์ฑ๋ฅ ๋ณ๋ชฉ ์ง์ ์ ์๋ณํ์ญ์์ค. ์ด๋ ๊ฐ์ฅ ํฐ ์ํฅ์ ๋ฏธ์น ์์ญ์ ์ต์ ํ ๋ ธ๋ ฅ์ ์ง์คํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค. Chrome DevTools์ Node.js์ ๋ด์ฅ ํ๋กํ์ผ๋ฌ๋ ์ ์ฉํ ๋๊ตฌ์ ๋๋ค.
TurboFan ์ฑ๋ฅ ๋ถ์ ๋๊ตฌ
๊ฐ๋ฐ์๊ฐ TurboFan์ ์ฑ๋ฅ์ ๋ถ์ํ๊ณ ์ต์ ํ ๊ธฐํ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ๋๊ตฌ๊ฐ ์์ต๋๋ค:
- Chrome DevTools: Chrome DevTools๋ TurboFan์ ์์ฑ๋ ์ฝ๋๋ฅผ ๋ณด๊ณ ์ญ์ต์ ํ ์ง์ ์ ์๋ณํ๋ ๊ธฐ๋ฅ์ ํฌํจํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ๋กํ์ผ๋งํ๊ณ ๋๋ฒ๊น ํ๊ธฐ ์ํ ๋ค์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- Node.js ํ๋กํ์ผ๋ฌ: Node.js๋ Node.js์์ ์คํ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ๋ํ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ด์ฅ ํ๋กํ์ผ๋ฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- V8์ d8 ์ ธ: d8 ์ ธ์ ๊ฐ๋ฐ์๊ฐ V8 ์์ง์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ์ปค๋งจ๋๋ผ์ธ ๋๊ตฌ์ ๋๋ค. ๋ค์ํ ์ต์ ํ ๊ธฐ๋ฒ์ ์คํํ๊ณ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ๋ถ์ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์: Chrome DevTools๋ฅผ ์ฌ์ฉํ TurboFan ๋ถ์
Chrome DevTools๋ฅผ ์ฌ์ฉํ์ฌ TurboFan์ ์ฑ๋ฅ์ ๋ถ์ํ๋ ๊ฐ๋จํ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค:
function slowFunction(x) {
let result = 0;
for (let i = 0; i < 100000; i++) {
result += x * i;
}
return result;
}
console.time("slowFunction");
slowFunction(5);
console.timeEnd("slowFunction");
์ด ์ฝ๋๋ฅผ Chrome DevTools๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ญ์์ค:
- Chrome DevTools๋ฅผ ์ฝ๋๋ค(Ctrl+Shift+I ๋๋ Cmd+Option+I).
- "Performance" ํญ์ผ๋ก ์ด๋ํฉ๋๋ค.
- "Record" ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
- ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ๊ฑฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค.
- "Stop" ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
Performance ํญ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์คํ ํ์๋ผ์ธ์ด ํ์๋ฉ๋๋ค. "slowFunction" ํธ์ถ์ ํ๋ํ์ฌ TurboFan์ด ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์ต์ ํํ๋์ง ๋ณผ ์ ์์ต๋๋ค. ์์ฑ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ๋ณด๊ณ ์ญ์ต์ ํ ์ง์ ์ ์๋ณํ ์๋ ์์ต๋๋ค.
TurboFan๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ์ ๋ฏธ๋
TurboFan์ ๋์์์ด ์งํํ๋ ์ปดํ์ผ๋ฌ์ด๋ฉฐ, Google์ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ๋ฏธ๋์ TurboFan์ด ๊ฐ์ ๋ ๊ฒ์ผ๋ก ์์๋๋ ๋ช ๊ฐ์ง ์์ญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ ๋์ ํ์ ์ถ๋ก : ํ์ ์ถ๋ก ์ ๊ฐ์ ํ๋ฉด TurboFan์ด ์ฝ๋๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋ก ํน์ํํ์ฌ ์ถ๊ฐ์ ์ธ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
- ๋ ๊ณต๊ฒฉ์ ์ธ ์ธ๋ผ์ด๋: ๋ ๋ง์ ํจ์๋ฅผ ์ธ๋ผ์ด๋ํ๋ฉด ๋ ๋ง์ ํจ์ ํธ์ถ ์ค๋ฒํค๋๋ฅผ ์ ๊ฑฐํ๊ณ ์ถ๊ฐ์ ์ธ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ ๊ฒ์ ๋๋ค.
- ๊ฐ์ ๋ ๋ฃจํ ์ต์ ํ: ๋ฃจํ๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋ก ์ต์ ํํ๋ฉด ๋ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ด ํฅ์๋ ๊ฒ์ ๋๋ค.
- WebAssembly์ ๋ํ ๋ ๋์ ์ง์: TurboFan์ WebAssembly ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๋ฐ๋ ์ฌ์ฉ๋ฉ๋๋ค. WebAssembly์ ๋ํ ์ง์์ ๊ฐ์ ํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ค์ํ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ฑ๋ฅ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ต์ ํ๋ฅผ ์ํ ๊ธ๋ก๋ฒ ๊ณ ๋ ค์ฌํญ
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ต์ ํํ ๋๋ ์ ์ธ๊ณ์ ์ธ ๋งฅ๋ฝ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ง์ญ๋ง๋ค ๋คํธ์ํฌ ์๋, ์ฅ์น ์ฑ๋ฅ, ์ฌ์ฉ์ ๊ธฐ๋์น๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ฃผ์ ๊ณ ๋ ค์ฌํญ์ ๋๋ค:
- ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ: ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ์ด ๋์ ์ง์ญ์ ์ฌ์ฉ์๋ ๋ก๋ฉ ์๊ฐ์ด ๋ ๋๋ฆด ์ ์์ต๋๋ค. ์ฝ๋ ํฌ๊ธฐ๋ฅผ ์ต์ ํํ๊ณ ๋คํธ์ํฌ ์์ฒญ ์๋ฅผ ์ค์ด๋ฉด ์ด๋ฌํ ์ง์ญ์ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
- ์ฅ์น ์ฑ๋ฅ: ๊ฐ๋ฐ๋์๊ตญ์ ์ฌ์ฉ์๋ ๊ตฌํ์ด๊ฑฐ๋ ์ฑ๋ฅ์ด ๋ฎ์ ์ฅ์น๋ฅผ ๊ฐ์ง๊ณ ์์ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฅ์น์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์ต์ ํํ๋ฉด ์ฑ๋ฅ๊ณผ ์ ๊ทผ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ํ์งํ: ํ์งํ๊ฐ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ๊ณ ๋ คํ์ญ์์ค. ํ์งํ๋ ๋ฌธ์์ด์ ์๋ณธ ๋ฌธ์์ด๋ณด๋ค ๊ธธ๊ฑฐ๋ ์งง์ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ ์ด์์๊ณผ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
- ๊ตญ์ ํ: ๊ตญ์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ์ ๋์ฝ๋๋ฅผ ์ธ์ํ๋ ๋ฌธ์์ด ์กฐ์ ํจ์๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ์ ๊ทผ์ฑ: ์ฝ๋๊ฐ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์์๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ์ง ํ์ธํ์ญ์์ค. ์ฌ๊ธฐ์๋ ์ด๋ฏธ์ง์ ๋ํ ๋์ฒด ํ ์คํธ ์ ๊ณต, ์๋งจํฑ HTML ์ฌ์ฉ, ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ ์ค์๊ฐ ํฌํจ๋ฉ๋๋ค.
์ด๋ฌํ ๊ธ๋ก๋ฒ ์์๋ฅผ ๊ณ ๋ คํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ข์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
๊ฒฐ๋ก
TurboFan์ V8์ ์ฑ๋ฅ์ ๊ฒฐ์ ์ ์ธ ์ญํ ์ ํ๋ ๊ฐ๋ ฅํ ์ต์ ํ ์ปดํ์ผ๋ฌ์ ๋๋ค. TurboFan์ ์๋ ๋ฐฉ์์ ์ดํดํ๊ณ ํจ์จ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด, ๊ฐ๋ฐ์๋ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ์ข์ผ๋ฉฐ ์ ์ธ๊ณ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค. TurboFan์ ์ง์์ ์ธ ๊ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํ ๊ณ ์ฑ๋ฅ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์์ด ๊ฒฝ์๋ ฅ ์๋ ํ๋ซํผ์ผ๋ก ๋จ์ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. V8๊ณผ TurboFan์ ์ต์ ๋ฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๊ณ์ ํ์ ํ๋ฉด ๊ฐ๋ฐ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ํ์ฉํ๊ณ ๋ค์ํ ํ๊ฒฝ๊ณผ ์ฅ์น์์ ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ ๊ฒ์ ๋๋ค.