์ธ๊ธฐ ์๋ ํ๋ก ํธ์๋ ๋น๋ ์์คํ Webpack, Vite, Rollup์ ์ข ํฉ์ ์ผ๋ก ๋น๊ตํฉ๋๋ค. ๊ฐ์ , ์ฝ์ , ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ณ ํ๋ก์ ํธ์ ์ ํฉํ ๋๊ตฌ๋ฅผ ์ ํํ์ธ์.
ํ๋ก ํธ์๋ ๋น๋ ์์คํ ๋น๊ต: Webpack, Vite, Rollup
๋์์์ด ์งํํ๋ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ค๋ฉด ์ฌ๋ฐ๋ฅธ ๋๊ตฌ๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํ๋ก ํธ์๋ ๋น๋ ์์คํ ์ ๋ชจ๋ ๋ฒ๋ค๋ง, ์ฝ๋ ํธ๋์คํ์ผ๋ง, ์์ฐ ์ต์ ํ ๋ฑ๊ณผ ๊ฐ์ ์์ ์ ์๋ํํ์ฌ ์ด ํ๋ก์ธ์ค์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋๊ตฌ๋ก๋ Webpack, Vite, Rollup์ด ์์ผ๋ฉฐ, ๊ฐ ๋๊ตฌ๋ ๊ณ ์ ํ ๊ฐ์ ๊ณผ ์ฝ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด ์ข ํฉ์ ์ธ ๋น๊ต๋ฅผ ํตํด ์ด๋ฌํ ๋๊ตฌ์ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ดํดํ๊ณ ๋์ฟ์ ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA), ์ํ์ธ๋ฃจ์ ๋ณต์กํ ์ ์ ์๊ฑฐ๋ ํ๋ซํผ ๋๋ ๋ฒ ๋ฅผ๋ฆฐ์ ๋ง์ผํ ์น ์ฌ์ดํธ ๋ฑ ํ๋ก์ ํธ์ ์ ํฉํ ๋๊ตฌ๋ฅผ ์ ํํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
ํ๋ก ํธ์๋ ๋น๋ ์์คํ ์ด๋ ๋ฌด์์ ๋๊น?
ํ๋ก ํธ์๋ ๋น๋ ์์คํ ์ ๋ค์ํ ์์ ์ ์๋ํํ์ฌ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๋ ๋๊ตฌ์ ๋๋ค. ์์ค ์ฝ๋์ ํด๋น ์ข ์์ฑ์ ๊ฐ์ ธ์ ์น ์๋ฒ์ ๋ฐฐํฌํ ์ ์๋ ์ต์ ํ๋ ์์ฐ์ผ๋ก ๋ณํํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- ๋ชจ๋ ๋ฒ๋ค๋ง: ์ฌ๋ฌ JavaScript ๋ชจ๋์ ๋จ์ผ ํ์ผ ๋๋ ์ ์ ์์ ํ์ผ๋ก ๊ฒฐํฉํฉ๋๋ค.
- ํธ๋์คํ์ผ๋ง: ์ต์ JavaScript(ES6+) ๋๋ TypeScript ์ฝ๋๋ฅผ ์ด์ ๋ธ๋ผ์ฐ์ ์์ ์ดํดํ ์ ์๋ ๋ฒ์ ์ผ๋ก ๋ณํํฉ๋๋ค.
- ์ฝ๋ ์ต์ ํ: JavaScript ๋ฐ CSS ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ถ์ํฉ๋๋ค.
- ์์ฐ ์ต์ ํ: ๋ ๋น ๋ฅธ ๋ก๋ฉ ์๊ฐ์ ์ํด ์ด๋ฏธ์ง, ๊ธ๊ผด ๋ฐ ๊ธฐํ ์์ฐ์ ์ต์ ํํฉ๋๋ค.
- ์ฝ๋ ๋ถํ : ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋๋๋๋ค.
- ํซ ๋ชจ๋ ๊ต์ฒด(HMR): ์ ์ฒด ํ์ด์ง ์๋ก ๊ณ ์นจ ์์ด ๋ธ๋ผ์ฐ์ ์์ ๋ผ์ด๋ธ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฑํํฉ๋๋ค.
๋น๋ ์์คํ ์ด ์์ผ๋ฉด ์ข ์์ฑ์ ๊ด๋ฆฌํ๊ณ , ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๋ณด์ฅํ๊ณ , ์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ฒ์ด ํนํ ํฌ๊ณ ๋ณต์กํ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ํจ์ฌ ๋ ์ด๋ ต๊ณ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค. ์ ์ญ ์์ ๋ฏธ๋์ด ํ๋ซํผ์ ์ํด ์๋ฐฑ ๊ฐ์ JavaScript ํ์ผ์ ์๋์ผ๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ ์์ํด ๋ณด์ญ์์ค. ๋น๋ ์์คํ ์ ์ด ์์ ์ ์๋ํํ์ฌ ๊ฐ๋ฐ์์ ์๊ฐ์ ์ ์ฝํ๊ณ ์ค๋ฅ๋ฅผ ์ค์ ๋๋ค.
Webpack: ๋ค์ฌ๋ค๋ฅํ ์ํฌํธ์ค
๊ฐ์
Webpack์ JavaScript ์ํ๊ณ์์ ํ์ ์์๊ฐ ๋ ๊ฐ๋ ฅํ๊ณ ๊ณ ๋๋ก ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. ์ ์ฐ์ฑ๊ณผ ๊ด๋ฒ์ํ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ ๋๋ถ์ ๊ฐ๋จํ ์น ์ฌ์ดํธ๋ถํฐ ๋ณต์กํ ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ๊น์ง ๊ด๋ฒ์ํ ํ๋ก์ ํธ์ ์ ํฉํฉ๋๋ค. ๊ฑฐ์ ๋ชจ๋ ํ๋ก ํธ์๋ ๋น๋ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ง๋ง ๋๋ก๋ ๋ ๋ง์ ๊ตฌ์ฑ์ด ํ์ํ ์ค์์ค ์๋ฏธ ๋์ดํ์ ๊ฐ์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ
- ๊ณ ๋๋ก ๊ตฌ์ฑ ๊ฐ๋ฅ: Webpack์ ๋ค์ํ ๊ตฌ์ฑ ์ต์ ์ ์ ๊ณตํ์ฌ ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ๋ฏธ์ธ ์กฐ์ ํ ์ ์์ต๋๋ค.
- ํ๋ฌ๊ทธ์ธ ์ํ๊ณ: ํ๋ถํ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ๋ ์ฝ๋ ์ถ์, ์ด๋ฏธ์ง ์ต์ ํ ๋ฐ CSS ์ถ์ถ๊ณผ ๊ฐ์ ๋ค์ํ ์์ ์ ๋ํ ์ง์์ ์ ๊ณตํฉ๋๋ค.
- ๋ก๋ ์ง์: ๋ก๋๋ฅผ ์ฌ์ฉํ๋ฉด CSS, ์ด๋ฏธ์ง ๋ฐ ๊ธ๊ผด์ ํฌํจํ ๋ค์ํ ์ ํ์ ํ์ผ์ JavaScript ๋ชจ๋์ธ ๊ฒ์ฒ๋ผ ๊ฐ์ ธ์ค๊ณ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ์ฝ๋ ๋ถํ : Webpack์ ์ฝ๋ ๋ถํ ์ ์ง์ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋๋์ด ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
- ํซ ๋ชจ๋ ๊ต์ฒด(HMR): HMR์ ์ฌ์ฉํ๋ฉด ์ ์ฒด ํ์ด์ง ์๋ก ๊ณ ์นจ ์์ด ๋ธ๋ผ์ฐ์ ์์ ๋ชจ๋์ ์ ๋ฐ์ดํธํ ์ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ ํ๊ฒฝ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
์ฅ์
- ์ ์ฐ์ฑ: Webpack์ ๊ด๋ฒ์ํ ๊ตฌ์ฑ ์ต์ ๊ณผ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ๋ ๋ค์ํ ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
- ๋๊ท๋ชจ ์ปค๋ฎค๋ํฐ ๋ฐ ์ํ๊ณ: ๋๊ท๋ชจ ์ปค๋ฎค๋ํฐ์ ๊ด๋ฒ์ํ ํ๋ฌ๊ทธ์ธ ๋ฐ ๋ก๋ ์ํ๊ณ๋ ๋ค์ํ ๋ฌธ์ ์ ๋ํ ์ถฉ๋ถํ ์ง์๊ณผ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค.
- ์ฑ์ํ๊ณ ์์ ์ : Webpack์ ์ ๊ณ์์ ๋๋ฆฌ ์ฑํ๋ ์ฑ์ํ๊ณ ์์ ์ ์ธ ๋๊ตฌ์ ๋๋ค.
๋จ์
- ๋ณต์ก์ฑ: Webpack์ ๊ตฌ์ฑ์ ํนํ ์ด๋ณด์์๊ฒ ๋ณต์กํ๊ณ ์๋์ ์ผ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ: Webpack์ ์ด๊ธฐ ๋น๋ ์๊ฐ์ ํนํ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๋๋ฆด ์ ์์ต๋๋ค. ์ต์ ํ๊ฐ ์กด์ฌํ์ง๋ง ์ข ์ข ์๋นํ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๋ค.
์์ ๊ตฌ์ฑ(webpack.config.js)
๋ค์์ ๋จ์ํ๋ ์์ด์ง๋ง Webpack ๊ตฌ์ฑ ํ์ผ์ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader'],
},
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource',
},
],
},
devServer: {
static: {
directory: path.join(__dirname, 'dist'),
},
compress: true,
port: 9000,
},
};
Webpack์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ๋๊ท๋ชจ ๋ฐ ๋ณต์กํ ํ๋ก์ ํธ: Webpack์ ์ ์ฐ์ฑ๊ณผ ์ฝ๋ ๋ถํ ๊ธฐ๋ฅ์ ๋๊ท๋ชจ ๋ฐ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
- ํน์ ์๊ตฌ ์ฌํญ์ด ์๋ ํ๋ก์ ํธ: ๋ค๋ฅธ ๋น๋ ์์คํ ์ผ๋ก ์ฝ๊ฒ ์ถฉ์กฑํ ์ ์๋ ํน์ ์๊ตฌ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ Webpack์ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ด ํฐ ์ด์ ์ด ๋ ์ ์์ต๋๋ค.
- ๊ด๋ฒ์ํ ์์ฐ ๊ด๋ฆฌ๊ฐ ํ์ํ ํ๋ก์ ํธ: Webpack์ ๋ก๋ ์ง์์ ํตํด CSS, ์ด๋ฏธ์ง ๋ฐ ๊ธ๊ผด๊ณผ ๊ฐ์ ๋ค์ํ ์ ํ์ ์์ฐ์ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
Vite: ๋ฒ๊ฐ์ฒ๋ผ ๋น ๋ฅธ ๊ฐ๋ฐ ๊ฒฝํ
๊ฐ์
Vite(ํ๋์ค์ด๋ก "๋น ๋ฅธ"์ ์๋ฏธ)๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ์ค์ ์ ๋ ์ต์ ๋น๋ ๋๊ตฌ์ ๋๋ค. ๊ธฐ๋ณธ ES ๋ชจ๋๊ณผ Rollup์ ํ์ฉํ์ฌ ๋ฒ๊ฐ์ฒ๋ผ ๋น ๋ฅธ ์ฝ๋ ์คํํธ ์๊ฐ๊ณผ HMR์ ๋ฌ์ฑํฉ๋๋ค. ํ์ ์ฌ์ฉ ์ฌ๋ก์์ Webpack๋ณด๋ค ์ ์ฌ์ ์ผ๋ก ์ฌ์ฉ์ ์ ์ํ ์ ์์ง๋ง ์๋์ ๋ฏผ์ฒฉ์ฑ์ ์ต์ ํ๋ ์คํฌ์ธ ์นด๋ผ๊ณ ์๊ฐํ์ญ์์ค.์ฃผ์ ๊ธฐ๋ฅ
- ๋ฒ๊ฐ์ฒ๋ผ ๋น ๋ฅธ ์ฝ๋ ์คํํธ: Vite๋ ๊ฐ๋ฐ ์ค์ ๊ธฐ๋ณธ ES ๋ชจ๋์ ํ์ฉํ์ฌ ์ฝ๋๋ฅผ ์ ๊ณตํ๋ฏ๋ก ์ฝ๋ ์คํํธ ์๊ฐ์ด ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
- ์ฆ๊ฐ์ ์ธ ํซ ๋ชจ๋ ๊ต์ฒด(HMR): Vite์ HMR์ Webpack๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๋ฏ๋ก ๋ธ๋ผ์ฐ์ ์์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฑฐ์ ์ฆ์ ํ์ธํ ์ ์์ต๋๋ค.
- Rollup ๊ธฐ๋ฐ ํ๋ก๋์ ๋น๋: Vite๋ ํ๋ก๋์ ๋น๋์ Rollup์ ์ฌ์ฉํ์ฌ ์ต์ ํ๋๊ณ ํจ์จ์ ์ธ ์ถ๋ ฅ์ ๋ณด์ฅํฉ๋๋ค.
- ๊ฐ๋จํ ๊ตฌ์ฑ: Vite๋ Webpack์ ๋นํด ๋ ๊ฐ์ํ๋ ๊ตฌ์ฑ ํ๊ฒฝ์ ์ ๊ณตํ๋ฏ๋ก ์์ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
- ํ๋ฌ๊ทธ์ธ API: Vite๋ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๋ ํ๋ฌ๊ทธ์ธ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฅ์
- ๋งค์ฐ ๋น ๋ฅธ ๊ฐ๋ฐ ์๋: Vite์ ๋ฒ๊ฐ์ฒ๋ผ ๋น ๋ฅธ ์ฝ๋ ์คํํธ ๋ฐ HMR์ ๊ฐ๋ฐ ํ๊ฒฝ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
- ๋ ๊ฐ๋จํ ๊ตฌ์ฑ: Vite์ ๊ตฌ์ฑ์ Webpack๋ณด๋ค ๋ ๊ฐ๋จํ๊ณ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
- ์ต์ ์ ๊ทผ ๋ฐฉ์: Vite๋ ๊ธฐ๋ณธ ES ๋ชจ๋๊ณผ ๊ฐ์ ์ต์ ์น ํ์ค์ ํ์ฉํ์ฌ ๋ ํจ์จ์ ์ด๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ญ๋๋ค.
๋จ์
- ๋ ์์ ์ํ๊ณ: Vite์ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ๋ Webpack๋ณด๋ค ์์ง๋ง ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๊ณ ์์ต๋๋ค.
- ๋ ์ ์ฐํจ: Vite๋ Webpack๋ณด๋ค ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ ํน์ ์๊ตฌ ์ฌํญ์ด ์๋ ํ๋ก์ ํธ์๋ ์ ํ์ด ๋ ์ ์์ต๋๋ค.
์์ ๊ตฌ์ฑ(vite.config.js)
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
react()
],
server: {
port: 3000,
}
})
Vite๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ์ ํ๋ก์ ํธ: Vite๋ ํนํ React, Vue ๋๋ Svelte์ ๊ฐ์ ์ต์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ก์ ํธ์ ํ์ํ ์ ํ์ ๋๋ค.
- ๊ฐ๋ฐ ์๋๋ฅผ ์ฐ์ ์ํ๋ ํ๋ก์ ํธ: ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ํ๋ ๊ฒฝ์ฐ Vite๊ฐ ์ข์ ์ ํ์ ๋๋ค.
- ํ์ค ๋น๋ ์๊ตฌ ์ฌํญ์ด ์๋ ํ๋ก์ ํธ: ํ์ค ๋น๋ ์๊ตฌ ์ฌํญ์ด ์๋ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ Vite์ ๋ ๊ฐ๋จํ ๊ตฌ์ฑ์ ํตํด ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ์ ์ฝํ ์ ์์ต๋๋ค.
Rollup: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์์ ์ ํ
๊ฐ์
Rollup์ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ณ ๋๋ก ์ต์ ํ๋ ๋ฒ๋ค์ ๋ง๋๋ ๋ฐ ์ค์ ์ ๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. ๋ฒ๋ค์์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ํ๋ก์ธ์ค์ธ ํธ๋ฆฌ ์์ดํน์ ๋ฅ์ํ์ฌ ํ์ผ ํฌ๊ธฐ๊ฐ ๋ ์์์ง๋๋ค. ๋ณธ๊ฒฉ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ ํจ์จ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ ์ ์์ ์ํด ํน๋ณํ ์ค๊ณ๋ ์ ๋ฐ ๊ธฐ๊ธฐ๋ผ๊ณ ์๊ฐํ์ญ์์ค.์ฃผ์ ๊ธฐ๋ฅ
- ํธ๋ฆฌ ์์ดํน: Rollup์ ํธ๋ฆฌ ์์ดํน ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์ด๋ฏ๋ก ๋ฒ๋ค์ด ๋ ์์์ง๋๋ค.
- ES ๋ชจ๋ ์ถ๋ ฅ: Rollup์ ์ต์ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ค ํ์์ธ ES ๋ชจ๋ ์ถ๋ ฅ์ ์์ฑํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ํ๋ฌ๊ทธ์ธ ์์คํ : Rollup์ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๋ ํ๋ฌ๊ทธ์ธ ์์คํ ์ ์ ๊ณตํฉ๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค์ : Rollup์ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋๋ก ํน๋ณํ ์ค๊ณ๋์ด ์ด ๋ชฉ์ ์ ์ ํฉํฉ๋๋ค.
์ฅ์
- ์์ ๋ฒ๋ค ํฌ๊ธฐ: Rollup์ ํธ๋ฆฌ ์์ดํน ๊ธฐ๋ฅ์ ๋ค๋ฅธ ๋น๋ ์์คํ ์ ๋นํด ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ํจ์ฌ ๋ ์๊ฒ ๋ง๋ญ๋๋ค.
- ES ๋ชจ๋ ์ถ๋ ฅ: Rollup์ ES ๋ชจ๋ ์ถ๋ ฅ์ ์ต์ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด์์ ์ ๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์ ์ค์ : Rollup์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋๋ก ํน๋ณํ ์ค๊ณ๋์ด ๊ฐ์ํ๋๊ณ ํจ์จ์ ์ธ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
๋จ์
- ๋ ๋ค์ฌ๋ค๋ฅํจ: Rollup์ Webpack ๋ฐ Vite๋ณด๋ค ๋ค์ฌ๋ค๋ฅํ์ง ์์ผ๋ฉฐ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
- ๋ ์์ ์ํ๊ณ: Rollup์ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ๋ Webpack๋ณด๋ค ์์ต๋๋ค.
- ๊ตฌ์ฑ์ด ๋ณต์กํ ์ ์์: ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋น๋์ ๊ฒฝ์ฐ Webpack๋ณด๋ค ๊ฐ๋จํ์ง๋ง ์ฝ๋ ๋ถํ ๋๋ ๊ณ ๊ธ ๋ณํ๊ณผ ๊ด๋ จ๋ ๋ณต์กํ ๊ตฌ์ฑ์ ๋ณต์กํด์ง ์ ์์ต๋๋ค.
์์ ๊ตฌ์ฑ(rollup.config.js)
import { terser } from 'rollup-plugin-terser';
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'esm',
sourcemap: true,
},
plugins: [
terser(), // Minify the bundle
],
};
Rollup์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ: Rollup์ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์ด์์ ์ธ ์ ํ์ ๋๋ค.
- ์์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ฐ์ ์ํ๋ ํ๋ก์ ํธ: ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ต์ํํด์ผ ํ๋ ๊ฒฝ์ฐ Rollup์ ํธ๋ฆฌ ์์ดํน ๊ธฐ๋ฅ์ด ํฐ ์ด์ ์ ๋๋ค.
- ์ต์ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋์์ผ๋ก ํ๋ ํ๋ก์ ํธ: Rollup์ ES ๋ชจ๋ ์ถ๋ ฅ์ ์ต์ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋์์ผ๋ก ํ๋ ํ๋ก์ ํธ์ ์ ํฉํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ ๋น๋ ์์คํ ์ ํ: ์์ฝ
๋ค์์ Webpack, Vite ๋ฐ Rollup ๊ฐ์ ์ฃผ์ ์ฐจ์ด์ ์ ์์ฝํ ํ์ ๋๋ค.
| ๊ธฐ๋ฅ | Webpack | Vite | Rollup |
|---|---|---|---|
| ์ฌ์ฉ ์ฌ๋ก | ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ , ๊ณ ๋๋ก ๊ตฌ์ฑ ๊ฐ๋ฅํ ํ๋ก์ ํธ | ์ ํ๋ก์ ํธ, ๋น ๋ฅธ ๊ฐ๋ฐ ์๋ | JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์์ ๋ฒ๋ค ํฌ๊ธฐ |
| ๊ตฌ์ฑ | ๋ณต์กํจ | ๊ฐ๋จํจ | ๋ณดํต |
| ์ฑ๋ฅ | ์ต์ ํ ์์ด๋ ๋๋ฆด ์ ์์ | ๋งค์ฐ ๋น ๋ฆ | ๋น ๋ฆ |
| ํธ๋ฆฌ ์์ดํน | ์ง์๋จ(๊ตฌ์ฑ ํ์) | ์ง์๋จ | ํ์ํจ |
| ์ํ๊ณ | ํผ | ์ฑ์ฅ ์ค | ๋ณดํต |
| HMR | ์ง์๋จ | ์ฆ์ | HMR์ ์ ํฉํ์ง ์์ |
๊ถ๊ทน์ ์ผ๋ก ํ๋ก์ ํธ์ ๊ฐ์ฅ ์ ํฉํ ๋น๋ ์์คํ ์ ํน์ ์๊ตฌ ์ฌํญ๊ณผ ์ฐ์ ์์์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ํ๋ก์ ํธ์ ํฌ๊ธฐ์ ๋ณต์ก์ฑ, ๊ฐ๋ฐ ์๋์ ์ค์์ฑ, ์์ฌ ๊ฒฐ์ ์ ๋ด๋ฆด ๋ ์ํ๋ ์ถ๋ ฅ ํ์์ ๊ณ ๋ คํ์ญ์์ค. ์๋ฅผ ๋ค์ด ์์ฒ ๊ฐ์ ์ ํ๊ณผ ๋ณต์กํ ์ํธ ์์ฉ์ด ์๋ ๋๊ท๋ชจ ์ ์ ์๊ฑฐ๋ ์ฌ์ดํธ๋ Webpack์ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ ํตํด ์ด์ ์ ์ป์ ์ ์๋ ๋ฐ๋ฉด, ์์ ๋ง์ผํ ์น ์ฌ์ดํธ๋ Vite๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ๊ณ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ํ๋ซํผ์์ ์ฌ์ฉํ๋๋ก ์ค๊ณ๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Rollup์ ์๋ฒฝํ ํ๋ณด๊ฐ ๋ ๊ฒ์ ๋๋ค. ๋ฌด์์ ์ ํํ๋ ํ๋ก ํธ์๋ ๋น๋ ์์คํ ์ ๊ธฐ๋ณธ ์ฌํญ์ ๋ฐฐ์ฐ๋ฉด ์น ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๊ฐ ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
๊ธฐ๋ณธ ์ฌํญ ์ด์: ๊ณ ๊ธ ๊ณ ๋ ค ์ฌํญ
์์ ๋น๊ต์์๋ ํต์ฌ ์ธก๋ฉด์ ๋ค๋ฃจ์ง๋ง ์ฌ๋ฌ ๊ณ ๊ธ ๊ณ ๋ ค ์ฌํญ์ด ์ ํ์ ๋ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- TypeScript ์ง์: ์ธ ๊ฐ์ง ๋๊ตฌ ๋ชจ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ ํ๋ฌ๊ทธ์ธ์ ํตํด ํ์ํ TypeScript ์ง์์ ์ ๊ณตํฉ๋๋ค. ํน์ ๊ตฌ์ฑ์ ์ฝ๊ฐ ๋ค๋ฅผ ์ ์์ง๋ง ์ ์ฒด์ ์ธ ๊ฒฝํ์ ์ผ๋ฐ์ ์ผ๋ก ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด Vite์ ํจ๊ป TypeScript๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ์๊ฐ์ ๋จ์ถํ๊ธฐ ์ํด ์ข ์์ฑ์ ๋ฏธ๋ฆฌ ๋ฒ๋ค๋งํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ์ฝ๋ ๋ถํ ์ ๋ต: ๋ชจ๋ ์ฝ๋ ๋ถํ ์ ์ง์ํ์ง๋ง ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๋ค๋ฆ ๋๋ค. Webpack์ ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ธ ๋ฐ๋ฉด Vite ๋ฐ Rollup์ ๋ด๋ถ ์ฒญํฌ ์๊ณ ๋ฆฌ์ฆ์ ์์กดํฉ๋๋ค. ์ด๋ฌํ ์ฐจ์ด์ ์ ์ดํดํ๋ ๊ฒ์ ํนํ ๋คํธ์ํฌ ๋๊ธฐ ์๊ฐ์ด ์ค์ํ ์์์ธ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ์ฉ์ ์์น์ ๋ฐ๋ผ ๋ค๋ฅธ ์ฝ๋ ๋ฒ๋ค(์: ์์์ ์ธํฐ๋ท ์๋์ ์ต์ ํ๋ ์ด๋ฏธ์ง ์์ฐ)์ ์ ๊ณตํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ธฐ์ ์ ๋๋ค.
- ์์ฐ ๊ด๋ฆฌ(์ด๋ฏธ์ง, ๊ธ๊ผด ๋ฑ): ๊ฐ ๋๊ตฌ๋ ์์ฐ ๊ด๋ฆฌ๋ฅผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํฉ๋๋ค. Webpack์ ๋ก๋๋ฅผ ์ฌ์ฉํ๊ณ Vite๋ ๋ด์ฅ๋ ์์ฐ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ Rollup์ ํ๋ฌ๊ทธ์ธ์ ์์กดํฉ๋๋ค. ๊ฐ ์ํ๊ณ ๋ด์์ ์์ฐ(์: ์ด๋ฏธ์ง๋ฅผ WebP ํ์์ผ๋ก ๋ณํ)์ ์ผ๋ง๋ ์ฝ๊ฒ ์ต์ ํํ๊ณ ๋ณํํ ์ ์๋์ง ๊ณ ๋ คํ์ญ์์ค. ๊ธ๋ก๋ฒ ๋ธ๋๋๋ ์ฌ์ฉ์์ ์ฅ์น ๋ฐ ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ด๋ฏธ์ง ํด์๋๋ฅผ ์ ๊ณตํด์ผ ํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ ๊ตํ ์์ฐ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค.
- ๋ฐฑ์๋ ํ๋ ์์ํฌ์์ ํตํฉ: Django(Python), Ruby on Rails ๋๋ Laravel(PHP)๊ณผ ๊ฐ์ ๋ฐฑ์๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ฐ ๋น๋ ์์คํ ์ด ์ ํํ ํ๋ ์์ํฌ์ ์์ฐ ํ์ดํ๋ผ์ธ๊ณผ ์ผ๋ง๋ ์ ํตํฉ๋๋์ง ๊ณ ๋ คํ์ญ์์ค. ์ผ๋ถ ํ๋ ์์ํฌ์๋ ํน์ ํตํฉ ๋๋ ๊ท์น์ด ์์ด ํ๋์ ๋น๋ ์์คํ ์ด ๋ ์์ฐ์ค๋ฝ๊ฒ ์ ํฉํ ์ ์์ต๋๋ค.
- CI/CD(์ง์์ ํตํฉ ๋ฐ ๋ฐฐํฌ): ๊ฐ ๋น๋ ์์คํ ์ด CI/CD ํ์ดํ๋ผ์ธ๊ณผ ์ผ๋ง๋ ์ฝ๊ฒ ํตํฉ๋๋์ง ํ๊ฐํฉ๋๋ค. ๋น๋ ํ๋ก์ธ์ค๋ ํ๊ฒฝ(๊ฐ๋ฐ, ์คํ ์ด์ง, ํ๋ก๋์ )์ ๊ด๊ณ์์ด ์๋ํ๋๊ณ ์์ ์ ์ด์ด์ผ ํฉ๋๋ค. ๋น ๋ฅธ ํผ๋๋ฐฑ ๋ฃจํ๋ฅผ ๋ณด์ฅํ๋ ค๋ฉด CI/CD์์ ๋น ๋ฅธ ๋น๋ ์๊ฐ์ด ํนํ ์ค์ํฉ๋๋ค.
๊ฒฐ๋ก
Webpack, Vite ๋ฐ Rollup์ ๋ชจ๋ ํ๋ฅญํ ํ๋ก ํธ์๋ ๋น๋ ์์คํ ์ด๋ฉฐ ๊ฐ์ ๊ณ ์ ํ ๊ฐ์ ๊ณผ ์ฝ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ดํดํ๋ฉด ํ๋ก์ ํธ์ ์ ํฉํ ๋๊ตฌ๋ฅผ ์ ํํ๊ณ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค. ๊ฒฐ์ ์ ๋ด๋ฆด ๋ ํ๋ก์ ํธ์ ํฌ๊ธฐ์ ๋ณต์ก์ฑ, ํ์ ๊ฒฝํ ๋ฐ ํน์ ์๊ตฌ ์ฌํญ์ ๊ณ ๋ คํ์ญ์์ค. ํ๋ก ํธ์๋ ํ๊ฒฝ์ ๋์์์ด ์งํํ๊ณ ์์ผ๋ฏ๋ก ์ต์ ํธ๋ ๋์ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์ ๋ณด๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ ์ธ๊ณ ์์ฒญ์์๊ฒ ๋๋ฌํ ์ ์๋ ์ต์ ์ ํจ์จ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.