Y J S

Webpack๋กœ ๋นŒ๋“œ ํ™˜๊ฒฝ ๊ตฌ์„ฑํ•˜๋ฉฐ ์ดํ•ดํ•œ ์„ ํƒ ๊ธฐ์ค€

๋ฌธ์ œ/๋™๊ธฐ

  • React๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ "์™œ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” Vite, ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” Webpack์„ ์“ฐ๋Š”๊ฐ€?"๋ผ๋Š” ์˜๋ฌธ์ด ์ƒ๊น€.
  • ๊ณต์‹ ๋ฌธ์„œ์™€ ์ž๋ฃŒ๋ฅผ ์ฐธ๊ณ ํ•ด Webpack ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ์ง์ ‘ ๊ตฌ์„ฑํ•˜๋ฉฐ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ฒด๋“ํ•˜๊ณ , ๋„๊ตฌ ์„ ํƒ ๊ธฐ์ค€์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•จ.

ํ™˜๊ฒฝ

  • ํ”„๋กœ์ ํŠธ: ๋นŒ๋“œ ๋„๊ตฌ ํ•™์Šต/์‹ค์Šต์šฉ ์„ค์ • ๊ตฌ์„ฑ
  • ์Šคํƒ: React, TypeScript, Webpack 5, Babel
  • Node: LTS ๋ฒ„์ „(์˜ˆ: 18.x)

ํ•™์Šต/์‹ค์Šต ๊ณผ์ •

  1. ๊ธฐ๋ณธ ์„ค์ • ์ž‘์„ฑ
    • entry/output/mode/devtool/resolve๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐœ๋ฐœ/๋ฐฐํฌ ๋ชจ๋“œ๋ฅผ ์Šค์œ„์นญ.
    • ๊ฐœ๋ฐœ ์‹œ ์†Œ์Šค๋งต(devtool), ๋ณ„์นญ(alias)๋กœ import ๊ฒฝ๋กœ ๋‹จ์ˆœํ™”.
  2. ๋กœ๋” ๊ตฌ์„ฑ(ํŒŒ์ผ์„ JS๋กœ ๋ณ€ํ™˜)
    • babel-loader ๋˜๋Š” ts-loader๋กœ TS/JS ํŠธ๋žœ์ŠคํŒŒ์ผ.
    • css-loader+style-loader๋กœ CSS ๋ฒˆ๋“ค๋ง, asset modules๋กœ ์ด๋ฏธ์ง€/ํฐํŠธ ์ฒ˜๋ฆฌ.
  3. ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ์„ฑ(๋ฒˆ๋“ค ์ƒ๋ช…์ฃผ๊ธฐ ํ™•์žฅ)
    • HtmlWebpackPlugin์œผ๋กœ HTML ํ…œํ”Œ๋ฆฟ ์ฃผ์ž…, DefinePlugin์œผ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฃผ์ž….
    • ํ”„๋กœ๋•์…˜์—์„œ ์ •๋ฆฌ/์ตœ์ ํ™” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์šฉ.
  4. ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…/์บ์‹ฑ ์ „๋žต
    • splitChunks, runtimeChunk: 'single', contenthash๋กœ ์žฅ๊ธฐ ์บ์‹ฑ ์ตœ์ ํ™”.
    • ๋™์  import๋กœ ๋ผ์šฐํŠธ ๋‹จ์œ„ ์ฒญํฌ ๋ถ„๋ฆฌ.
  5. ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ๊ฐœ์„ 
    • webpack-dev-server์™€ HMR๋กœ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„ ํ™•๋ณด.

ํ•ต์‹ฌ ์„ค์ • ํฌ์ธํŠธ(์š”์•ฝ)

  • ๋กœ๋”๋Š” "๊ฐ ํŒŒ์ผ์„ JS๋กœ ๋ณ€ํ™˜"ํ•˜๋Š” ์—ญํ• , ํ”Œ๋Ÿฌ๊ทธ์ธ์€ "๋ฒˆ๋“ค๋ง ๊ณผ์ • ์ž์ฒด๋ฅผ ํ™•์žฅ".
  • ๊ฐœ๋ฐœ/๋ฐฐํฌ ์„ค์ • ๋ถ„๋ฆฌ(devtool, ์••์ถ•, ์บ์‹ฑ), ์•„ํ‹ฐํŒฉํŠธ ์ด๋ฆ„์— contenthash ์‚ฌ์šฉ.
  • ํฐ ์˜์กด์„ฑ์€ ์ฒญํฌ ๋ถ„๋ฆฌ, ๋ผ์šฐํŠธ๋ณ„ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์œผ๋กœ ์ดˆ๊ธฐ ๋กœ๋“œ ์‹œ๊ฐ„ ๋‹จ์ถ•.

์„ ํƒ ๊ธฐ์ค€: Vite vs Webpack

  • Vite
    • ๋„ค์ดํ‹ฐ๋ธŒ ESM+esbuild ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ ์„œ๋ฒ„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ„, ์„ค์ • ๋ณต์žก๋„ ๋‚ฎ์Œ.
    • SPA/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ ๋“ฑ ์ผ๋ฐ˜์ ์ธ ์š”๊ตฌ์— ์ ํ•ฉ, ์ตœ์ดˆ ์ƒ์‚ฐ์„ฑ ๋†’์Œ.
  • Webpack
    • ๋ ˆ๊ฑฐ์‹œ/๋ณต์žกํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•, ์ •๋ฐ€ํ•œ ๋ฒˆ๋“ค ํŒŒ์ดํ”„๋ผ์ธ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์œ ๋ฆฌ.
    • ์ปค์Šคํ…€ ๋กœ๋”/ํ”Œ๋Ÿฌ๊ทธ์ธ, ์„ธ๋ฐ€ํ•œ ์ฒญํฌยท์บ์‹ฑ ์ „๋žต, SSR/๋งˆ์ดํฌ๋กœํ”„๋ก ํŠธ์—”๋“œ ๋“ฑ ๊ณ ๊ธ‰ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๊ฐ•์ .

๊ฒ€์ฆ

  • ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๊ธฐ๋™/๋ณ€๊ฒฝ ๋ฐ˜์˜ ์‹œ๊ฐ„, HMR ์ฒด๊ฐ ์†๋„ ํ™•์ธ.
  • ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ์™€ ์ฒญํฌ ์ˆ˜, ์ดˆ๊ธฐ ๋กœ๋“œ ๋Œ€๋น„ ์ง€์—ฐ ๋กœ๋“œ ํšจ๊ณผ ๋น„๊ต.
  • ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์‹œ๊ฐ„ ๋ฐ ์บ์‹œ ์ ์ค‘ ์—ฌ๋ถ€(ํŒŒ์ผ ํ•ด์‹œ ๋ณ€๊ฒฝ) ํ™•์ธ.

๋ฐฐ์šด ์ 

  • ๋นŒ๋“œ ๋„๊ตฌ๋Š” "ํŒŒ์ผ ๋ณ€ํ™˜(๋กœ๋”)"๊ณผ "๊ณผ์ • ํ™•์žฅ(ํ”Œ๋Ÿฌ๊ทธ์ธ)"์˜ ์กฐํ•ฉ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ๋ณต์žก์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.
  • ์š”๊ตฌ์‚ฌํ•ญ์ด ๋‹จ์ˆœํ•˜๋ฉด Vite๋กœ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ณ , ํŒŒ์ดํ”„๋ผ์ธ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•ด์งˆ์ˆ˜๋ก Webpack์˜ ์žฅ์ ์ด ๋ถ€๊ฐ๋œ๋‹ค.
  • ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…/์บ์‹ฑ์„ ์—ผ๋‘์— ๋‘” ์„ค๊ณ„๊ฐ€ ์„ฑ๋Šฅ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋™์‹œ์— ๋Œ์–ด์˜ฌ๋ฆฐ๋‹ค.

์ฐธ๊ณ 

  • Webpack ๊ณต์‹ ๋ฌธ์„œ, Vite ๊ณต์‹ ๋ฌธ์„œ, ๊ฐ ๋กœ๋”/ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ ˆํผ๋Ÿฐ์Šค