๐ ์๋ก
๐ฌ Module์ด๋?
๋ถ๋ฆฌ๋ ์ฝ๋์ ์กฐ๊ฐ, ์์คํ
์ ์ด๋ฃจ๋ ๋
ผ๋ฆฌ์ ์ธ ์ผ๋ถ๋ถ
- Javascript๋ ์น ํ์ด์ง์ ๋ณด์กฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ถ์ฌํ๊ธฐ ์ํ ์ฉ๋๋ก ๋ง๋ค์ด์ก๋ค.
- ์นํ์ด์ง์์ Javascript๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์๋์ ๊ฐ์ด script ํ๊ทธ๋ฅผ ํตํด Javascript ํ์ผ์ ๊ฐ์ ธ์ค๋ฉด ๋๋ค.
<script type="text/javascript" src="index.js></script>
- ๋ง์ฝ ํ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด 2๊ฐ์ด๊ณ ๋ ํ์ผ์ ๊ฐ๊ฐ ๊ฐ์ ์ด๋ฆ์ ๋ณ์๊ฐ ์ ์ธ๋์ด ์๋ค๋ฉด?
<script type="text/javascript" src="index.js></script>
<script type="text/javascript" src="todo.js></script>
var todo = "์ธ์
์ค๋นํ๊ธฐ"
var todo = "๊ฟ์ ์๊ธฐ"
-
์ง๊ธ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก javascript ํ์ผ์ ๋ถ๋ฌ์จ๋ค๋ฉด ํ๋์ ํ์ผ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ๊ณผ ๋ค๋ฅผ๊ฒ ์๋ค.
-
๋ํ todo๋ ์ ์ญ ๋ณ์์ด๋ฏ๋ก ์ ์ญ ์ค์ฝํ๋ฅผ ์ค์ผ์ํค๊ณ ์์ธกํ๊ธฐ ์ด๋ ต๊ณ ์ค๋ฅ๋ฅผ ๋ง๋ค์ด๋ด๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ๋ง๋ ๋ค.
-
์ด๋ฌํ ๋ฌธ์ ๋ ์๋์ ๊ฐ์ด Closure์ ์๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์ฆ์์คํ ํจ์ ๋ฑ์ ํตํด ๊ตฌํํ ๋ชจ๋ ํจํด์ผ๋ก ์ธ๋ถ๋ก๋ถํฐ ๋
๋ฆฝ์ ์ธ ์ค์ฝํ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ฉฐ ์ด๋ ์ ๋ ๊ทน๋ณต ๊ฐ๋ฅํ๋ค.
var todoApp = (function () {
var todo = "๊ฟ์ ์๊ธฐ"
return {
getTodo: function() {
return todo;
}
}
})();
console.log(todoApp.getTodo());
console.log(todo);
๐ Modularization
๐ฌ ๋ชจ๋ํ์ ํ์์ฑ
- ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ธ๋ผ์ฐ์ ์์๋ง ์ฌ์ฉํ ๊ฒ ์๋๋ผ ๋ฒ์ฉ์ ์ธ ์๋ฒ์ฌ์ด๋ ์ธ์ด๋ก ์ฌ์ฉํ๋ ค๋ ์์ง์
- ์ด๋ฅผ ์ํด ๋ชจ๋ํ๋ฅผ ํ๊ณ ์๋ก ํธํ๋๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค๋ฅธ ๋ชจ๋์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
- ๋ชจ๋ํ์ ๊ตฌ์ฑ์์์๋ ์ค์ฝํ, ์ ์, ์ฌ์ฉ์ด ์๋ค.
๊ฐ๊ฐ์ ๋ชจ๋์ ๋
๋ฆฝ์ ์ธ ์ค์ฝํ๋ฅผ ๊ฐ๊ณ ,
๋ชจ๋์ ์ ์ํ์ฌ ๋ง๋ค ์ ์์ด์ผ ํ๊ณ ,
์ ์๋ ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค.
๐ฌ commonJS
์ฌ๋ด์ผ๋ก,
- ๋น๋๊ธฐ๋ก๋ ๋ชจ๋์ ์ฌ์ฉํ๊ณ ์ถ์ ์์ง์์ผ๋ก ๋ฑ์ฅํ AMD(Asynchronous Module Definition)๊ณผ
- AMD๊ธฐ๋ฐ์ผ๋ก CommonJS ๋ฐฉ์๊น์ง ์ง์ํ๋ ํตํฉ ํํ์ธ UMD(Universal Module Definition)๊ฐ ์กด์ฌํ๋ค.
๐ Webpack
- commonJS์ ๋ฑ์ฅ์ผ๋ก ๋ชจ๋์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ผ๋ ๋ชจ๋ ํ์ผ์ ๋คํธ์ํฌ ํต์ ์ ํตํด ํ๋์ฉ ๊ฐ์ ธ์ค๋ ๋ฌธ์ ์ ์ด ๋ฐ์ํ์๋ค.
- ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด Module Bundler๊ฐ ๋ฑ์ฅํ์๋ค.
๐ฌ Module Bundler
- ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ๋ง ๊ทธ๋๋ก ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋์ ํ๋์ ํ์ผ๋ก ๋ฌถ์ด์ ์ฒ๋ฆฌํ๋ ๋๊ตฌ๋ฅผ ๋งํ๋ค.
๐ฌ Webpack

- ๊ฐ์ฅ ๋ํ์ ์ธ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ธ ์นํฉ์์๋ ๋ชจ๋ ํ์ผ(HTML, CSS, ์ด๋ฏธ์ง, ํฐํธ ๋ฑ)์ ๋ชจ๋๋ก ๋ณด๊ณ ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ฒ๋ค(bundle)๋ก ๋ณํํด ์ค๋๋ค.
๐ฌ Webpack์ ๋์ ๋ฐฉ์
- Webpack์ entry๋ฅผ ํตํด ํ๋ก์ ํธ์ ๋ชจ๋ ์์กด์ฑ์ ๋ถ์ํ๋ค.
- entry์์ ์ ์ํ ํ์ผ์ ์์์ผ๋ก ์์กดํ๋ ๋ค๋ฅธ ๋ชจ๋์ ์์ฐจ์ ์ผ๋ก ๋ถ์ํ๊ณ , ์ด๋ฅผ ํ๋์ ๋ชจ๋๋ก ๋ฌถ์ด ๋ฒ๋ค๋งํ๋ค.
- ์ด๋, ๋ก๋(loader)์ ํ๋ฌ๊ทธ์ธ(plugin)์ ์ด์ฉํ์ฌ ๋ค์ํ ํ์ผ ํ์(CSS, ์ด๋ฏธ์ง ๋ฑ)์ ๋ชจ๋๋ก ์ธ์ํ๊ณ , ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๐ฌ Webpack์ ์ฃผ์ ๊ตฌ์ฑ ์์
- entry : ์ฑ์ด ๋ฒ๋ค์ฒ๋ฆฌ๋ฅผ ์์ํ ์ง์ ์ผ๋ก ์ผ๋ฐ์ ์ผ๋ก index.js์์ ์์ํด import๋ฌธ์ ๋ฐ๋ผ ๋น๋๊ฐ ์งํ๋๋ค.
- output : ๋ฒ๋ค๋ง๋ ๊ฒฐ๊ณผ๋ฌผ์ ์์น ๋ฐ ํ์ผ์ด๋ฆ์ ์ง์ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก dist๋ build๋ผ๋ ์ด๋ฆ์ ํด๋๋ฅผ ์ฌ์ฉํ๋ค.
- module: ์นํฉ์ด ๋ชจ๋์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ ๊ท์น(rule)์ ์ ์ํฉ๋๋ค.
- loader
- ๊ธฐ๋ณธ์ ์ผ๋ก javascript ๋ฐ JSON ํ์ผ๋ง ํด์์ด ๊ฐ๋ฅํ Webpack์ ๋ค๋ฅธ ํฌ๋ฉง์ ํ์ผ์ ์ฒ๋ฆฌํ๊ณ ๋ชจ๋๋ก ๋ณํํ๊ฒ ํด์ค๋ค.
- ์์ฃผ ์ฌ์ฉํ๋ loader์๋ css-loader, style-loader, file-loader๋ฑ์ด ์๋ค.
- plugin
- ํ๋ฌ๊ทธ์ธ์ ๋ฒ๋ค๋ ๊ฒฐ๊ณผ๋ฌผ์ ํํ๋ฅผ ๋ฐ๊พธ๋ ํ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ญํ ์ด๋ค.
- ๋๋
ํ๋ ํน์ ๋ฌธ์์ด ์นํ๋ฑ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- ๋ํ์ ์ธ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๊ฐ๋ฐ์ฉ api์ ๋ฐฐํฌ์ฉ api์ฃผ์๋ฅผ ์๋ก ๋ค๋ฅด๊ฒ ์ค์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ด ํ๊ฒฝ ์์กด์ ์ธ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉํ๋ definePlugin์ด ์๋ค.
- mode : production, development, none๋ฑ ์นํฉ์ ๋ชจ๋๋ฅผ ์ค์ ํ๋ค.
๐ Webpack ์ต์ ํ
๐ฌ ๋ฒ๋ค ์ฌ์ด์ฆ ์ค์ด๊ธฐ
๋ฒ๋ค ์ฌ์ด์ฆ๋ฅผ ์ค์ฌ์ผ ํ๋ ์ด์
- ๋คํธ์ํฌ ๋น์ฉ : ํ์ผ์ด ๋ฌด๊ฑฐ์ธ์๋ก ๋คํธ์ํฌ ํต์ ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
- ํ์ฑ ๋ฐ ์ปดํ์ผ ๋น์ฉ ์ค์ด๊ธฐ
- ๋ฉ๋ชจ๋ฆฌ ๋น์ฉ : ์ฝ๋๊ฐ ์คํ๋์ง ์์๋ RAM์ ์ฝ๋๊ฐ ์ฌ๋ผ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ๋ค.
๋ฒ๋ค ์ฌ์ด์ฆ๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ
- Webpack mode
- source map
- code splitting
- tree shaking
- html, css ์ต์ ํ
๐ฌ ๋น๋ ์๋ ์ค์ด๊ธฐ
- persistant cache ์ฌ์ฉํ๊ธฐ