Webpack
Webpack
ํ๋ก ํธ์๋ ํ๋ก์ ํธ์์ ๊ฐ์ฅ ์ค๋์ ๋ถํฐ ์ฌ์ฉ๋ ๋ฒ๋ค๋ฌ์ด์ ํ์ฌ๊น์ง๋ ๊ฐ์ฅ ์์ ์ ์ธ ๋ฒ๋ค๋ฌ
๋ค๋ฅธ ์ ๊ท ๋ฒ๋ค๋ฌ๋ค๋ ์นํฉ์ ๊ธฐ์ค์ผ๋ก ํจ, ๊ฑฐ์ ์คํ ๋ค๋
๊ฐ๋ฐ ํ๊ฒฝ์์์ ์ฑ๋ฅ ๋ฌธ์ ๋ก ์ธํด ๋ง์ ๋ค๋ฅธ ๋ฒ๋ค๋ฌ์ ๋์ ์ ๋ฐ๊ณ ์์
์ค์ ํ๋ก๋์ ์ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ ๋๋ฆฌ์ง ์๊ณ ์์ ์ ์
์นํฉํ์ด Vercel์ ํฉ๋ฅํ๋ฉด์ Rust ๊ธฐ๋ฐ์ผ๋ก
turbopack
์ด๋ผ๋ ์นํฉ ๋์ฒดํ์ ๋ง๋ค๊ณ ์์Module Federation ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ด MFA๋ฅผ ๋์ ํ ํ์ฌ๋ค์ Webpack์ ์ฌ์ฉํจ
Why webpack
๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ๋, ํ์ผ์ ์ถ๊ฐํ๊ธฐ ์ํด <script> ํ๊ทธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ํ์ผ๋ก ๋ถ๋ฆฌํ๊ณ , <script> ํ๊ทธ๋ฅผ ์ ์ ํ ์์๋ก ์ถ๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ผ์ด ๋ง์์ง๋ฉด ๋คํธ์ํฌ ๋ณ๋ชฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ ํ์ผ์ ํฉ์ณ์ ํฐ ํ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ํจ ๋ฒ์, ํฌ๊ธฐ, ๊ฐ๋ ์ฑ, ์ ์ง๋ณด์ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด IIFE (Immediately Invoked Function Expression), ์ฆ์ ์คํ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํจ์ ์ค์ฝํ๋ก ๋ฒ์๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ์ผ์ ํฉ์น ๋ ์ ํจ ๋ฒ์์ ๋ํ ๊ฑฑ์ ์์ด ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฐฉ์์ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ ์ต์ ํํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
Node.js์์๋ CommonJS๋ฅผ ์ฑํํ์ฌ ๋ชจ๋ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ธ๋ผ์ฐ์ ์์๋ ์ด๋ฅผ ์ฌ์ฉํ ์ ์์์ต๋๋ค. ๋ํ CommonJS์๋ ๋ผ์ด๋ธ ๋ฐ์ธ๋ฉ ์ง์์ด ์์ผ๋ฉฐ, ์ํ ์ฐธ์กฐ, ๋๊ธฐ์ ์ธ ๋ชจ๋ ํด์, ๋๋ฆฐ ๋ก๋ฉ ๋ฑ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Browserify, RequireJS, SystemJS ๋ฑ์ ๋ฒ๋ค๋ฌ์ ํด์ด ๋ฑ์ฅํ์ต๋๋ค.
ES Module์ด ECMAScript ํ์ค์์ ๊ณต์ ๊ธฐ๋ฅ์ด ๋์์ง๋ง, ์ด๊ธฐ์๋ ๋ธ๋ผ์ฐ์ ์ง์์ด ๋ถ์์ ํ๊ณ ๋ฒ๋ค๋ง์ด ์ฌ์ ํ ๋ ๋น ๋ฅธ ์ํฉ์ด์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ์ ๋ฒ๋ค๋ก ๋ฌถ์ ์ ์๋ (ESM, CommonJS ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํ) ๋๊ตฌ๊ฐ ํ์ํ์ต๋๋ค. webpack์ ์ฑ๋ฅ๊ณผ ๋ก๋ฉ ์๊ฐ์ ์ค์ํ๊ฒ ์๊ฐํ์ฌ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋๊ตฌ๋ก ๋ฑ์ฅํ์ต๋๋ค.
Entry
๋ฒ๋ค๋ง์ ์์ํ ์ง์ ์
์ํธ๋ฆฌํฌ์ธํธ๋ ์นํฉ์ด ๋ด๋ถ์ ๋ํ๋์ ๊ทธ๋ํ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉํด์ผํ๋ ๋ชจ๋
์นํฉ์ ์ํธ๋ฆฌํฌ์ธํธ๊ฐ ์ง๊ฐ์ ์ ์ผ๋ก ์์กดํ๋ ๋ค๋ฅธ ๋ชจ๋๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์๋ธ๋ค.
๊ธฐ๋ณธ๊ฐ์
src/index
์ด์ง๋ง webpack ์ค์ ์ผ๋ก entry ์์ฑ์ผ๋ก ์ปค์คํ ๊ฐ๋ฅ
Output
์์ฑ๋ ๋ฒ๋ค์ ๋ด๋ณด๋ผ ์์น์ ์ด ํ์ผ์ ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ์นํฉ์ ์๋ ค์ฃผ๋ ์ญํ
๊ธฐ๋ณธ ์ถ๋ ฅ ํ์ผ์
./dist/main.js
, ๋ก ์์ฑ๋๊ณ ๊ธฐํ ํ์ผ์./dist
๋ด๋ถ์ ์์ฑ๋๋๋ก ์ค์ ๋จ
__dirname ์ด๋?
๋ ธ๋์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ ๋ ๊ฐ
webpack.config.js์ด ๋์ฌ์๋ ์์น์ ํด๋๋ฅผ ์๋ฏธ
Loaders
์นํฉ์ ๊ธฐ๋ณธ์ ์ผ๋ก JSON, JS ํ์ผ๋ง ์ดํดํ๋ค.
๊ทธ ์ธ์ ํ์ผ ์ ํ๋ค์ ์ฒ๋ฆฌ๋ฅผ ๋ก๋์๊ฒ ์์
๋ก๋๋ฅผ ์ด์ฉํ๋ฉด ์นํฉ์ด ๋ค๋ฅธ ์ ํ์ ํ์ผ๋ค์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์นํฉ์ด ์ดํดํ ์ ์๋ ๋ชจ๋๋ก ๋ณํํ์ฌ ์ฌ์ฉ
๋ก๋๋ ์นํฉ ์ค์ ์ ๋ ๊ฐ์ง ์์ฑ์ ๊ฐ๋๋ค.
๋ณํ์ด ํ์ํ ์์ฑ๋ค์ ํ๋ณํ๋
test
(์ด๋ค ์ข ๋ฅ์ ํ์ผ์ ์ํฌํธํ์ ๋ ์ฌ์ฉํ ๋ก๋์ธ์ง ์ค์ )๋ณํ์ ์ํํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ก๋๋ฅผ ๊ฐ๋ฆฌํค๋
use
Plugins
ํ๋ฌ๊ทธ์ธ์ ํ์ฉํ์ฌ ๋ฒ๋ค์ ์ต์ ํํ๊ฑฐ๋, ์์ ์ ๊ด๋ฆฌ, ๋๋ ํ๊ฒฝ๋ณ์ ์ฃผ์ ๋ฑ ๊ด๋ฒ์ํ ์์ ์ ์ํ
ํ๋ฌ๊ทธ์ธ์
require()
๋ฅผ ํตํด ํ๋ฌ๊ทธ์ธ์ ์์ฒญํ๊ณ "plugins
" ๋ฐฐ์ด์ ์ถ๊ฐํด์ผ ํ๋ค.๋๋ถ๋ถ์ ํ๋ฌ๊ทธ์ธ์ ์ต์ ์ ํตํด ์ปค์คํ ๊ฐ๋ฅ
๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ํ๋ฌ๊ทธ์ธ์ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํ๋๋ก ์ค์ ํ ์ ์์ผ๋ฏ๋ก new ์ฐ์ฐ์๋ก ํธ์ถํ์ฌ ํ๋ฌ๊ทธ์ธ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ผํจ
html-webpack-plugin
์ ์์ฑ๋ ๋ชจ๋ ๋ฒ๋ค์ ์๋์ผ๋ก ์ฝ์ ํด ์ ํ๋ฆฌ์ผ์ด์ ์ฉ HTML์ ์์ฑ
Mode
mode ํ๋ผ๋ฏธํฐ๋ฅผ
development
,production
, ๋๋none
์ ์ค์ ํ๋ฉด ์นํฉ์ ๋ด์ฅ๋ ํ๊ฒฝ ๋ณ ์ต์ ํ๋ฅผ ํ์ฑํํจ๊ธฐ๋ณธ๊ฐ์
production
development
DefinePlugin
์process.env.NODE_ENV
๋ฅผ development๋ก ์ค์ ๋ชจ๋๊ณผ ์ฒญํฌ์ ์ ์ฉํ ์ด๋ฆ์ ์ฌ์ฉํจ
production
process.env.NODE_ENV
๋ฅผ production์ผ๋ก ์ค์ ๋ชจ๋๊ณผ ์ฒญํฌ,
FlagDependencyUsagePlugin
,FlagIncludedChunksPlugin
,ModuleConcatenationPlugin
,NoEmitOnErrorsPlugin
,TerserPlugin
๋ฑ์ ๋ํด ๊ฒฐ์ ์ ๋ง๊ธ์ด๋ฆ (mangled name)์ ์ฌ์ฉ ๊ฐ๋ฅ
none
๊ธฐ๋ณธ ์ต์ ํ ์ต์ ์์ ์ ์ธ
Tree shaking
์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ๋ฒ๋ค๋ง์์ ์ ๊ฑฐ
ES Module ๋ฐฉ์์ผ๋ก ์์ฑํ๋ฉด ๊ฐํธํ๊ฒ Tree Shaking ์ค์ ๊ฐ๋ฅ
lodash๋ ๋ด๋ถ์ ์ผ๋ก require๋ฅผ ์ฌ์ฉํ ํจํค์ง๋ก Tree shaking์ด ๋์ง ์๋๋ค.
lodash-es๋ ES Module ๋ฐฉ์์ผ๋ก ์ ๊ณต
esm์ ์ ์ ์ผ๋ก ๋์ํ๊ณ ๋น๋์์ ์ ๋ถ์(import, export๋ฅผ ๋ณด๊ณ ์์กด์ฑ ๊ด๊ณ ํ์ )ํ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ์ฝ๋๋ฅผ ํ์ ํด์ ์ ๊ฑฐ๊ฐ ๊ฐ๋ฅํ๋ค.
require ๊ตฌ๋ฌธ ์ฆ, ๋์ ์ผ๋ก ๋์ํ๋ CJS๋ ๋ถ์์์ ์ด ๋ฐํ์์ด๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ์ฝ๋๋ฅผ ํ์ ํ๋๊ฒ์ด ์ด๋ ค์
Transpiler
์นํฉ์ ๋ฒ๋ค๋งํ๋๋ฐ ์ง์คํ๊ธฐ ๋๋ฌธ์ ํธ๋์คํ์ผ์ ํ์ง ์๋๋ค.
๋ฒ๋ค๋ง ์ ์ ์ฒ๋ฆฌ ์์ ์ผ๋ก ๋ก๋๋ฅผ ํตํด ํธ๋์คํ์ผ ์์ ์ ์งํ
DevServer
์ผ๋ จ์ ๋ช ๋ น์ด๋ค๋ก ์ผ์ผ์ด ์ปค๋งจ๋ ์ ๋ ฅํ์ฌ ์์ ์ฌํญ์ ๋ฐ์ํ๋๊ฑฐ ๊ท์ฐฎ์
devServer ์ค์ ์ ํตํด ์์ ์ฌํญ์ ์์์ ๋ฐ์ํ๋๋ก ์ค์
hot reload replacement
webpack-dev-server
pnpm exec webpack serve
SourceMap
๋๋ฒ๊น ์ ํ ๋ ๋ฒ๋ค๋ง ๊ฒฐ๊ณผ๋ฌผ๋ก ์๋ ค์ฃผ๊ธฐ ๋๋ฌธ์ ์ฝ์ง ์๋ค.
์ด๋ด ๋ ์์ค๋งต์ ์ค์ ํ์ฌ ๊ฐ๋ฐํ๊ฒฝ์ ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฒดํฌ ๊ฐ๋ฅ
Production Mode์ธ ๊ฒฝ์ฐ๋ X
Serve
๊ฐ๋ฐ ์๋ฒ๋
public/
๊ณผdist/
๋ฅผ ์ ์ ํ ํ์ฉํด์ฃผ์ง๋ง ๋น๋ํ ๋๋ X๊ทธ๋์
public/
ํ์ผ๋ค์dist/
๋ก ์ฎ๊ฒจ์ฃผ๋ ์์ ์ด ํ์ํ๋ค.์ ์ฉ๋๋ก ์ฌ์ฉ๋๋ ํ๋ฌ๊ทธ์ธ์ด
copy-webpack-plugin
to
์์ฑ์ ์ง์ ํ์ง ์์ผ๋ฉด output์ผ๋ก ์ง์ ๋ path๋ก ์นดํผ๋๋ค.
Env
ํ๊ฒฝ๋ง๋ค ๋ค๋ฅธ ์ต์ ์ ์ง์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ฅผ ์ต์คํฌํธ ํ์ง๋ง๊ณ ์ค์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ํจ์๋ก ๋ง๋ค์.
์ฒซ๋ฒ์งธ ์ธ์๋ก
env
, ๋๋ฒ์งธ ์ธ์๋กmode
๊ฐ ๋ค์ด์จ๋ค.
Last updated