์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฒ๋ค๋ง์ด ์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋ ๊ตฌ์ฑ, ์ ์ง๋ณด์์ฑ, ์ฑ๋ฅ์ ์ด๋ป๊ฒ ํฅ์์ํค๋์ง ์์๋ณด์ธ์. Webpack, Parcel, Rollup, esbuild๋ฅผ ์ดํด๋ด ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฒ๋ค๋ง: ์ฝ๋ ๊ตฌ์ฑ์ ์ํ ์ข ํฉ ๊ฐ์ด๋
๋์์์ด ๋ฐ์ ํ๋ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ํจ์จ์ ์ธ ์ฝ๋ ๊ตฌ์ฑ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์์กด์ฑ ๊ด๋ฆฌ์ ์ต์ ์ ์ฑ๋ฅ ํ๋ณด๋ ์ ์ ๋ ์ด๋ ค์์ง๊ณ ์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฒ๋ค๋ง์ด ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฒ๋ค๋ง๊ณผ ๊ด๋ จ๋ ๊ฐ๋ , ์ด์ , ๊ทธ๋ฆฌ๊ณ ์ธ๊ธฐ ์๋ ๋๊ตฌ๋ค์ ํ์ํ์ฌ ์ฌ๋ฌ๋ถ์ด ๋ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ๋์์ค ๊ฒ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฒ๋ค๋ง์ด๋ ๋ฌด์์ธ๊ฐ?
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฒ๋ค๋ง์ ์ฌ๋ฌ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ(๋ชจ๋)๊ณผ ๊ทธ ์์กด์ฑ๋ค์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ํจ์จ์ ์ผ๋ก ๋ก๋ํ๊ณ ์คํํ ์ ์๋ ๋จ์ผ ํ์ผ, ๋๋ ์์์ ํ์ผ๋ก ๊ฒฐํฉํ๋ ๊ณผ์ ์ ๋๋ค. ์ด ๊ณผ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ๋ฐฐํฌ์ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ , HTTP ์์ฒญ ์๋ฅผ ์ค์ฌ ์ ์ฒด์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ๋๋๋ ๋ชจ๋์ฑ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋๋ค์ ์ข ์ข ์๋ก์๊ฒ ์์กดํ์ฌ ๋ณต์กํ ์์กด์ฑ ๊ทธ๋ํ๋ฅผ ์์ฑํฉ๋๋ค. ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์ด๋ฌํ ์์กด์ฑ์ ๋ถ์ํ๊ณ ์ต์ ์ ๋ฐฉ์์ผ๋ก ํจ๊ป ํจํค์งํฉ๋๋ค.
์ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
๋ชจ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ค์ํ ์ด์ ์ด ์์ต๋๋ค:
์ฑ๋ฅ ํฅ์
HTTP ์์ฒญ ์๋ฅผ ์ค์ด๋ ๊ฒ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ํฅ์์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๊ฐ ์์ฒญ์ ํนํ ์ง์ฐ ์๊ฐ์ด ๊ธธ๊ฑฐ๋ ๋์ญํญ์ด ์ ํ๋ ๋คํธ์ํฌ์์ ์ง์ฐ์ ์ถ๊ฐํฉ๋๋ค. ์ฌ๋ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋จ์ผ ํ์ผ๋ก ๋ฌถ์์ผ๋ก์จ ๋ธ๋ผ์ฐ์ ๋ ๋จ ํ ๋ฒ์ ์์ฒญ๋ง ํ๋ฉด ๋๋ฏ๋ก ๋ก๋ ์๊ฐ์ด ๋นจ๋ผ์ง๋๋ค.
์์กด์ฑ ๊ด๋ฆฌ
๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ๋ชจ๋ ๊ฐ์ ์์กด์ฑ์ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. import ๋ฐ export ๊ตฌ๋ฌธ์ ํด๊ฒฐํ์ฌ ํ์ํ ๋ชจ๋ ์ฝ๋๊ฐ ์ต์ข ๋ฒ๋ค์ ํฌํจ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ก ์ธํด ์ฌ๋ฐ๋ฅธ ์์๋ก ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ์๋์ผ๋ก ํฌํจํ ํ์๊ฐ ์์ด์ง๋ฏ๋ก ์ค๋ฅ ์ํ์ด ์ค์ด๋ญ๋๋ค.
์ฝ๋ ๋ณํ
๋ง์ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ๋ก๋์ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ฝ๋ ๋ณํ์ ์ง์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ(์: ES6, ES7) ๋ฐ TypeScript๋ CoffeeScript์ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ณ , ์ด๋ฅผ ๋ธ๋ผ์ฐ์ ์ ํธํ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์๋ ๋ณํ(transpile)ํ ์ ์์ต๋๋ค. ์ด๋ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ๋ํ ์ง์ ์์ค์ ๊ด๊ณ์์ด ๋ค์ํ ๋ธ๋ผ์ฐ์ ์์ ์ฝ๋๊ฐ ์๋ํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ธ๊ณ ์ผ๋ถ ์ง์ญ์์ ์ฌ์ฉ๋๋ ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ณด๋ค ๋ ์์ฃผ ํธ๋์คํ์ผ๋ ์ด์ ์ด ํ์ํ ์ ์๋ค๋ ์ ์ ๊ณ ๋ คํ์ญ์์ค. ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ตฌ์ฑ์ ํตํด ํน์ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋์์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค.
์ฝ๋ ์ถ์ ๋ฐ ์ต์ ํ
๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ถ์(minify)ํ๊ณ ์ต์ ํํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ถ์๋ ์ฝ๋์์ ๋ถํ์ํ ๋ฌธ์(์: ๊ณต๋ฐฑ, ์ฃผ์)๋ฅผ ์ ๊ฑฐํ๋ ๋ฐ๋ฉด, ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ(ํธ๋ฆฌ ์์ดํน)์ ๊ฐ์ ์ต์ ํ ๊ธฐ์ ์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋์ฑ ์ค์ ๋๋ค.
์ฝ๋ ๋ถํ
์ฝ๋ ๋ถํ ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋๋ ์ ์์ต๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๊ธฐ ๋ทฐ์ ํ์ํ ์ฝ๋๋ง ๋ค์ด๋ก๋ํ๋ฉด ๋๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ ์ ํ ํ์ด์ง๊ฐ ์๋ ๋๊ท๋ชจ ์ ์ ์๊ฑฐ๋ ์ฌ์ดํธ๋ ์ด๊ธฐ์ ํํ์ด์ง์ ํ์ํ ์๋ฐ์คํฌ๋ฆฝํธ๋ง ๋ก๋ํ ๋ค์, ์ฌ์ฉ์๊ฐ ์ ํ ์์ธ ํ์ด์ง๋ก ์ด๋ํ ๋ ํด๋น ํ์ด์ง์ ํ์ํ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ฐ ๋ก๋ฉ(lazily load)ํ ์ ์์ต๋๋ค. ์ด ๊ธฐ์ ์ ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA) ๋ฐ ๋๊ท๋ชจ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ธ๊ธฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฒ๋ค๋ฌ
๋ช ๊ฐ์ง ํ๋ฅญํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฒ๋ค๋ฌ๊ฐ ์์ผ๋ฉฐ, ๊ฐ๊ฐ ๊ณ ์ ํ ์ฅ๋จ์ ์ด ์์ต๋๋ค. ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ช ๊ฐ์ง ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
Webpack
Webpack์ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ด ๋๊ณ ๋ค์ฌ๋ค๋ฅํ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. ๋ค์ํ ๋ก๋์ ํ๋ฌ๊ทธ์ธ์ ์ง์ํ์ฌ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ฝ๋๋ฅผ ๋ณํํ๊ณ ์ต์ ํํ ์ ์์ต๋๋ค. Webpack์ ํนํ ์ ๊ตํ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ง ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
Webpack์ ์ฃผ์ ํน์ง:
- ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์
- ์ฝ๋ ๋ณํ ๋ฐ ์ต์ ํ๋ฅผ ์ํ ๋ก๋ ๋ฐ ํ๋ฌ๊ทธ์ธ ์ง์
- ์ฝ๋ ๋ถํ ๊ธฐ๋ฅ
- ๋ ๋น ๋ฅธ ๊ฐ๋ฐ์ ์ํ ํซ ๋ชจ๋ ๊ต์ฒด(HMR)
- ํฌ๊ณ ํ๋ฐํ ์ปค๋ฎค๋ํฐ
Webpack ์ค์ ์์ (webpack.config.js):
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
},
},
],
},
};
์ด ์ค์ ์ Webpack์๊ฒ `./src/index.js`์์ ๋ฒ๋ค๋ง์ ์์ํ๊ณ , ๋ฒ๋ค๋ ํ์ผ์ `dist` ๋๋ ํฐ๋ฆฌ์ `bundle.js`๋ก ์ถ๋ ฅํ๋ฉฐ, Babel์ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ณํํ๋๋ก ์ง์ํฉ๋๋ค.
Parcel
Parcel์ ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ์์ํ๊ธฐ ์ฌ์ด ๊ฒ์ ๋ชฉํ๋ก ํ๋ ์ ๋ก ์ค์ (zero-configuration) ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. ํ๋ก์ ํธ์ ์์กด์ฑ์ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ์๋ ์ค์ ์์ด ๋ฒ๋ค๋งํฉ๋๋ค. Parcel์ ์๊ท๋ชจ ํ๋ก์ ํธ๋ ๋น ๋ฅด๊ณ ์ฌ์ด ์ค์ ์ ์ํ ๋ ํ๋ฅญํ ์ ํ์ ๋๋ค.
Parcel์ ์ฃผ์ ํน์ง:
- ์ ๋ก ์ค์
- ๋น ๋ฅธ ๋น๋ ์๊ฐ
- ์๋ ์ฝ๋ ๋ถํ
- ๋ค์ํ ํ์ผ ์ ํ(์: HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ)์ ๋ํ ๋ด์ฅ ์ง์
Parcel๋ก ํ๋ก์ ํธ๋ฅผ ๋ฒ๋ค๋งํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค:
parcel index.html
์ด๋ ๊ฒ ํ๋ฉด ํ๋ก์ ํธ๊ฐ ์๋์ผ๋ก ๋ฒ๋ค๋ง๋๊ณ ๊ฐ๋ฐ ์๋ฒ์์ ์ ๊ณต๋ฉ๋๋ค.
Rollup
Rollup์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ํ ๊ณ ๋๋ก ์ต์ ํ๋ ๋ฒ๋ค์ ๋ง๋๋ ๋ฐ ์ค์ ์ ๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. ํธ๋ฆฌ ์์ดํน์ ์ฌ์ฉํ์ฌ ๋ฐ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ฏ๋ก ๋ ์๊ณ ํจ์จ์ ์ธ ๋ฒ๋ค์ ๋ง๋ญ๋๋ค. Rollup์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ํ๋ฅญํ ์ ํ์ ๋๋ค.
Rollup์ ์ฃผ์ ํน์ง:
- ๋ฐ์ด๋ ํธ๋ฆฌ ์์ดํน ๊ธฐ๋ฅ
- ๋ค์ํ ์ถ๋ ฅ ํ์ ์ง์(์: ES ๋ชจ๋, CommonJS, UMD)
- ์ฌ์ฉ์ ์ ์๋ฅผ ์ํ ํ๋ฌ๊ทธ์ธ ๊ธฐ๋ฐ ์ํคํ ์ฒ
Rollup ์ค์ ์์ (rollup.config.js):
import babel from '@rollup/plugin-babel';
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'es',
},
plugins: [
babel({
exclude: 'node_modules/**',
}),
],
};
์ด ์ค์ ์ Rollup์๊ฒ `src/index.js`์์ ๋ฒ๋ค๋ง์ ์์ํ๊ณ , ๋ฒ๋ค๋ ํ์ผ์ `dist` ๋๋ ํฐ๋ฆฌ์ ES ๋ชจ๋ ํ์์ `bundle.js`๋ก ์ถ๋ ฅํ๋ฉฐ, Babel์ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ณํํ๋๋ก ์ง์ํฉ๋๋ค.
esbuild
esbuild๋ ๊ทน๋์ ์๋์ ์ค์ ์ ๋ ๋น๊ต์ ์๋ก์ด ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. Go๋ก ์์ฑ๋์์ผ๋ฉฐ ๋ค๋ฅธ ๋ฒ๋ค๋ฌ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ฒ๋ค๋งํ ์ ์์ต๋๋ค. esbuild๋ ๋น๋ ์๊ฐ์ด ์ค์ํ ์์์ธ ํ๋ก์ ํธ์ ํ๋ฅญํ ์ ํ์ ๋๋ค.
esbuild์ ์ฃผ์ ํน์ง:
- ๊ทน๋๋ก ๋น ๋ฅธ ๋น๋ ์๊ฐ
- TypeScript ๋ฐ JSX ์ง์
- ๊ฐ๋จํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด API
esbuild๋ก ํ๋ก์ ํธ๋ฅผ ๋ฒ๋ค๋งํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค:
esbuild src/index.js --bundle --outfile=dist/bundle.js
์ฌ๋ฐ๋ฅธ ๋ชจ๋ ๋ฒ๋ค๋ฌ ์ ํํ๊ธฐ
๋ชจ๋ ๋ฒ๋ค๋ฌ์ ์ ํ์ ํ๋ก์ ํธ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ๊ฒฐ์ ์ ๋ด๋ฆด ๋ ๋ค์ ์์๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ํ๋ก์ ํธ ๋ณต์ก์ฑ: ์ ๊ตํ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ง ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ Webpack์ด ์ข ์ข ์ต์์ ์ ํ์ ๋๋ค.
- ์ฌ์ฉ ํธ์์ฑ: ์๊ท๋ชจ ํ๋ก์ ํธ๋ ๋น ๋ฅด๊ณ ์ฌ์ด ์ค์ ์ ์ํ ๋ Parcel์ ํ๋ฅญํ ์ต์ ์ ๋๋ค.
- ์ฑ๋ฅ: ๋น๋ ์๊ฐ์ด ์ค์ํ ์์๋ผ๋ฉด esbuild๊ฐ ํ์ํ ์ ํ์ ๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ/ํ๋ ์์ํฌ ๊ฐ๋ฐ: ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ Rollup์ด ์ข ์ข ์ ํธ๋๋ ์ต์ ์ ๋๋ค.
- ์ปค๋ฎค๋ํฐ ์ง์: Webpack์ ๊ฐ์ฅ ํฌ๊ณ ํ๋ฐํ ์ปค๋ฎค๋ํฐ๋ฅผ ๋ณด์ ํ๊ณ ์์ด ๊ด๋ฒ์ํ ๋ฌธ์์ ์ง์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ชจ๋ ๋ฒ๋ค๋ง์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๋ชจ๋ ๋ฒ๋ค๋ง์ ์ต๋ํ ํ์ฉํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ญ์์ค:
์ค์ ํ์ผ ์ฌ์ฉ
๋ช ๋ น์ค ์ธ์๋ฅผ ํตํด ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์ค์ ํ๋ ๊ฒ์ ํผํ์ญ์์ค. ๋์ ์ค์ ํ์ผ(์: `webpack.config.js`, `rollup.config.js`)์ ์ฌ์ฉํ์ฌ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์ ์ํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ๋น๋ ํ๋ก์ธ์ค์ ์ฌํ์ฑ์ด ๋์์ง๊ณ ๊ด๋ฆฌ๊ฐ ๋ ์ฌ์์ง๋๋ค.
์์กด์ฑ ์ต์ ํ
์์กด์ฑ์ ์ต์ ์ํ๋ก ์ ์งํ๊ณ ์ฌ์ฉํ์ง ์๋ ์์กด์ฑ์ ์ ๊ฑฐํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ์ค์ด๋ค๊ณ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค. `npm prune` ๋๋ `yarn autoclean`๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ์์กด์ฑ์ ์ ๊ฑฐํ์ญ์์ค.
์ฝ๋ ๋ถํ ์ฌ์ฉ
์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋๋์ญ์์ค. ์ด๋ ํนํ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ํฅ์์ํต๋๋ค. ๋์ import ๋๋ ๊ฒฝ๋ก ๊ธฐ๋ฐ ์ฝ๋ ๋ถํ ์ ์ฌ์ฉํ์ฌ ์ฝ๋ ๋ถํ ์ ๊ตฌํํ์ญ์์ค.
ํธ๋ฆฌ ์์ดํน ํ์ฑํ
ํธ๋ฆฌ ์์ดํน์ ํ์ฑํํ์ฌ ๋ฒ๋ค์์ ๋ฐ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ์ค์ด๋ค๊ณ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค. ์ฝ๋๊ฐ ํธ๋ฆฌ ์์ดํน์ด ํจ๊ณผ์ ์ผ๋ก ์๋ํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์์ฑ๋์๋์ง ํ์ธํ์ญ์์ค(์: ES ๋ชจ๋ ์ฌ์ฉ).
์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN) ์ฌ์ฉ
๋ฒ๋ค๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์ ๊ณตํ๊ธฐ ์ํด CDN์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. CDN์ ์ฌ์ฉ์์ ๋ ๊ฐ๊น์ด ๊ณณ์ ์์นํ ์๋ฒ์์ ํ์ผ์ ์ ๋ฌํ์ฌ ์ง์ฐ ์๊ฐ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด๋ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ผ๋ณธ์ ๋ณธ์ฌ๋ฅผ ๋ ํ์ฌ๋ ๋ถ๋ฏธ์ ์ ๋ฝ์ ์๋ฒ๋ฅผ ๊ฐ์ถ CDN์ ์ฌ์ฉํ์ฌ ํด๋น ์ง์ญ์ ์ฌ์ฉ์์๊ฒ ํจ์จ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
๋ฒ๋ค ํฌ๊ธฐ ๋ชจ๋ํฐ๋ง
๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ฌ ์ ์ฌ์ ์ธ ๋ฌธ์ ์ ์ต์ ํ ๊ธฐํ๋ฅผ ์๋ณํ์ญ์์ค. `webpack-bundle-analyzer` ๋๋ `rollup-plugin-visualizer`์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ๋ค์ ์๊ฐํํ๊ณ ํฐ ์์กด์ฑ์ด๋ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์๋ณํ์ญ์์ค.
์ผ๋ฐ์ ์ธ ๊ณผ์ ์ ํด๊ฒฐ์ฑ
๋ชจ๋ ๋ฒ๋ค๋ง์ ๋ง์ ์ด์ ์ ์ ๊ณตํ์ง๋ง ๋ช ๊ฐ์ง ์ด๋ ค์์ ์ผ๊ธฐํ ์๋ ์์ต๋๋ค:
์ค์ ๋ณต์ก์ฑ
Webpack๊ณผ ๊ฐ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์ค์ ํ๋ ๊ฒ์ ํนํ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๋ณต์กํ ์ ์์ต๋๋ค. Parcel๊ณผ ๊ฐ์ ์์ ์์ค์ ์ถ์ํ๋ `create-react-app`๊ณผ ๊ฐ์ ์ค์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
๋น๋ ์๊ฐ
๋น๋ ์๊ฐ์ ํนํ ์์กด์ฑ์ด ๋ง์ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๋๋ฆด ์ ์์ต๋๋ค. ์บ์ฑ, ๋ณ๋ ฌ ๋น๋, ์ฆ๋ถ ๋น๋์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋น๋ ์ฑ๋ฅ์ ํฅ์์ํค์ญ์์ค. ๋ํ esbuild์ ๊ฐ์ ๋ ๋น ๋ฅธ ๋ชจ๋ ๋ฒ๋ค๋ฌ ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
๋๋ฒ๊น
๋ฒ๋ค๋ ์ฝ๋๋ฅผ ๋๋ฒ๊น ํ๋ ๊ฒ์ ์ฝ๋๊ฐ ์ข ์ข ์ถ์๋๊ณ ๋ณํ๋๊ธฐ ๋๋ฌธ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์์ค ๋งต์ ์ฌ์ฉํ์ฌ ๋ฒ๋ค๋ ์ฝ๋๋ฅผ ์๋ณธ ์์ค ์ฝ๋๋ก ๋ค์ ๋งคํํ์ฌ ๋๋ฒ๊น ์ ๋ ์ฝ๊ฒ ๋ง๋์ญ์์ค. ๋๋ถ๋ถ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์์ค ๋งต์ ์ง์ํฉ๋๋ค.
๋ ๊ฑฐ์ ์ฝ๋ ์ฒ๋ฆฌ
๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ์ต์ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ํตํฉํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ์ฌ ES ๋ชจ๋์ด๋ CommonJS ๋ชจ๋์ ์ฌ์ฉํ๋๋ก ๊ณ ๋ คํ์ญ์์ค. ๋๋ shim์ด๋ polyfill์ ์ฌ์ฉํ์ฌ ๋ ๊ฑฐ์ ์ฝ๋๊ฐ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ํธํ๋๋๋ก ํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฒ๋ค๋ง์ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ธ ๊ธฐ์ ์ ๋๋ค. ์ฝ๋๋ฅผ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฒญํฌ๋ก ๋ฌถ์์ผ๋ก์จ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ , ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๋ฉฐ, ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด ๊ฐ์ด๋์์ ๋ ผ์๋ ๊ฐ๋ ๊ณผ ๋๊ตฌ๋ฅผ ์ดํดํจ์ผ๋ก์จ ์์ ์ ํ๋ก์ ํธ์์ ๋ชจ๋ ๋ฒ๋ค๋ง์ ํ์ฉํ๊ณ ๋ ๊ฒฌ๊ณ ํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ค๋น๊ฐ ๋ ๊ฒ์ ๋๋ค. ๋ค์ํ ๋ฒ๋ค๋ฌ๋ฅผ ์คํํ์ฌ ํน์ ์๊ตฌ์ ๋ง๋ ๊ฒ์ ์ฐพ๊ณ ํญ์ ์ต๋ ์ฑ๋ฅ์ ์ํด ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์ต์ ํํ๋๋ก ๋ ธ๋ ฅํ์ญ์์ค.
์น ๊ฐ๋ฐ ํ๊ฒฝ์ ๋์์์ด ์งํํ๊ณ ์์ผ๋ฏ๋ก ์ต์ ํธ๋ ๋์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฝ๋ ๊ตฌ์ฑ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ ๋์์ด ๋ ์ ์๋ ์๋ก์ด ๋ชจ๋ ๋ฒ๋ค๋ฌ, ์ต์ ํ ๊ธฐ์ ๋ฐ ๊ธฐํ ๋๊ตฌ๋ฅผ ๊ณ์ ํ์ํ์ญ์์ค. ํ์ด์ ๋น๋ฉฐ ์ฆ๊ฑฐ์ด ๋ฒ๋ค๋ง ๋์๊ธธ ๋ฐ๋๋๋ค!