Alert
์ด ๊ธ์ Claude Code์ ๋์์ ๋ฐ์ ์์ฑ๋์์ต๋๋ค
TL;DR
- Vite๋ ES Modules ๊ธฐ๋ฐ์ ํ๋ก ํธ์๋ ๋น๋ ๋๊ตฌ
- ๊ฐ๋ฐ ์๋ฒ๋ ๋ฒ๋ค๋ง ์์ด ์ฆ์ ์์, ํ๋ก๋์ ๋น๋๋ Rollup ์ฌ์ฉ
- esbuild๋ก ์์กด์ฑ ์ฌ์ ๋ฒ๋ค๋งํ์ฌ ์๋ ํ๋ณด
- React, Vue, Svelte ๋ฑ ์ฃผ์ ํ๋ ์์ํฌ ์ง์
Vite?
- ํ๋์ค์ด๋ก โ๋น ๋ฅด๋คโ๋ ๋ป์ ํ๋ก ํธ์๋ ๋น๋ ๋๊ตฌ
- Evan You(Vue.js ์ฐฝ์์)๊ฐ ๊ฐ๋ฐ
- CRA(Create React App)์ ์ฌ์ค์ ํ์ ๋์
- https://vite.dev/
1. ๋น๋ ๋๊ตฌ๋
์์ฑํ ์์ค ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์คํํ ์ ์๋ ํํ๋ก ๋ณํํ๋ ๋๊ตฌ๋ค.
๋ธ๋ผ์ฐ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก HTML, CSS, ์์ JavaScript๋ง ์ดํดํ๋ค. JSX, TypeScript, CSS Modules ๊ฐ์ ๊ฒ๋ค์ ๊ทธ๋๋ก ์คํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณํ ๊ณผ์ ์ด ํ์ํ๋ค.
| ์์ | ์ค๋ช |
|---|---|
| ๋ณํ(Transform) | JSX โ JS, TypeScript โ JS ๋ฑ ๋ธ๋ผ์ฐ์ ํธํ ์ฝ๋๋ก ๋ณํ |
| ๋ฒ๋ค๋ง(Bundle) | ์๋ฐฑ ๊ฐ ํ์ผ์ ์์์ ํ์ผ๋ก ํฉ์นจ |
| ์ต์ ํ(Optimize) | ๋ฏธ์ฌ์ฉ ์ฝ๋ ์ ๊ฑฐ, ์์ถ(minify), ์ฝ๋ ์คํ๋ฆฌํ |
| ๊ฐ๋ฐ ์๋ฒ | ๋ก์ปฌ์์ ์ค์๊ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ ๊ณต |
2. ๊ธฐ์กด ๋น๋ ๋๊ตฌ์ ๋ฌธ์
Webpack ๊ฐ์ ๊ธฐ์กด ๋ฒ๋ค๋ฌ๋ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์์ํ ๋ ๋ชจ๋ ๋ชจ๋์ ๋ฏธ๋ฆฌ ๋ฒ๋ค๋งํ๋ค.
[Webpack ๋ฐฉ์]
๋ชจ๋ ๋ชจ๋ ๋ถ์ โ ์์กด์ฑ ๊ทธ๋ํ ์์ฑ โ ๋ฒ๋ค ์์ฑ โ ์๋ฒ ์์
ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์๋ฒ ์์ ์๊ฐ์ด ๊ธธ์ด์ง๊ณ , ์ฝ๋๋ฅผ ์์ ํด๋ ๋ฐ์(HMR, Hot Module Replacement)์ด ๋๋ ค์ง๋ ๋ฌธ์ ๊ฐ ์์๋ค.
3. Vite์ ์ ๊ทผ ๋ฐฉ์
Vite๋ ๊ฐ๋ฐ๊ณผ ํ๋ก๋์ ๋น๋๋ฅผ ๋ค๋ฅธ ์ ๋ต์ผ๋ก ์ฒ๋ฆฌํ๋ค.
๊ฐ๋ฐ ๋ชจ๋
๋ธ๋ผ์ฐ์ ์ ๋ค์ดํฐ๋ธ ES Modules(ESM)์ ๊ทธ๋๋ก ํ์ฉํ๋ค. ํ์ผ์ ๋ฏธ๋ฆฌ ๋ฌถ์ง ์๊ณ , ๋ธ๋ผ์ฐ์ ๊ฐ ๋ชจ๋์ ์์ฒญํ๋ฉด ๊ทธ๋ ๋ณํํด์ ๋ด๋ ค์ค๋ค.
[Vite ๋ฐฉ์]
์๋ฒ ์ฆ์ ์์ โ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ชจ๋ ์์ฒญ โ ํด๋น ๋ชจ๋๋ง ๋ณํํ์ฌ ์๋ต
ESM์ด๋
import/export๊ตฌ๋ฌธ์ผ๋ก ๋ชจ๋์ ๋ถ๋ฌ์ค๋ ๋ธ๋ผ์ฐ์ ํ์ค ๋ฐฉ์์ด๋ค. ๋ณ๋ ๋ฒ๋ค๋ฌ ์์ด ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ๋ชจ๋ ์์กด์ฑ์ ํด์ํ๋ค.
ํ๋ก๋์ ๋น๋
ํ๋ก๋์ ์์๋ Rollup์ ์ฌ์ฉํด์ ๋ฒ๋ค๋งํ๋ค. ํธ๋ฆฌ์ ฐ์ดํน, ์ฝ๋ ์คํ๋ฆฌํ , ์์ถ ๋ฑ ์ต์ ํ๋ฅผ ์ํํ๋ค.
npx vite build # dist/ ํด๋์ ์ต์ ํ๋ ๊ฒฐ๊ณผ๋ฌผ ์์ฑ์์กด์ฑ ์ฌ์ ๋ฒ๋ค๋ง
node_modules์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ESM์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. Vite๋ esbuild(Go ๊ธฐ๋ฐ)๋ก ์ด๋ฅผ ์ฌ์ ๋ณํํด๋๋ค. ์ด ๊ณผ์ ์ ์ต์ด ํ ๋ฒ๋ง ์คํ๋๊ณ ์บ์๋๋ค.
4. Webpack๊ณผ ๋น๊ต
| Webpack | Vite | |
|---|---|---|
| ๊ฐ๋ฐ ์๋ฒ ์์ | ์ ์ฒด ๋ฒ๋ค๋ง ํ ์์ (๋๋ฆผ) | ์ฆ์ ์์ |
| HMR ์๋ | ํ๋ก์ ํธ ์ปค์ง์๋ก ๋๋ ค์ง | ๋ชจ๋ ๋จ์๋ก ๊ต์ฒดํ์ฌ ์ผ์ |
| ํ๋ก๋์ ๋น๋ | Webpack ์์ฒด ๋ฒ๋ค๋ง | Rollup ๊ธฐ๋ฐ ๋ฒ๋ค๋ง |
| ์ค์ ๋ณต์ก๋ | ๋์ (loader, plugin ์ค์ ) | ๋ฎ์ (ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ) |
| ์ํ๊ณ | ์ฑ์ํ๊ณ ๋ฐฉ๋ํจ | ๋น ๋ฅด๊ฒ ์ฑ์ฅ ์ค |
5. ๋น ๋ฅธ ์์
ํ๋ก์ ํธ ์์ฑ
# React + TypeScript ํ๋ก์ ํธ ์์ฑ
npm create vite@latest my-app -- --template react-ts
cd my-app
npm install๊ฐ๋ฐ ์๋ฒ ์คํ
npm run dev # ๊ธฐ๋ณธ ํฌํธ: http://localhost:5173ํ๋ก๋์ ๋น๋
npm run build # dist/ ํด๋์ ๋น๋ ๊ฒฐ๊ณผ ์์ฑ
npm run preview # ๋น๋ ๊ฒฐ๊ณผ๋ฌผ ๋ก์ปฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ฃผ์ ํ ํ๋ฆฟ
| ํ ํ๋ฆฟ | ๋ช ๋ น์ด |
|---|---|
| React + TS | --template react-ts |
| Vue + TS | --template vue-ts |
| Svelte + TS | --template svelte-ts |
| Vanilla | --template vanilla |
6. ์ค์
ํ๋ก์ ํธ ๋ฃจํธ์ vite.config.ts์์ ์ค์ ํ๋ค. ๋๋ถ๋ถ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ถฉ๋ถํ์ง๋ง, ํ์ํ๋ฉด ํ๋ฌ๊ทธ์ธ์ด๋ ๊ฒฝ๋ก ๋ฑ์ ์กฐ์ ํ ์ ์๋ค.
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
server: {
port: 3000, // ๊ฐ๋ฐ ์๋ฒ ํฌํธ ๋ณ๊ฒฝ
},
build: {
outDir: 'dist', // ๋น๋ ์ถ๋ ฅ ๊ฒฝ๋ก
},
})