๋ฒ๋ค(bundle)๊ณผ ๋ฒ๋ค๋ง(bundling)
- -
๐ฃ ๋ฒ๋ค(bundle)๊ณผ ๋ฒ๋ค๋ง(bundling) ๊ทธ๋ฆฌ๊ณ ๋ชจ๋(module)
ํน์ ๋ฒ๋ค๋ง๊ณผ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ์ฐจ์ด์ ๋ํด์ ์์ธํ ์ค๋ช
ํ ์ ์์๊น? ๋จธ๋ญ๊ฑฐ๋ ธ๋ค๋ฉด ์ ๋ฆฌ๋ ๊ธ์ ํตํด ๋ฒ๋ค๋ง๊ณผ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋ํด์ ํ ๋ฒ ์ดํด๋ณด์. ๊ทธ๋ฆฌ๊ณ ์ด์ด์ ์นํฉ(Webpack), ๋ฐ๋ฒจ(Babel), ํด๋ฆฌํ(Polyfill) ๊ทธ๋ฆฌ๊ณ ๋นํธ(Vite)๊น์ง ์์๋๋ก ์ฐจ๋ก์ฐจ๋ก ์ ๋ฆฌํด๋ณผ ๊ฒ์ด๋ค. (๋ฌผ๋ก ์ด์ ์ Notion ์ ๋ฆฌํ๋ ๊ฐ๋
๋ค์ ๋ ๋ค์ ๊ธ์ด์์ ์ ๋ฆฌํ๋ ๊ฒ์ด์ง๋ง..!) ์ค๋๋ ๋ ์ธ ๊ผฌ์ฐ!

๐ฃ ๋ฒ๋ค(bundle)
1. ๊ฐ๋
"๋ฒ๋ค"์ ์ฌ๋ฌ ๋ฆฌ์์ค(์: JavaScript, CSS, ์ด๋ฏธ์ง ๋ฑ)๋ฅผ ๋ณด๋ค ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ํ์์ผ๋ก ๊ฒฐํฉํ๋ ๋จ์ผ ํ์ผ ๋๋ ํ์ผ ์ธํธ๋ฅผ ์๋ฏธ. ๋ฒ๋ค์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๋ํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์ ์ ๊ณต.
๐ฃ ๋ฒ๋ค๋ง(bundling)
1. ๊ฐ๋
์ฌ์ ์ ์๋ฏธ๋ '์ด๋ค ๊ฒ์ ๋ฌถ๋ค, ๋ชจ์ผ๋ค' . ์น ๊ฐ๋ฐ์์ ๋ฒ๋ค๋ง์ ์ฌ๋ฌ ์ฝ๋์ ๋ค์ํ ํ๋ก๊ทธ๋จ์(JavaScript ํ์ผ, CSS ํ์ผ, ์ด๋ฏธ์ง ๋ฑ)์ ๊ฐ์ ธ์ ๋จ์ผ ํ์ผ ๋๋ ๋ช ๊ฐ์ ํ์ผ๋ก ๊ฒฐํฉํ๋ ํ๋ก์ธ์ค. ์ด ํ๋ก์ธ์ค๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ก๋ฉ ์๊ฐ์ ์ต์ ํํ๊ณ ์ข
์์ฑ์ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ๋์. ๋ฒ๋ค๋ง์ ๋น๋ ๊ณผ์ ์ค ํ๋๋ก, ์ต์ข
์ ์ผ๋ก ๋ฒ๋ค๋ง๋ ํ์ผ์ ๋ธ๋ผ์ฐ์ ์์ ์คํํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ.
* ๋น๋, ๋ฒ๋ค๋ง, ๋ณํ ์ด ์ธ ๋จ์ด ๋ชจ๋ ๊ฐ์ ์๋ฏธ
์ฌ๋ฌ ์ฝ๋์ ํ๋ก๊ทธ๋จ์ ๋ฌถ์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์์๊ฒ ์ ๊ณต
์ฐธ๊ณ ๋ก ์นํฉ ๋ฑ์ ๋ฒ๋ค๋ง ๋๊ตฌ๋ค์ ์ดํด๋ณด๊ธฐ ์ ์ ๋ฒ๋ค๋ง ๊ฐ๋
์์ฒด๋ก๋ง ๋ดค์ ๋๋ ์ฌ๋ฌ JavaScript ํ์ผ์ ํ๋์ ํ์ผ๋ก ์๋์ผ๋ก ์ฐ๊ฒฐํ๋ค.
2. ๋ฒ๋ค๋ง์ด ์ค์ํ ์ด์ ๋?
์ฌ๋ฌ ํ์ผ์ ํ๋ ๋๋ ๋ช ๊ฐ์ ํ์ผ๋ก ๊ฒฐํฉํ์ฌ HTTP ์์ฒญ ์๋ฅผ ์ค์ฌ ๋ก๋ ์๊ฐ์ ํฅ์. ์ข ์์ฑ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ ํ์ํ ๋ชจ๋ ๋ชจ๋์ด ์ฌ๋ฐ๋ฅธ ์์๋ก ํฌํจ๋๋๋ก ๋ณด์ฅ. ํจ๊ป ๋ฌถ์ ์ ์๋ ๋ ์๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋๋ก ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ๋์.
2-1. ํ์ผ ํฌ๊ธฐ
๋ฒ๋ค๋ง์ ๊ฒฐ๊ณผ๋ฌผ ํ์ผ๋ค์ ์์ถํ์ฌ ํฌ๊ธฐ๋ฅผ ์ค์. ๋ฒ๋ค ํ์ผ์ ๋ฒ๋ค๋ง๋์ง ์์ ์๋ณธ ํ์ผ๋ณด๋ค ์์์ง๊ณ , ์คํ ์๋์ ๋ก๋ฉ ์๋๋ ํฅ์.
2-2. ์ ํ๋ฆฌ์ผ์ด์ ์์ ์กฐ์ ๋ฐฉ์ง
๋ฒ๋ค๋ง๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์๊ฐ ์์๋ก ์กฐ์ํ ์ ์์. ๋ฒ๋ค๋ง๋์ง ์์ ์๋ณธ ์ฝ๋์ ์ ๊ทผํ ์ ์๋ค๋ฉด, ์ฌ์ฉ์๊ฐ ์๋ํ์ง ์์ ์กฐ์์ ํ ์ ์์. ๋ฒ๋ค๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ๋ณด์์ ๊ฐํ.
2-3. ํ์ผ ๋จ์ ๋ชจ๋ ๊ด๋ฆฌ
JavaScript๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ญ ๋ฒ์๋ฅผ ๊ฐ์ง๋ฏ๋ก ์ฌ๋ฌ ๊ฐ์ JavaScript ํ์ผ์ด ์์ ๋ ๋ณ์ ์ถฉ๋ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์. ๋ฒ๋ค๋ง ๋๊ตฌ์ธ Webpack์ ๋ชจ๋ ๋ฒ๋ค๋ง์ ํตํด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ.
3. ๋ฒ๋ค๋ง๊ณผ ๋ชจ๋
๋ชจ๋์ ์ฝ๋๋ฒ ์ด์ค์ ๊ฐ๋ณ ๊ธฐ๋ฅ ๋จ์ ์ด๊ณ , ๋ฒ๋ค๋ง์ ์ฌ๋ฌ ํ์ผ์ ํ๋ ๋๋ ๋ช ๊ฐ์ ํ์ผ๋ก ๊ฒฐํฉํ์ฌ HTTP ์์ฒญ ์๋ฅผ ์ค์ฌ ๋ก๋ ์๊ฐ์ ํฅ์. ์ข
์์ฑ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ ํ์ํ ๋ชจ๋ ๋ชจ๋์ด ์ฌ๋ฐ๋ฅธ ์์๋ก ํฌํจ๋๋๋ก ๋ณด์ฅ. ํจ๊ป ๋ฌถ์ ์ ์๋ ๋ ์๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋๋ก ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ๋์.
4. ๋ฒ๋ค๋ง ๋๊ตฌ?
๋ฒ๋คํฌ๊ธฐ๋ฅผ ์ต์ํ ํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ , ์ฝ๋์ ์ง ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํ๋๋ฐ ๋์์ ์ฃผ๋ ๋๊ตฌ๋ค
- Webpack
- Parcel
- Rollup
๐ฃ ๋ชจ๋(module)๊ณผ ๋ฒ๋ค๋ฌ
1. ๊ฐ๋
๋ชจ๋์ ์ฝ๋๋ฒ ์ด์ค์ ๊ฐ๋ณ ๊ธฐ๋ฅ ๋จ์. ๋ฒ๋ค๋ง์ด๋ ๋ชจ๋๋ค์ ์์กด์ฑ์ ํ์
ํ์ฌ ๊ทธ๋ฃนํ ์์ผ์ฃผ๋ ๊ฒ์ด๊ณ , ๋ฐ๋๋๋ ๊ฐ๋
์ผ๋ก์ ๋ชจ๋(module)์ด๋ผ ํ ์ ์์. ๋ถ๋ฆฌ๋์ด ์๋ ๋ชจ๋์ ํ๋๋ก ํฉ์ณ์ฃผ๋ ๊ฒ์ด ๋ฒ๋ค(bundle)์ด๋ผ๋ ๊ฐ๋
์ด๊ณ , ์ฌ๋ฌ ๋ชจ๋๋ก ๋๋์ด export๋ก ๋ด๋ณด๋ด๊ธฐ๋ ํ๊ณ , import๋ก ๊ฐ์ ธ์ค๊ธฐ๋ ํจ.
2. ๋ชจ๋ ๋ฐ ๋ชจ๋ ์์คํ ?
ES6 ๋ชจ๋: ํจ์, ๊ฐ์ฒด ๋๋ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ด๋ณด๋ด๊ธฐํ ์ ์๋ JavaScript์ ๊ธฐ๋ณธ ๋ชจ๋ ์์คํ
. CommonJS: require๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋์ด ๋๊ธฐ์ ์ผ๋ก ๋ก๋๋๋ Node.js์์ ์ฌ์ฉ.
3. ๋ชจ๋ ๋ฒ๋ค๋ฌ
'๋ชจ๋' ๊ณผ '๋ชจ๋ ๋ฒ๋ค๋ฌ'์ ์ฐจ์ด์ ๋ํด์ ๋จผ์ ์ดํด๋ณด๋ฉด!
๋ชจ๋
๊ฒฐํฉํ๋ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ๋ฐ ํ๋ก์ธ์ค.
์ฌ๋ฌ ์ฝ๋์ ํ๋ก๊ทธ๋จ์ ๋ฌถ์ด ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ์์๊ฒ ์ ๊ณต. ๊ฒฐํฉํ๋ ์ผ๋ฐ์ ์ธ ๊ฐ๋
๋ฐ ํ๋ก์ธ์ค. ํ์ผ ๊ฒฐํฉ์ ์ต์ข
๊ฒฐ๊ณผ. ์๋์ผ๋ก ํ์ผ ๊ฒฐํฉ(์ฌ๋ฌ JavaScript ํ์ผ์ ํ๋์ ํ์ผ๋ก ์๋์ผ๋ก ์ฐ๊ฒฐ)
๋ชจ๋ ๋ฒ๋ค๋ฌ
๋ฒ๋ค๋ง ํ๋ก์ธ์ค๋ฅผ ์ํํ๋ ํน์ ๋๊ตฌ ๋๋ ์ํํธ์จ์ด
๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ๋ฒ๋ค๋ง ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๋ ๋๊ตฌ. ์ฌ๋ฌ ๋ชจ๋๊ณผ ํด๋น ์ข ์์ฑ์ ๊ฐ์ ธ์ ํ๋์ ๋ฒ๋ค ๋๋ ์ฌ๋ฌ ๋ฒ๋ค๋ก ๊ฒฐํฉ. ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ํ๋ก์ ํธ์ ์ข ์์ฑ ๊ทธ๋ํ๋ฅผ ๋ถ์ํ๊ณ , ์ด๋ฌํ ์ข ์์ฑ์ ๊ด๋ฆฌํ๊ณ , ๋ฒ๋ค ํ์ผ์ ์ถ๋ ฅํ๋ ๊ฒ. ํ์ํ ๋ชจ๋ ๋ชจ๋์ด ์ฌ๋ฐ๋ฅธ ์์๋ก ํฌํจ๋๊ณ ์ฑ๋ฅ์ด ์ต์ ํ๋๋๋ก ๋ณด์ฅ. ์๋๋ ๋ง์ด ์ฐ์ด๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ
- Webpack : ํ๋ถํ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ๋ฅผ ๊ฐ์ถ ๊ณ ๋๋ก ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋๊ตฌ
- Parcel : ES6 ๋ชจ๋์ ์ค์ ์ ๋๊ณ ๋ ์์ ๋ฒ๋ค์ ์์ฑ
- Rollup : ์ฌ์ฉ ๋ฐ ์ค์ ์ด ์ฌ์ด ์ ๋ก ๊ตฌ์ฑ ๋ฒ๋ค๋ฌ
4. Webpack์ ์ฌ์ฉํ ๊ฒฝ์ฐ
๋ฒ๋ค๋ฌ๊ฐ ์ข ์์ฑ ๊ทธ๋ํ ์์ฑ์ ์์ํ๋ ์์์ . ์๋ฅผ ๋ค์ด Webpack ๊ตฌ์ฑ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ง์ ์ ์ ์ ์.
module.exports = {
entry: './src/index.js',
// other configurations
};
5. ์ ๋ฆฌํด๋ณด์๋ฉด
๋ฒ๋ค๋ง์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ค์ํ ๋ฐฉ๋ฒ. ์์ฐ์ ๋ช ๊ฐ์ ๋ฒ๋ค๋ก ๊ฒฐํฉํ๋ฉด ๋ก๋ ์๊ฐ์ด ํฅ์๋๊ณ ์ข ์์ฑ์ ๋ ์ฝ๊ฒ ๊ด๋ฆฌ ๊ฐ๋ฅ. ์ฝ๋ ๋ถํ ๋ฐ ํธ๋ฆฌ ์์ดํน๊ณผ ๊ฐ์ ๊ฐ๋ ๊ณผ ํจ๊ป Webpack, Rollup ๋๋ Parcel๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ดํดํ๊ณ ํ์ฉํ๋ฉด ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์ ๊ฐ๋ฅ!
๐ฃ ์ ๋ฆฌ : ๋ฒ๋ค(bundle) ยท ๋ฒ๋ค๋ง(bundling) ยท ๋ชจ๋(module)
๋ฒ๋ค(bundle)
๋ฒ๋ค์ ์ฌ๋ฌ ๋ฆฌ์์ค(์: JavaScript, CSS ๋ฐ ์ด๋ฏธ์ง)๋ฅผ ์น ๋ธ๋ผ์ฐ์ ์ ๋ํด ๋ณด๋ค ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ณ ์ต์ ํ๋ ํ์์ผ๋ก ๊ฒฐํฉํ๋ ๋จ์ผ ํ์ผ ๋๋ ํ์ผ ์ธํธ. ๋ก๋ฉ ์๊ฐ์ ๊ฐ์ ํ๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฐ์ ๊ตฌ์ฑํ๋ ๋ฐ ๋์.
๋ฒ๋ค๋ง(bundling)
๋ฒ๋ค๋ง์ ๋ค์ํ ๋ฆฌ์์ค๋ค์ ํ๋ ์ด์์ ๋ฒ๋ค๋ก ๊ฒฐํฉํ๋ ํ๋ก์ธ์ค. ์ด๋ ๊ฒ ํ๋ฉด HTTP ์์ฒญ ์๋ฅผ ์ค์ด๊ณ ์ข
์์ฑ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ ๋ธ๋ผ์ฐ์ ์ ๋ํ ๋ฆฌ์์ค ์ ๋ฌ์ ์ต์ ํ.
๋ชจ๋(module)
๋ชจ๋์ ์ฝ๋๋ฒ ์ด์ค์ ๊ฐ๋ณ ๊ธฐ๋ฅ ๋จ์๋ก, ์ข
์ข
์์ฒด ํ์ผ์ ์บก์ํ. ๋ชจ๋์ ํน์ ๊ธฐ๋ฅ, ๊ฐ์ฒด ๋๋ ๊ฐ์ ๋ด๋ณด๋ผ ์ ์์ผ๋ฉฐ ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ชจ๋์์ ๊ฐ์ ธ์ฌ ์ ์์. ์ด ๋ชจ๋์ ์ ๊ทผ ๋ฐฉ์์ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๊ณ ์ฌ์ฌ์ฉ์ ์ด์งํ๋ฉฐ ์ข
์์ฑ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ๋์. ์๋ก๋ ES6 ๋ชจ๋(import ๋ฐ export ์ฌ์ฉ) ๋ฐ CommonJS ๋ชจ๋(require ์ฌ์ฉ)์ด ์์.
๋ชจ๋ ๋ฒ๋ค๋ฌ(module bundler)
๋ฒ๋ค๋ง ํ๋ก์ธ์ค๋ฅผ ์ํํ๋ ํน์ ๋๊ตฌ ๋๋ ์ํํธ์จ์ด. ํ๋ก์ ํธ์ ์ข
์์ฑ ๊ทธ๋ํ๋ฅผ ๋ถ์ํ๊ณ , ์ด๋ฌํ ์ข
์์ฑ์ ๊ด๋ฆฌํ๊ณ , ๋ฒ๋ค ํ์ผ์ ์ถ๋ ฅํ๋ ๊ฒ. ํ์ํ ๋ชจ๋ ๋ชจ๋์ด ์ฌ๋ฐ๋ฅธ ์์๋ก ํฌํจ๋๊ณ ์ฑ๋ฅ์ด ์ต์ ํ๋๋๋ก ๋ณด์ฅ. ์นํฉ(Webpack)
๋ฒ๋ค/๋ฒ๋ค๋ง/๋ชจ๋/๋ชจ๋๋ฒ๋ค๋ฌ![]()
์ถ์ฒ:
https://parodev.tistory.com/58
https://strap.tistory.com/entry/๋ฒ๋ค์ด๋-bundle
https://humanwater.tistory.com/2
https://joshua1988.github.io/webpack-guide/webpack/what-is-webpack.html#%EC%9B%B9%ED%8C%A9%EC%97%90%EC%84%9C%EC%9D%98-%EB%AA%A8%EB%93%88
'FrontEnd > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐ๋ฒจ(Babel)์ ๋ํด์ ์์๋ณด์! (0) | 2024.06.17 |
---|---|
์นํฉ(Webpack)์ ํํค์ณ ๋ณด์! (0) | 2024.06.17 |
[JavaScript] ASCII ์ฝ๋ - charCodeAt() ์ fromCharCode() (0) | 2024.06.14 |
[JavaScript] ๋ฐ๋ณต๋ฌธ for...of ๊ทธ๋ฆฌ๊ณ for...in (0) | 2024.06.14 |
[JavaScript] toLocaleDateString (0) | 2024.01.31 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค