WEBPACK
Last updated
Last updated
์๋ฒ์์ ์ฒ๋ฆฌํ๋ ๋ก์ง์ JavaScript๋ก ๊ตฌํํ๋ ๋ถ๋ถ์ด ๋ง์์ง๋ฉด์ ์น ์๋น์ค ๊ฐ๋ฐ์์ JavaScript๋ก ์์ฑํ๋ ์ฝ๋ ์๋ ๋์ด๋ฌ๋ค. ํ๋์ ํ์ผ๋ก ๊ด๋ฆฌํ๋๋ฐ๋ ํ๊ณ๊ฐ ์๊ฒผ์ผ๋ฉฐ, ์ฌ๋ฌ๊ฐ ํ์ผ์ ๋ธ๋ผ์ฐ์ ์์ ๋ก๋ฉํ๋ ๊ฒ์ ๊ทธ๋งํผ ๋น์ฉ์ด ๋ฐ์ํ๋ฉฐ, ํ์ผ๊ฐ ๋ณ์ ์ถฉ๋ ์ํ์ฑ๋ ๋ฐ์ํ๋ค.
CommonJS์ AMD(Asynchronous Module Definition) ์คํ์ผ์ ๋ชจ๋ ์์คํ ์ ์ฌ์ฉํ๋ฉด ํ์ผ๋ณ๋ก ๋ชจ๋์ ๋ง๋ค ์ ์์ง๋ง, ๋ชจ๋๋ก ๋ง๋ ํ์ผ์ ๋ฐ๋ก ์น ํ์ด์ง์ ๋ฃ์ด ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์๋ค. webpack์ผ๋ก ์ปดํ์ผํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์๋ ํํ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
webpack์ด๋ ํ๋ JavaScript Application์ Static Module Bundler์ด๋ค. Webpack์ด ์คํ๋๋ค๋ฉด Dependencies Graph๋ฅผ ํตํด ํ์ํ ํํ์ ํ๋ ์ด์์ Bundle๋ก ์์ฑํ๋ค.
๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์ฌ๋ฌ๊ฐ์ ๋๋์ด์ ธ ์๋ ํ์ผ๋ค์ ํ๋์ ํ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋งํ๋ค. ๋ชจ๋ ๋ฒ๋ค๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ webpack, Parcel ๋ฑ์ด ์๋ค.
๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์ฌ๋ฌ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ํ๋์ ํ์ผ๋ก ๋ฌถ์ด์ ํ๋ฒ์ ์์ฒญ์ ํตํด ๊ฐ์ง๊ณ ์ฌ ์ ์๊ฒํ๊ณ , ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค. ๋ํ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ถํ๊ณ ์ต์ ํ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ก๋ฉ ์๋๋ฅผ ์ค์ผ ์ ์๋ค.
์ ๋ง์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ํ๋์ ํ์ผ๋ก ๋ฌถ์ธ๋ค๋ฉด, ์ด๊ธฐ ๋ก๋ฉ ์๋๊ฐ ์ด๋ง์ด๋งํด์ง ์ ์์ง๋ง, ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฒญํฌ, ์บ์, ์ฝ๋ ์คํ๋ฆฟ ๊ฐ๋ ์ ๋์ ํ๋ค.
์ฝ๊ฒ ํ์ด ์ค๋ช ํ๋ฉด ํ์ผ ๊ฐ์ ์ฐ๊ด ๊ด๊ณ๋ฅผ ํ์ ํด ํ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ๋ก ๋ณํํด ์ฃผ๋ ๋ณํ ๋๊ตฌ์ด๋ค.
์ํธ๋ฆฌ ํ์ผ์ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์๋ก ์์กด ๊ด๊ณ๊ฐ ์๋ ๋ค์ํ ๋ชจ๋์ ์ฌ์ฉํ๋ ์์์ ์ด ๋๋ ํ์ผ์ด๋ค. webpack์์ ์ปดํ์ผ์ ์ํธ๋ฆฌ ํ์ผ์ ์์์ผ๋ก ์์กด ๊ด๊ณ์ ์๋ ๋ชจ๋์ ์ฎ์ด์ ํ๋์ ๋ฒ๋ค ํ์ผ์ ๋ง๋๋ ์์ ์ด๋ค. JavaScript๋ฅผ ์ฌ์ฉํ๋ HTML ์ฝ๋์์๋ ์ปดํ์ผ ๊ฒฐ๊ณผ๋ก ๋ง๋ค์ด์ง ๋ฒ๋คํ์ผ๋ง ํฌํจํ๋ฉด๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ํธ๋ฆฌ ํ์ผ์ด ์ฌ๋ฌ๊ฐ์ธ ๊ฒฝ์ฐ ๊ฐ๊ฐ์ ์ํธ๋ฆฌ ํ์ผ๋ง๋ค ๋ฒ๋คํ์ผ์ด ์์ฑ๋๋ค.
Bundle์ด๋?
์ํํธ์จ์ด ๋ฐ ์ผ๋ถ ํ๋์จ์ด์ ํจ๊ป ์๋ํ๋๋ฐ ํ์ํ ๋ชจ๋ ๊ฒ์ ํฌํจํ๋ Package์ด๋ค. ๊ฐ๊ฐ์ ๋ชจ๋๋ค์ ๋ํด ์์กด์ฑ ๊ด๊ณ๋ฅผ ํ์ ํ์ฌ ํ๋ ๋๋ ์ฌ๋ฌ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋ณผ ์ ์๋ค.
์์ฑ
์ค๋ช
entry
์นํฉ์ผ๋ก ๋น๋(๋ณํ)ํ ๋์ ํ์ผ์ ์ง์ ํ๋ ์์ฑ. entry๋ก ์ง์ ํ ํ์ผ์ ๋ด์ฉ์๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง๊ณผ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋ฉํ๋ ๋ก์ง์ด ๋ค์ด๊ฐ๋ค.
output
์นํฉ์ผ๋ก ๋น๋ํ ๊ฒฐ๊ณผ๋ฌผ์ ์์น์ ํ์ผ ์ด๋ฆ ๋ฑ ์ธ๋ถ ์ต์ ์ ์ค์ ํ๋ ์์ฑ
loader
์นํฉ์ผ๋ก ๋น๋ํ ๋ HTML, CSS, PNG ํ์ผ ๋ฑ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํํ๊ธฐ ์ํด ํ์ํ ์ค์ ์ ์ ์ํ๋ ์์ฑ
plugin
์นํฉ์ผ๋ก ๋น๋ํ๊ณ ๋์จ ๊ฒฐ๊ณผ๋ฌผ์ ๋ํด ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์์ฑ ex) ๊ฒฐ๊ณผ๋ฌผ์ ์ฌ์ด์ฆ๋ฅผ ์ค์ด๊ฑฐ๋, ๊ฒฐ๊ณผ๋ฌผ์ ๊ธฐํ CSS, HTML ํ์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ธฐ๋ฅ
resolve
์นํฉ์ผ๋ก ๋น๋ํ ๋ ํด๋น ํ์ผ์ด ์ด๋ป๊ฒ ํด์๋๋์ง ์ ์ํ๋ ์์ฑ ex) ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋ฉํ ๋ ๋ฒ์ ์ ์ด๋ค๊ฑธ๋กํ ์ง, ํ์ผ ๊ฒฝ๋ก๋ ์ด๋๋ก ํ ์ง ์ ์
ํฌ๊ณ ๋ณต์กํ๋ฉฐ ๋ค์ํ ๋ฆฌ์์ค๋ค์ด ๋ค์ด์๋ ํ๋ก์ ํธ์๋ webpack์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
Grunt, Gulp๋ ์ค๋ก์ง ๋ฆฌ์์ค๋ค์ ๋ํ ํด๋ก ์ฌ์ฉ๋๋ฉฐ dependency graph์ ๋ํ ๊ฐ๋ ์ด ์๋ค.
Browsify๋ ๋น์ทํ ๋๊ตฌ์ด์ง๋ง ์๋๋ฉด์์ webpack์ด ๋ ์ข๋ค.
๋ค์๊ณผ ๊ฐ์ด module.exports ์์ฑ์ ์ธ๋ถ์ ๋ฐฐํฌํ ๋ชจ๋์ ์ ๋ฌํด ๋ชจ๋์ ์ ์ํ๋ค.
testmodule.js
ํ์ผ์ require()
ํจ์์ ๊ฒฝ๋ก๋ฅผ ์ ๋ฌํจ์ผ๋ก์จ ๋ชจ๋์ ์ฌ์ฉํ ์ ์๋ค.
์ฌ๋ฌ ๋ชจ๋์ ํฉ์น๊ฑฐ๋ ์ค์ฒฉํด์ ๋ชจ๋์ ๋ก๋ฉํ ์ ์๋ค.
hello.js์ world.js๋ฅผ ํฉ์น ๋ชจ๋์ธ greeting.js๋ฅผ ๋ก๋ฉํด ๋ธ๋ผ์ฐ์ ์์ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๊ฐ ๋ํ๋๊ฒ ๊ตฌํํ ์ ์๋ค.
๋ชจ๋์ ์ ์ํ๊ณ ๋ชจ๋์ ์ฌ์ฉํ๋๋ก ๋ก๋ฉํ๋ ๋ฐฉ๋ฒ์ ์ด๋ ต์ง ์๋ค. ๋ค๋ง ๋ชจ๋๋ก ๋ง๋ ํ์ผ์ ๋ฐ๋ก ์น ํ์ด์ง์ ๋ฃ์ด ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์๋ค. webpack์ผ๋ก ์ปดํ์ผํด ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์๋ ํํ๋ก ๋ฐ๊ฟ์ผํ๋ค.
--watch
์ต์
์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ํ์ผ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ณ๊ฒฝ๋ ๋ชจ๋์ ์๋์ผ๋ก ๋ค์ ์ปดํ์ผํ๋ค.
์ปดํ์ผ ๊ณผ์ ์์ ๊ฐ ๋ชจ๋์ ํจ์๋ก ๊ฐ์ธ์ง๋ค.
์ฌ๊ธฐ์ greeting์ ์ ์ญ ๋ณ์์ด์ง๋ง webpack์ผ๋ก ๋ชจ๋์ด ์ปดํ์ผ ๋ ํ์๋ ์ง์ญ ๋ณ์๊ฐ ๋๋ค.
CLI(Command Line Interface)๋ก webpack์ ์คํํด ์ปดํ์ผํ ๋ ์ํธ๋ฆฌ ํ์ผ์ด ๋ง๊ฑฐ๋ ์ต์ ์ด ๋ง์ผ๋ฉด ์ ๋ ฅํ๊ธฐ๊ฐ ๋ถํธํ๋ค. ์ค์ ํ์ผ์ ๋ง๋ค์ด ์ปดํ์ผํ๋ฉด ์ด๋ฌํ ๋ถํธํจ์ ์ค์ผ ์ ์๋ค.
๋ค์๊ณผ ๊ฐ์ด webpack.config.js
ํ์ผ์ ์์ฑํด ์ ์ฅํ๋ค.
๊ฐ๋จํ๊ฒ ์์ ๊ฐ์ด ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด ์ปดํ์ผ์ด ์คํ๋๋ฉฐ, --watch
์ต์
์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ์๋์ผ๋ก ๋ฐ์ํ๋ ค ํ ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด๋๋ค.
webpack์ loader๋ ๋ค์ํ ๋ฆฌ์์ค๋ฅผ JavaScript์์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ํํ๋ก ๋ก๋ฉํ๋ ๊ธฐ๋ฅ์ด๋ค. loader๋ webpack์ ํน์ง์ ์ธ ๊ธฐ๋ฅ์ด๋ฉด์ ๊ฐ๋ ฅํ ๋๊ตฌ๋ก ๋ง๋๋ ๊ธฐ๋ฅ์ด๋ค.
๋ค์๊ณผ ๊ฐ์ด loader์ ์ข ๋ฅ์ ๋ฐ๋ผ ๋ค์ํ ํํ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
์๋ฅผ ๋ค์ด, template ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ handlebars loader์ธ handlebars-loader ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ณผ ๊ฒ์ด๋ค.
handlebars ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋ ํ๊ฒฝ์์ ์งํํด์ผํ๋ค.
handlebars-loader ์ค์น๊ฐ ์๋ฃ๋๋ฉด webpack.config.js
ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ก๋ ๊ด๋ จ ์ค์ ์ ์ถ๊ฐํ๋ค.
test-tmpl.html
ํ์ผ์ ์์ฑํด์ค๋ค.
require()
ํจ์๋ก ํ
ํ๋ฆฟ ํ์ผ์ ๋ก๋ฉํ ๊ฒฐ๊ณผ๋ handlebars.compile()
ํจ์๋ฅผ ๊ฑฐ์ณ ๋ฐํ๋ ๊ฒฐ๊ณผ๋ก, ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ์
ํด ๋ฐ์ดํฐ์ ๊ฒฐํฉ๋ html ์ฝ๋๋ฅผ ์ป์ ์ ์๋ค.
webpack์ ์ฌ์ฉํ ๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ ์ฝ๋๋ webpack์ผ๋ก ์ปดํ์ผ๋ ์ฝ๋์ด๋ค. webpack์ ์์ค ๋งต ์ค์ ์ ์ฌ์ํ๋ฉด ์ปดํ์ผ๋ ํ์ผ์์๋ ์๋ ํ์ผ ๊ตฌ์กฐ๋ฅผ ํ์ธํ ์ ์๋ค. ๋ธ๋ผ์ฐ์ ์์ ์น ํ์ด์ง๋ฅผ ์ด๊ณ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์คํํ๋ฉด ์ฝ๋๋ฅผ ์์ฑํ ๋ ํ์ผ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ ์๊ณ , ์ค์ ์์ฑํ ์ฝ๋์ ์ ๊ทผํ ์ ์๋ค. (webpack://) ๋๋ฉ์ธ ์๋์ ๋ชจ๋์ ๊ตฌ์ฑํ๋ ํ์ผ ๊ตฌ์กฐ๊ฐ ๋ํ๋๋ค.