
JavaScript ํ๋ ์์ํฌ์ธ React, Vue, Svelte, Angular ๋ฑ์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ๋ชจ๋ ๋ฒ๋ค๋ฌ(module bundler)๋ ํ์์ ์ผ๋ก ์ธ๊ธ๋๋ ๋ด์ฉ์ ๋๋ค. ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ JavaScript ๋ชจ๋์ ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์๋ ๋จ์ผ JavaScript ํ์ผ๋ก ๋ฌถ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋๊ตฌ์ ๋๋ค.
๋ชจ๋(Module)
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ด ๋ง์์ง์๋ก ์์ฑํด์ผํ๋ ์ฝ๋๊ฐ ๊ธธ์ด์ง ์ ์์ต๋๋ค. ๋ชจ๋ ์ฝ๋๋ฅผ ํ ๊ฐ์ ํ์ผ์ ์์ฑํ๋ ๋์ ๊ธฐ๋ฅ(๋ณ์, ๊ฐ์ฒด, ๋ฐฐ์ด, ํจ์, ํด๋์ค ๋ฑ)์ ๋ฐ๋ผ ๋ณ๋์ ํ์ผ์ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ ๊ธฐ์ค์ ๋ฐ๋ผ ํ์ผ์ด ์๋นํ ๋ง์์ง ์ ์์ง๋ง, ํ ๊ฐ์ ํ์ผ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ๋ณด๋ค ์ฒด๊ณ์ ์ด๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋๋ค.
๊ฒฐ๊ตญ ๋ชจ๋์ ๋ถ๋ฆฌ๋ ํ์ผ์ ์๋ฏธํฉ๋๋ค. JavaScript์์ ํ์ฌ ๋ชจ๋์ ๋ค๋ฅธ ๋ชจ๋์์ ์ ๊ทผํ ์ ์๋๋ก export ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ถ๋ฆฌ๋ ๋ชจ๋์ ๋ถ๋ฌ์ค๊ธฐ ์ํด import ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ชจ๋ ๋ฒ๋ค๋ฌ์ ํ์์ฑ
React, Angular, Vue์ ๊ฐ์ JavaScript ํ๋ ์์ํฌ๊ฐ ๋ฑ์ฅํ๊ธฐ ์ ์๋ ์น ์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด HTML, CSS, JavaScript ๋ฟ์ด์๊ธฐ ๋๋ฌธ์ ํ์ผ ๊ด๋ฆฌ๊ฐ ๋ณต์กํ์ง ์์์ต๋๋ค. ํ์ง๋ง, ์๊ฐ์ด ์ง๋๋ฉด์ ์กฐ๊ธ ๋ ๋์ ์ฑ๋ฅ, ์๋๋ฅผ ๋ง์กฑํ๊ธฐ ์ํด ๋ค์ํ JavaScript ํ๋ ์์ํฌ๊ฐ ๋ฑ์ฅํ์์ผ๋ฉฐ, ์น ์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด ํ์ํ ํ์ผ๋ค์ด ์ ์ ๋ง์์ง๋๋ค.
์ด๋ ๊ฒ ๋ง์ ๋ชจ๋์ ํ๋๋ก ๋ฌถ๋ ๊ณผ์ ์ ์ฝ์ง ์์ผ๋ฉฐ, ๋ณ์ ๋๋ ํจ์ ์ด๋ฆ์ด ์ค๋ณต๋๋ ๊ฒฝ์ฐ ๊ทธ๋ฆฌ๊ณ ๋ชจ๋๊ฐ ์ข ์์ฑ ๋๋ฌธ์ ๋ฐฐํฌํ๊ธฐ ์ ๋ถํฐ ์๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ชจ๋๊ฐ ์ข ์์ฑ์ด๋ ์๋ฅผ ๋ค์ด ์ค๋ช ํ์๋ฉด, A.js ํ์ผ์ B.js๋ฅผ import ํ๊ณ B.js ํ์ผ์ C.js ํ์ผ์ import ํ๊ณ .. ์ด๋ ๊ฒ ๋ชจ๋๋ผ๋ฆฌ ์๋ก ์ข ์๋๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ๋ชจ๋ ๊ฐ ์ข ์์ฑ์ด ๋ณต์กํ ๊ฒฝ์ฐ ์ด๋ค ๋ชจ๋์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ์ถ์ ํ๋ ๊ฒ๋ ์ฝ์ง ์์ต๋๋ค.
ํ๋์ ํ์ผ๋ก ๋ณํฉํ๋๋ผ๋ ๋ณํฉํ๋ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ์๋นํ ๋ง์ ์๊ฐ์ ์๋ชจํ๊ฒ ๋๋ฏ๋ก ์๋นํ ๋นํจ์จ์ ์ ๋๋ค.
๋ชจ๋ ๋ฒ๋ค๋ฌ(module bundler)
๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์์์ ์ธ๊ธํ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ์งง์ ์๊ฐ์ ์ต์์ ์ฑ๋ฅ์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ๋ ๊ฐ๋ฐ ๋๊ตฌ์ ๋๋ค. ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ํต์ฌ ์์ ์ ์ฌ๋ฌ JS ํ์ผ์ ํ๋์ ๊ฒฐํฉํ์ฌ ๋จ์ผ ํ์ผ์ ๋ง๋๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์, Chrome๊ณผ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ ํ๋์ ๋จ์ผ ํ์ผ์ ๋ก๋ํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํฉ๋๋ค.
๋ชจ๋ ๋ฒ๋ค๋ฌ๋ JS ํ์ผ๋ฟ๋ง ์๋๋ผ CSS ํ์ผ๊ณผ, ์ด๋ฏธ์ง, ๊ธ๊ผด ๋ฑ ์ฌ๋ฌ ๋ฆฌ์์ค์ ๋ํด์๋ ๋ฒ๋ค๋ง ๋ฉ๋๋ค. ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์นํฉ, ๋กค์ ์ฒ๋ผ ๋ค์ํ ๊ฐ๋ฐ ๋๊ตฌ๊ฐ ์กด์ฌํ๋ฉฐ ๋ฒ๋ค๋ง ๋์ ๋ฐฉ์์ ๊ฐ๋ฐ ๋๊ตฌ๋ง๋ค ๋ค๋ฆ ๋๋ค.
์นํฉ์ ๋ฒ๋ค๋ง ๋ฐฉ์
const PI = 3.141;
export default function area(radius) {
return PI * radius * radius;
}
export default function area(side) {
return side * side;
}
import squareArea from './square';
import circleArea from './circle';
console.log('Area of square: ', squareArea(5));
console.log('Area of circle', circleArea(5));
์ด ํ์ผ๋ค์ ์นํฉ์ผ๋ก ๋ฒ๋ค๋งํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
const modules = {
'circle.js': function(exports, require) {
const PI = 3.141;
exports.default = function area(radius) {
return PI * radius * radius;
}
},
'square.js': function(exports, require) {
exports.default = function area(side) {
return side * side;
}
},
'app.js': function(exports, require) {
const squareArea = require('square.js').default;
const circleArea = require('circle.js').default;
console.log('Area of square: ', squareArea(5))
console.log('Area of circle', circleArea(5))
}
}
webpackStart({
modules,
entry: 'app.js'
});
- ํจ์์ ์ํด ๋ํ๋ ๋ชจ๋ ์์ฒด์ ๋ชจ๋ ์ด๋ฆ์ ๋งคํํ๋ ๋์ ๋๋ฆฌ ์ ๋๋ค.
- "๋ชจ๋ ๋งต"์ ๋ ์ง์คํธ๋ฆฌ์ ๊ฐ์ผ๋ฉฐ ํญ๋ชฉ์ ์ถ๊ฐํ์ฌ ๋ชจ๋์ ์ฝ๊ฒ ๋ฑ๋กํ ์ ์์ต๋๋ค.
- ์ด ํจ์๋ ๋ชจ๋ ์ค์ฝํ๋ฅผ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค
- ํจ์ ์์ฒด๋ฅผ "๋ชจ๋ ํฉํ ๋ฆฌ ํจ์"๋ผ๊ณ ํฉ๋๋ค.
- ๋ชจ๋์ด ์ธํฐํ์ด์ค๋ฅผ export ํ๊ณ ๋ค๋ฅธ ๋ชจ๋์์ requireํ ์ ์๋๋ก ๋ช ๊ฐ์ง ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ข ์ข "๋ฐํ์"์ด๋ผ๊ณ ํ๋ ํจ์์ด๋ฉฐ, ๋ฒ๋ค์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ ๋๋ค.
- "๋ชจ๋ ๋งต"๊ณผ ์ํธ๋ฆฌ ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํฉ๋๋ค.
webpack-bundle.js
function webpackStart({ modules, entry }) {
const moduleCache = {};
const require = moduleName => {
// if in cache, return the cached version
if (moduleCache[moduleName]) {
return moduleCache[moduleName];
}
const exports = {};
// this will prevent infinite "require" loop
// from circular dependencies
moduleCache[moduleName] = exports;
// "require"-ing the module,
// exported stuff will assigned to "exports"
modules[moduleName](exports, require);
return moduleCache[moduleName];
};
// start the program
require(entry);
}
- webpackStart๋ "require" ํจ์์ ๋ชจ๋ ์บ์๋ผ๋ ๋ ๊ฐ์ง๋ฅผ ์ ์ํฉ๋๋ค.
- "require" ํจ์๋ CommonJS์ require์ ๋ค๋ฆ
๋๋ค.
- "require"๋ ๋ชจ๋ ์ด๋ฆ์ ๊ฐ์ ธ์ค๊ณ ๋ชจ๋์์ ๋ด๋ณด๋ธ ์ธํฐํ์ด์ค๋ฅผ ๋ฐํํฉ๋๋ค.
- ์: circle.js์ ๊ฒฝ์ฐ { default: function area(radius){ ... } }์ ๋๋ค.
- ๋ด๋ณด๋ธ ์ธํฐํ์ด์ค๋ ๋ชจ๋ ์บ์์ ์บ์๋ฉ๋๋ค.
- ๋์ผํ ๋ชจ๋ ์ด๋ฆ์ "require"๋ฅผ ๋ฐ๋ณตํด์ ํธ์ถํ๋ฉด "๋ชจ๋ ํฉํ ๋ฆฌ ํจ์"๊ฐ ํ ๋ฒ๋ง ์คํ๋ฉ๋๋ค.
- "require"๊ฐ ์ ์๋ ์ํ์์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ํ๋ฉด ์ํธ๋ฆฌ ๋ชจ๋์ "require"ํฉ๋๋ค.

๋ค์ ๊ธ์ ๋ก๋๋ ํ๋ฌ๊ทธ์ธ์ ๋ํด ์จ์ผ๊ฒ ๋ค
์ ๋ฆฌ
- ๋ชจ๋์ ํน์ ๋ชฉ์ ๋๋ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ๋ถ๋ฆฌ๋ ํ์ผ์ ์๋ฏธํฉ๋๋ค.
- ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ๋ถ๋ฆฌ๋ ํ์ผ์ ํ๋์ ํ์ผ๋ก ๋ณํฉํ๋ ๊ฐ๋ฐ ๋๊ตฌ์ ๋๋ค.
- ์นํฉ ๋ฐฉ์:
- ๋ชจ๋ ๋งต ์ฌ์ฉ ํจ์๋ฅผ ์ฌ์ฉ
- ๊ฐ ๋ชจ๋์ ํจ์๋ก ๋ํ
- ๋ชจ๋์ ํจ๊ป ๋ถ์ด๋ ๋ฐํ์ ์ฝ๋๊ฐ ์์
์ถ์ฒ:
๋ชจ๋ ๋ฒ๋ค๋ฌ(module bundler)๋?
JavaScript ํ๋ ์์ํฌ์ธ React, Vue, Svelte, Angular ๋ฑ์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ๋ชจ๋ ๋ฒ๋ค๋ฌ(module bundler)๋ ํ์์ ์ผ๋ก ์ธ๊ธ๋๋ ๋ด์ฉ์ ๋๋ค. ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ๊ฐ๋ ์ ์ผ๋ก ์๊ฐ๋ณด๋ค ์ฌ์ด ๋ด์ฉ์ด์ง๋ง ์นํฉ, ๋กค์ ,
developer-talk.tistory.com
[๋ฒ์ญ]๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ?
ํด๋น ๊ธ์ ๋ฒ์ญ์ ๋๋ค : https://lihautan.com/what-is-module-bundler-and-how-does-it-work/ What is module bundler and how does it work? | Tan Li Hau What is module bundler and how does it work? August 30, 2019 (Last updated August 30, 2019) Series:
itchallenger.tistory.com
'Front-end' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| useState์ ๋น๋๊ธฐ์ฑ (0) | 2025.04.13 |
|---|---|
| React key prop๊ณผ ์ํ ์ด๊ธฐํ (0) | 2025.02.23 |
| Timer Interval ์ง์ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ (2) | 2025.02.02 |
| React Server Component๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ (0) | 2024.12.15 |
| ์น ํ์ค๊ณผ ์น ์ ๊ทผ์ฑ (0) | 2023.11.29 |