V8, SpiderMonkey, JavaScriptCore์ ์ฑ๋ฅ ํน์ฑ์ ์ฌ์ธต ๋ถ์ํ๊ณ , ๊ฐ ์์ง์ ์ฅ๋จ์ ๋ฐ ์ต์ ํ ๊ธฐ์ ์ ๋น๊ตํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ ์ฑ๋ฅ: V8 vs. SpiderMonkey vs. JavaScriptCore
์๋ฐ์คํฌ๋ฆฝํธ๋ ์น์ ๊ณต์ฉ์ด(lingua franca)๊ฐ ๋์ด, ์ํธ์์ฉ์ ์ธ ์น์ฌ์ดํธ๋ถํฐ ๋ณต์กํ ์น ์ ํ๋ฆฌ์ผ์ด์ , ์ฌ์ง์ด Node.js์ ๊ฐ์ ์๋ฒ์ฌ์ด๋ ํ๊ฒฝ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ชจ๋ ๊ฒ์ ๊ตฌ๋ํ๊ณ ์์ต๋๋ค. ๊ทธ ์ด๋ฉด์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ๋์์์ด ์ฐ๋ฆฌ์ ์ฝ๋๋ฅผ ํด์ํ๊ณ ์คํํฉ๋๋ค. ์ด๋ฌํ ์์ง์ ์ฑ๋ฅ ํน์ฑ์ ์ดํดํ๋ ๊ฒ์ ๋ฐ์์ฑ ์๊ณ ํจ์จ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด ๊ธ์์๋ ์ธ ๊ฐ์ง ์ฃผ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ธ V8(Chrome ๋ฐ Node.js์์ ์ฌ์ฉ), SpiderMonkey(Firefox์์ ์ฌ์ฉ), JavaScriptCore(Safari์์ ์ฌ์ฉ)๋ฅผ ์ข ํฉ์ ์ผ๋ก ๋น๊ตํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง ์ดํดํ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ๋ ํ๋ก๊ทธ๋จ์ ๋๋ค. ์ด๋ฌํ ์์ง์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ง๋๋ค:
- ํ์(Parser): ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)๋ก ๋ณํํฉ๋๋ค.
- ์ธํฐํ๋ฆฌํฐ(Interpreter): AST๋ฅผ ์คํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค.
- ์ปดํ์ผ๋ฌ(Compiler): ์์ฃผ ์คํ๋๋ ์ฝ๋(ํซ์คํ)๋ฅผ ๋จธ์ ์ฝ๋๋ก ์ปดํ์ผํ์ฌ ๋ ๋น ๋ฅธ ์คํ์ ์ํด ์ต์ ํํฉ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector): ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ํ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ์ต์ ํ(Optimizations): ์ฝ๋ ์คํ ์๋์ ํจ์จ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ธฐ์ ๋ค์ ๋๋ค.
์์ง๋ง๋ค ๋ค์ํ ๊ธฐ์ ๊ณผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฏ๋ก ์ฑ๋ฅ ํ๋กํ์ด ๋ค๋ฆ ๋๋ค. JIT(Just-In-Time) ์ปดํ์ผ, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ต, ํน์ ์ฝ๋ ํจํด์ ๋ํ ์ต์ ํ์ ๊ฐ์ ์์๋ค์ด ๋ชจ๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
๊ฒฝ์ ์์ง: V8, SpiderMonkey, JavaScriptCore
V8
Google์์ ๊ฐ๋ฐํ V8์ Chrome๊ณผ Node.js์ ๊ธฐ๋ฐ์ด ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋๋ค. ๋น ๋ฅธ ์๋์ ๊ณต๊ฒฉ์ ์ธ ์ต์ ํ ์ ๋ต์ผ๋ก ์ ๋ช ํฉ๋๋ค. V8์ ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Full-codegen: ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋จธ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ด๊ธฐ ์ปดํ์ผ๋ฌ์ ๋๋ค.
- Crankshaft: ์ฑ๋ฅ ํฅ์์ ์ํด ํซ ํจ์๋ฅผ ์ฌ์ปดํ์ผํ๋ ์ต์ ํ ์ปดํ์ผ๋ฌ์ ๋๋ค. (๋๋ถ๋ถ Turbofan์ผ๋ก ๋์ฒด๋์์ง๋ง, ์ญ์ฌ์ ๋งฅ๋ฝ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.)
- Turbofan: V8์ ํ๋์ ์ธ ์ต์ ํ ์ปดํ์ผ๋ฌ๋ก, ํฅ์๋ ์ฑ๋ฅ๊ณผ ์ ์ง๋ณด์์ฑ์ ์ํด ์ค๊ณ๋์์ต๋๋ค. Crankshaft๋ณด๋ค ๋ ์ ์ฐํ๊ณ ๊ฐ๋ ฅํ ์ต์ ํ ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํฉ๋๋ค.
- Orinoco: V8์ ์ธ๋๋ณ, ๋ณ๋ ฌ, ๋์์ฑ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ก, ์ค๋จ ์๊ฐ์ ์ต์ํํ๊ณ ์ ๋ฐ์ ์ธ ๋ฐ์์ฑ์ ํฅ์์ํค๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- Ignition: V8์ ์ธํฐํ๋ฆฌํฐ ๋ฐ ๋ฐ์ดํธ์ฝ๋์ ๋๋ค.
V8์ ๋ค๊ณ์ธต ์ ๊ทผ ๋ฐฉ์์ ์ฝ๋๋ฅผ ์ด๊ธฐ์ ๋น ๋ฅด๊ฒ ์คํํ ๋ค์, ์ฑ๋ฅ์ ์ค์ํ ๋ถ๋ถ์ ์๋ณํ๋ฉด์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ต์ ํํ ์ ์๊ฒ ํด์ค๋๋ค. ํ๋์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ค๋จ ์๊ฐ์ ์ต์ํํ์ฌ ๋ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์์: V8์ ์๋์ ํจ์จ์ฑ์ด ์ค์ํ ๋ณต์กํ ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA) ๋ฐ Node.js๋ก ๊ตฌ์ถ๋ ์๋ฒ์ฌ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค.
SpiderMonkey
SpiderMonkey๋ Mozilla๊ฐ ๊ฐ๋ฐํ๊ณ Firefox๋ฅผ ๊ตฌ๋ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋๋ค. ์ค๋ ์ญ์ฌ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์น ํ์ค ์ค์์ ์ค์ ์ ๋๊ณ ์์ต๋๋ค. SpiderMonkey์ ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ธํฐํ๋ฆฌํฐ(Interpreter): ์ด๊ธฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค.
- IonMonkey: SpiderMonkey์ ์ต์ ํ ์ปดํ์ผ๋ฌ๋ก, ์์ฃผ ์คํ๋๋ ์ฝ๋๋ฅผ ๊ณ ๋๋ก ์ต์ ํ๋ ๋จธ์ ์ฝ๋๋ก ์ปดํ์ผํฉ๋๋ค.
- WarpBuilder: ์์ ์๊ฐ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ค๊ณ๋ ๋ฒ ์ด์ค๋ผ์ธ ์ปดํ์ผ๋ฌ์ ๋๋ค. ์ธํฐํ๋ฆฌํฐ์ IonMonkey ์ฌ์ด์ ์์นํฉ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector): SpiderMonkey๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
SpiderMonkey๋ ์ฑ๋ฅ๊ณผ ํ์ค ์ค์ ์ฌ์ด์ ๊ท ํ์ ์ฐ์ ์ํฉ๋๋ค. ์ ์ง์ ์ปดํ์ผ ์ ๋ต์ ํตํด ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ์คํํ๊ธฐ ์์ํ๋ฉด์๋ ์ต์ ํ๋ฅผ ํตํด ์๋นํ ์ฑ๋ฅ ํฅ์์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
์์: SpiderMonkey๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํฌ๊ฒ ์์กดํ๊ณ ์น ํ์ค์ ์๊ฒฉํ ์ค์๊ฐ ํ์ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
JavaScriptCore
JavaScriptCore(Nitro๋ผ๊ณ ๋ ํจ)๋ Apple์ด ๊ฐ๋ฐํ๊ณ Safari์์ ์ฌ์ฉํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋๋ค. ์ ๋ ฅ ํจ์จ์ฑ๊ณผ WebKit ๋ ๋๋ง ์์ง๊ณผ์ ํตํฉ์ ์ค์ ์ ๋ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค. JavaScriptCore์ ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- LLInt (Low-Level Interpreter): ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ์ด๊ธฐ ์ธํฐํ๋ฆฌํฐ์ ๋๋ค.
- DFG (Data Flow Graph): JavaScriptCore์ 1๋จ๊ณ ์ต์ ํ ์ปดํ์ผ๋ฌ์ ๋๋ค.
- FTL (Faster Than Light): JavaScriptCore์ 2๋จ๊ณ ์ต์ ํ ์ปดํ์ผ๋ฌ๋ก, LLVM์ ์ฌ์ฉํ์ฌ ๊ณ ๋๋ก ์ต์ ํ๋ ๋จธ์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
- B3: FTL์ ๊ธฐ๋ฐ์ด ๋๋ ์๋ก์ด ์ ์์ค ๋ฐฑ์๋ ์ปดํ์ผ๋ฌ์ ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector): JavaScriptCore๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ณ ์ค๋จ ์๊ฐ์ ์ต์ํํ๋ ๊ธฐ์ ์ ๊ฐ์ถ ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
JavaScriptCore๋ ์ ๋ ฅ ์๋น๋ฅผ ์ต์ํํ๋ฉด์ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ฏ๋ก, ํนํ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ์ ํฉํฉ๋๋ค.
์์: JavaScriptCore๋ iPhone ๋ฐ iPad์ ๊ฐ์ Apple ๊ธฐ๊ธฐ์์ ์ ์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ์น์ฌ์ดํธ์ ์ต์ ํ๋์ด ์์ต๋๋ค.
์ฑ๋ฅ ๋ฒค์น๋งํฌ ๋ฐ ๋น๊ต
์๋ฐ์คํฌ๋ฆฝํธ ์์ง ์ฑ๋ฅ ์ธก์ ์ ๋ณต์กํ ์์ ์ ๋๋ค. ์์ง ์ฑ๋ฅ์ ๋ค์ํ ์ธก๋ฉด์ ํ๊ฐํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ฒค์น๋งํฌ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค:
- Speedometer: ์ค์ ์ํฌ๋ก๋๋ฅผ ๋ํ๋ด๋ ์๋ฎฌ๋ ์ด์ ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ธก์ ํฉ๋๋ค.
- Octane (์ฌ์ฉ ์ค๋จ, ๊ทธ๋ฌ๋ ์ญ์ฌ์ ์ผ๋ก ์ค์ํจ): ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ์ ๋ค์ํ ์ธก๋ฉด์ ์ธก์ ํ๊ธฐ ์ํด ์ค๊ณ๋ ํ ์คํธ ๋ชจ์์ ๋๋ค.
- JetStream: ๊ณ ๊ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ธก์ ํ๊ธฐ ์ํด ์ค๊ณ๋ ๋ฒค์น๋งํฌ ๋ชจ์์ ๋๋ค.
- ์ค์ ์ ํ๋ฆฌ์ผ์ด์ : ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ์ฑ๋ฅ์ ํ ์คํธํ๋ ๊ฒ์ด ๊ฐ์ฅ ํ์ค์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ์ฑ๋ฅ ๋ํฅ:
- V8: ์ผ๋ฐ์ ์ผ๋ก ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์์ ๋งค์ฐ ์ฐ์ํ ์ฑ๋ฅ์ ๋ณด์ด๋ฉฐ, Octane ๋ฐ JetStream๊ณผ ๊ฐ์ ๋ฒค์น๋งํฌ์์ ์ข ์ข ์ ๋๋ฅผ ์ฐจ์งํฉ๋๋ค. ๊ณต๊ฒฉ์ ์ธ ์ต์ ํ ์ ๋ต์ด ์๋์ ๊ธฐ์ฌํฉ๋๋ค.
- SpiderMonkey: ์ฑ๋ฅ๊ณผ ํ์ค ์ค์์ ์ข์ ๊ท ํ์ ์ ๊ณตํฉ๋๋ค. ํนํ ์ค์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ํฌ๋ก๋๋ฅผ ๊ฐ์กฐํ๋ ๋ฒค์น๋งํฌ์์ V8๊ณผ ๊ฒฝ์๋ ฅ ์๋ ์ฑ๋ฅ์ ๋ณด์ผ ๋๊ฐ ๋ง์ต๋๋ค.
- JavaScriptCore: ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ ์ ๋ ฅ ํจ์จ์ฑ์ ์ธก์ ํ๋ ๋ฒค์น๋งํฌ์์ ์ข ์ข ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ ๋๋ค. Apple ๊ธฐ๊ธฐ์ ํน์ ์๊ตฌ์ ์ต์ ํ๋์ด ์์ต๋๋ค.
์ค์ ๊ณ ๋ ค์ฌํญ:
- ๋ฒค์น๋งํฌ์ ํ๊ณ: ๋ฒค์น๋งํฌ๋ ์ ์ฉํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ์ง๋ง ํญ์ ์ค์ ์ฑ๋ฅ์ ์ ํํ๊ฒ ๋ฐ์ํ์ง๋ ์์ต๋๋ค. ์ฌ์ฉ๋ ํน์ ๋ฒค์น๋งํฌ๊ฐ ๊ฒฐ๊ณผ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ํ๋์จ์ด ์ฐจ์ด: ํ๋์จ์ด ๊ตฌ์ฑ์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ๋ค๋ฅธ ๊ธฐ๊ธฐ์์ ๋ฒค์น๋งํฌ๋ฅผ ์คํํ๋ฉด ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์์ต๋๋ค.
- ์์ง ์ ๋ฐ์ดํธ: ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ง์์ ์ผ๋ก ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ์๋ก์ด ๋ฒ์ ์ด ๋์ฌ ๋๋ง๋ค ์ฑ๋ฅ ํน์ฑ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
- ์ฝ๋ ์ต์ ํ: ์ ์์ฑ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ์ฌ์ฉ๋ ์์ง์ ๊ด๊ณ์์ด ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ฃผ์ ์ฑ๋ฅ ์์ธ
๋ช ๊ฐ์ง ์์ธ์ด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค:
- JIT ์ปดํ์ผ: JIT(Just-In-Time) ์ปดํ์ผ์ ์ค์ํ ์ต์ ํ ๊ธฐ์ ์ ๋๋ค. ์์ง์ ์ฝ๋์ ํซ์คํ์ ์๋ณํ๊ณ ์ด๋ฅผ ๋จธ์ ์ฝ๋๋ก ์ปดํ์ผํ์ฌ ๋ ๋น ๋ฅธ ์คํ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. JIT ์ปดํ์ผ๋ฌ์ ํจ์จ์ฑ์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. V8์ Turbofan๊ณผ SpiderMonkey์ IonMonkey๋ ๊ฐ๋ ฅํ JIT ์ปดํ์ผ๋ฌ์ ์์ ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ์ : ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ํ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ํจ์จ์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ฐฉํดํ ์ ์๋ ์ค๋จ ์๊ฐ์ ์ต์ํํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด ์ผ๋ฐ์ ์ผ๋ก ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ธ๋ผ์ธ ์บ์ฑ: ์ธ๋ผ์ธ ์บ์ฑ์ ์์ฑ ์ ๊ทผ์ ์ต์ ํํ๋ ๊ธฐ์ ์ ๋๋ค. ์์ง์ ๋์ผํ ์์ ์ ๋ฐ๋ณต์ ์ผ๋ก ์ํํ์ง ์๋๋ก ์์ฑ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์บ์ํฉ๋๋ค.
- ํ๋ ํด๋์ค: ํ๋ ํด๋์ค๋ ๊ฐ์ฒด ์์ฑ ์ ๊ทผ์ ์ต์ ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์์ง์ ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํด๋์ค๋ฅผ ์์ฑํ์ฌ ๋ ๋น ๋ฅธ ์์ฑ ์กฐํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ์ต์ ํ ๋ฌดํจํ: ๊ฐ์ฒด์ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์์ง์ ์ด์ ์ ์ต์ ํ๋ ์ฝ๋๋ฅผ ๋ฌดํจํํด์ผ ํ ์ ์์ต๋๋ค. ๋น๋ฒํ ์ต์ ํ ๋ฌดํจํ๋ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์ต์ ํ ๊ธฐ์
์ฌ์ฉ ์ค์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ด๊ณ์์ด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ต์ ํํ๋ฉด ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ํ์ ๋๋ค:
- DOM ์กฐ์ ์ต์ํ: DOM ์กฐ์์ ์ข ์ข ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ผ์ผํต๋๋ค. DOM ์ ๋ฐ์ดํธ๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํ๊ณ ๋ถํ์ํ ๋ฆฌํ๋ก์ฐ ๋ฐ ๋ฆฌํ์ธํธ๋ฅผ ํผํ์ญ์์ค. ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด ๋ฌธ์ ์กฐ๊ฐ(document fragments)๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ๋ฃจํ์์ DOM์ ์์๋ฅผ ํ๋์ฉ ์ถ๊ฐํ๋ ๋์ , ๋ฌธ์ ์กฐ๊ฐ์ ๋ง๋ค๊ณ ์์๋ค์ ์กฐ๊ฐ์ ์ถ๊ฐํ ๋ค์, ๊ทธ ์กฐ๊ฐ์ DOM์ ์ถ๊ฐํ์ญ์์ค.
- ํจ์จ์ ์ธ ์๋ฃ ๊ตฌ์กฐ ์ฌ์ฉ: ์์ ์ ์ ํฉํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ ํํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ํจ์จ์ ์ธ ์กฐํ ๋ฐ ๊ณ ์ ์ฑ ๊ฒ์ฌ๋ฅผ ์ํด ๋ฐฐ์ด ๋์ Set๊ณผ Map์ ์ฌ์ฉํ์ญ์์ค. ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ ์ซ์ ๋ฐ์ดํฐ์ TypedArray ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
- ์ ์ญ ๋ณ์ ํผํ๊ธฐ: ์ ์ญ ๋ณ์์ ์ ๊ทผํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ง์ญ ๋ณ์์ ์ ๊ทผํ๋ ๊ฒ๋ณด๋ค ๋๋ฆฝ๋๋ค. ์ ์ญ ๋ณ์ ์ฌ์ฉ์ ์ต์ํํ๊ณ ํด๋ก์ ๋ฅผ ์ฌ์ฉํ์ฌ ๋น๊ณต๊ฐ ์ค์ฝํ๋ฅผ ๋ง๋์ญ์์ค.
- ๋ฃจํ ์ต์ ํ: ๋ฃจํ ๋ด ๊ณ์ฐ์ ์ต์ํํ๊ณ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฐ์ ์บ์ฑํ์ฌ ๋ฃจํ๋ฅผ ์ต์ ํํ์ญ์์ค. ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ์ํํ ๋๋ `for...of`์ ๊ฐ์ ํจ์จ์ ์ธ ๋ฃจํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ญ์์ค.
- ๋๋ฐ์ด์ฑ ๋ฐ ์ค๋กํ๋ง: ํนํ ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ ํจ์ ํธ์ถ ๋น๋๋ฅผ ์ ํํ๊ธฐ ์ํด ๋๋ฐ์ด์ฑ ๋ฐ ์ค๋กํ๋ง์ ์ฌ์ฉํ์ญ์์ค. ์ด๋ ๋น ๋ฅด๊ฒ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ก ์ธํ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์คํฌ๋กค ์ด๋ฒคํธ๋ ๋ฆฌ์ฌ์ด์ฆ ์ด๋ฒคํธ์ ์ด ๊ธฐ์ ๋ค์ ์ฌ์ฉํ์ญ์์ค.
- ์น ์์ปค: ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ์น ์์ปค๋ก ์ฎ๊ฒจ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ญ์์ค. ์น ์์ปค๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ฏ๋ก ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ๊ณ์ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ณต์กํ ์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ ๋ถ์์ ์น ์์ปค์์ ์ํํ ์ ์์ต๋๋ค.
- ์ฝ๋ ๋ถํ : ์ฝ๋๋ฅผ ๋ ์์ ๋ฉ์ด๋ฆฌ๋ก ๋๋๊ณ ํ์ํ ๋ ๋ก๋ํ์ญ์์ค. ์ด๋ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. Webpack ๋ฐ Parcel๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฝ๋ ๋ถํ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์บ์ฑ: ๋ธ๋ผ์ฐ์ ์บ์ฑ์ ํ์ฉํ์ฌ ์ ์ ์์ฐ์ ์ ์ฅํ๊ณ ์๋ฒ์ ๋ํ ์์ฒญ ์๋ฅผ ์ค์ด์ญ์์ค. ์ ์ ํ ์บ์ ํค๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฐ์ด ์บ์๋๋ ๊ธฐ๊ฐ์ ์ ์ดํ์ญ์์ค.
์ค์ ์ฌ๋ก ๋ฐ ์ผ์ด์ค ์คํฐ๋
์ผ์ด์ค ์คํฐ๋ 1: ๋๊ท๋ชจ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ต์ ํ
ํ ๋ํ ์ ์์๊ฑฐ๋ ์น์ฌ์ดํธ๋ ๋๋ฆฐ ์ด๊ธฐ ๋ก๋ ์๊ฐ๊ณผ ๊ตผ๋ฌ ์ฌ์ฉ์ ์ํธ์์ฉ์ผ๋ก ์ธํด ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ฒช์์ต๋๋ค. ๊ฐ๋ฐํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถ์ํ๊ณ ๊ฐ์ ํ ์ ์๋ ๋ช ๊ฐ์ง ์์ญ์ ํ์ธํ์ต๋๋ค:
- ์ด๋ฏธ์ง ์ต์ ํ: ์์ถ ๊ธฐ์ ๊ณผ ๋ฐ์ํ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์์ต๋๋ค.
- ์ฝ๋ ๋ถํ : ๊ฐ ํ์ด์ง์ ํ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ง ๋ก๋ํ๋๋ก ์ฝ๋ ๋ถํ ์ ๊ตฌํํ์ต๋๋ค.
- ๋๋ฐ์ด์ฑ: ๊ฒ์ ์ฟผ๋ฆฌ ๋น๋๋ฅผ ์ ํํ๊ธฐ ์ํด ๋๋ฐ์ด์ฑ์ ์ฌ์ฉํ์ต๋๋ค.
- ์บ์ฑ: ์ ์ ์์ฐ์ ์ ์ฅํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์บ์ฑ์ ํ์ฉํ์ต๋๋ค.
์ด๋ฌํ ์ต์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์๋นํ ๊ฐ์ ์ ๊ฐ์ ธ์๊ณ , ๋ ๋น ๋ฅธ ๋ก๋ ์๊ฐ๊ณผ ๋ ๋ฐ์์ฑ ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ก์ต๋๋ค.
์ผ์ด์ค ์คํฐ๋ 2: ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ ์ฑ๋ฅ ํฅ์
ํ ๋ชจ๋ฐ์ผ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ตฌํ ๊ธฐ๊ธฐ์์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์์์ต๋๋ค. ๊ฐ๋ฐํ์ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ๋ง๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ๋ ๋ฐ ์ง์คํ์ต๋๋ค:
- DOM ์กฐ์ ๊ฐ์: DOM ์กฐ์์ ์ต์ํํ๊ณ ๊ฐ์ DOM๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํจ์จ์ฑ์ ๋์์ต๋๋ค.
- ์น ์์ปค ์ฌ์ฉ: ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ์น ์์ปค๋ก ์ฎ๊ฒจ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ต๋๋ค.
- ์ ๋๋ฉ์ด์ ์ต์ ํ: ๋ ๋์ ์ฑ๋ฅ์ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ ์ ๋๋ฉ์ด์ ๋์ CSS ํธ๋์ง์ ๋ฐ ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํ์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ์: ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ์ ํผํ๊ณ ํจ์จ์ ์ธ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ต์ ํํ์ต๋๋ค.
์ด๋ฌํ ์ต์ ํ๋ ๊ตฌํ ํ๋์จ์ด์์๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ๋ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ ์๋ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ฏธ๋
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฑ๋ฅ, ๋ณด์ ๋ฐ ๊ธฐ๋ฅ ํฅ์์ ์ด์ ์ ๋ง์ถ ์ง์์ ์ธ ์ฐ๊ตฌ ๊ฐ๋ฐ์ ํตํด ๋์์์ด ์งํํ๊ณ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์ฃผ์ ๋ํฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- WebAssembly (Wasm): WebAssembly๋ ๊ฐ๋ฐ์๊ฐ C++ ๋ฐ Rust์ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ๊ฑฐ์ ๋ค์ดํฐ๋ธ ์๋๋ก ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐ์ด๋๋ฆฌ ๋ช ๋ น์ด ํ์์ ๋๋ค. WebAssembly๋ ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์น์ผ๋ก ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ฐ์ : ์ค๋จ ์๊ฐ์ ์ต์ํํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํ ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ธฐ์ ์ ๋ํ ์ง์์ ์ธ ์ฐ๊ตฌ ๊ฐ๋ฐ์ด ์ด๋ฃจ์ด์ง๊ณ ์์ต๋๋ค. ๋์์ฑ ๋ฐ ๋ณ๋ ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ค์ ์ ๋ก๋๋ค.
- ๊ณ ๊ธ ์ต์ ํ ๊ธฐ์ : ํ๋กํ ๊ธฐ๋ฐ ์ต์ ํ ๋ฐ ์์ธก ์คํ๊ณผ ๊ฐ์ ์๋ก์ด ์ต์ ํ ๊ธฐ์ ์ ํ์ํ์ฌ ์ฑ๋ฅ์ ๋์ฑ ํฅ์์ํต๋๋ค.
- ๋ณด์ ๊ฐํ: ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ณด์์ ๊ฐ์ ํ๊ณ ์ทจ์ฝ์ ์ผ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํ ์ง์์ ์ธ ๋ ธ๋ ฅ์ด ์ด๋ฃจ์ด์ง๊ณ ์์ต๋๋ค.
๊ฒฐ๋ก
V8, SpiderMonkey, JavaScriptCore๋ ๋ชจ๋ ๊ฐ์์ ๊ฐ์ ๊ณผ ์ฝ์ ์ ๊ฐ์ง ๊ฐ๋ ฅํ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋๋ค. V8์ ์๋์ ์ต์ ํ์์ ๋ฐ์ด๋๊ณ , SpiderMonkey๋ ์ฑ๋ฅ๊ณผ ํ์ค ์ค์์ ๊ท ํ์ ์ ๊ณตํ๋ฉฐ, JavaScriptCore๋ ์ ๋ ฅ ํจ์จ์ฑ์ ์ค์ ์ ๋ก๋๋ค. ์ด๋ฌํ ์์ง์ ์ฑ๋ฅ ํน์ฑ์ ์ดํดํ๊ณ ์ฝ๋์ ์ต์ ํ ๊ธฐ์ ์ ์ ์ฉํ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง ๊ธฐ์ ์ ์ต์ ๋ฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ์ญ์์ค.