esbuild๋ Go ์ธ์ด๋ก ์์ฑ๋ ์ด๊ณ ์ JavaScript/TypeScript ๋ฒ๋ค๋ฌ์ด์ ํธ๋์คํ์ผ๋ฌ๋ค. ๊ธฐ์กด JS ๊ธฐ๋ฐ ๋น๋ ๋๊ตฌ ๋๋น 10~100๋ฐฐ ๋น ๋ฅธ ์ฑ๋ฅ์ ์ ๊ณตํ๋ค.
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
- ๊ธฐ์กด ๋น๋ ๋๊ตฌ(webpack, Rollup, Parcel)๋ JavaScript๋ก ์์ฑ๋์ด ์๋์ ํ๊ณ
- ํ๋ก์ ํธ๊ฐ ์ปค์ง์๋ก ๋น๋ ์๊ฐ์ด ๋ถ ๋จ์๋ก ์ฆ๊ฐ โ ๊ฐ๋ฐ ์์ฐ์ฑ ์ ํ
- esbuild๋ ์ด ์ฑ๋ฅ ๋ณ๋ชฉ์ ํด๊ฒฐํ๊ธฐ ์ํด ํ์
AS-IS (JS ๊ธฐ๋ฐ ๋น๋ ๋๊ตฌ)
three.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ 10๊ฐ ๋ณต์ฌ๋ณธ ํ๋ก๋์
๋ฒ๋ค๋ง ๋ฒค์น๋งํฌ:
webpack 5: 41.21์ด
Rollup 4 + Terser: 34.10์ด
Parcel 2: 14.91์ด
โ ์์ญ ์ด ๋๊ธฐ
TO-BE (esbuild)
๊ฐ์ ๋ฒค์น๋งํฌ:
esbuild: 0.39์ด โ 100๋ฐฐ ์ด์ ๋น ๋ฆ
โ 1์ด ์ด๋ด ์๋ฃ
์ ์ด๋ ๊ฒ ๋น ๋ฅธ๊ฐ?
- Go ์ธ์ด: ์ปดํ์ผ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์คํ (V8 JIT ์ค๋ฒํค๋ ์์)
- ๋ณ๋ ฌ ์ฒ๋ฆฌ: Go์ goroutine์ ํ์ฉํ ๋ฉํฐ์ฝ์ด ๋ณ๋ ฌ ํ์ฑ/๋ฒ๋ค๋ง
- ๋ฉ๋ชจ๋ฆฌ ํจ์จ: ์ต์ํ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ผ๋ก GC ๋ถ๋ด ๊ฐ์
- ์ฒ์๋ถํฐ ์๋ ๋ชฉํ ์ค๊ณ: ๊ธฐ์กด ๋๊ตฌ์ ์ํคํ ์ฒ ์ ์ฝ ์์ด ์ฑ๋ฅ ์ต์ ํ
ํต์ฌ ๊ธฐ๋ฅ
- JavaScript, TypeScript, JSX ํธ๋์คํ์ผ๋ง
- CSS ๋ฒ๋ค๋ง (CSS Modules ํฌํจ)
- Tree-shaking ๋ฐ Minification
- Source Map ์์ฑ
- ESM / CommonJS ๋ชจ๋ ์ง์
- Watch ๋ชจ๋ ๋ฐ ๋ก์ปฌ ๊ฐ๋ฐ ์๋ฒ
- ํ๋ฌ๊ทธ์ธ ์์คํ
Vite์์์ ์ญํ
esbuild๋ Vite์์ ๋ ๊ฐ์ง ์ญํ ์ ํ๋ค:
| ์ญํ | ์ค๋ช |
|---|---|
| Dependency Pre-bundling | node_modules์ ์์กด์ฑ์ ESM์ผ๋ก ๋ณํ + ๋จ์ผ ํ์ผ๋ก ํฉ์นจ |
| TypeScript ํธ๋์คํ์ผ๋ง | .ts ํ์ผ์ JS๋ก ๋ณํ (tsc ๋๋น 20~30๋ฐฐ ๋น ๋ฆ, ํ์
์ฒดํฌ๋ ์ ํจ) |
ํ๋ก๋์ ๋น๋์๋ esbuild ๋์ Rollup์ ์ฌ์ฉํ๋ค. ์ด์ : Vite์ ํ๋ฌ๊ทธ์ธ API๊ฐ esbuild์ ํธํ๋์ง ์๊ณ , Rollup์ ์ ์ฐํ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ๊ฐ ๋ ์ฑ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ํฅํ Rolldown(Rollup์ Rust ํฌํ )์ด ์ด ๋์ ํตํฉํ ์ ์๋ค.