โ“ Information


โ— Relevant data

๐Ÿ“ฆ Information Resources

vercel-blog: Webpack vs Vite

๐Ÿ”ฐ Content ->

1๏ธโƒฃ Intro

  • Webpack ๊ณผ Vite ๋น„๊ต
  • A preview of whatโ€™s to come

2๏ธโƒฃ Overview

Webpack์ด ๋А๋ฆฐ ์ด์œ 

๋ณต์žกํ•œ ์„ค์ • ๋ฐ ๊ตฌ์„ฑ

Webpack์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ: ๋ณต์žกํ•œ ์„ค์ • ํŒŒ์ผ๋กœ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์ดˆ๊ธฐ ์„ค์ • ๋ฐ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›€. ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์„ค์ • ํŒŒ์ผ์ด ๋งค์šฐ ๋ณต์žกํ•ด์ ธ ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง.

ํฐ ๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ์—์„œ์˜ ํ•œ๊ณ„

  • webpack: ํฐ ๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ์—์„œ ๋นŒ๋“œ ์†๋„๊ฐ€ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๋ชจ๋“œ์—์„œ ์ „์ฒด ๋ฒˆ๋“ค๋ง์„ ์ˆ˜ํ–‰ํ•จ
  • Vite: ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ES ๋ชจ๋“ˆ์„ ์ง์ ‘ ๋กœ๋“œํ•˜์—ฌ ๋น ๋ฅธ ์†๋„๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์—์„œ๋Š” Rollup์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค์„ ์ƒ์„ฑํ•จ
  • Rollup: ES ๋ชจ๋“ˆ์— ์ตœ์ ํ™”๋œ ์„ค๊ณ„์™€ ํšจ์œจ์ ์ธ Tree-Shaking, ๊ฐ„๋‹จํ•œ Plugin ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๋น ๋ฅธ ๋นŒ๋“œ ์†๋„๋ฅผ ์ œ๊ณต ์ด๋Ÿฌํ•œ ์ฐจ์ด์ ๋“ค ๋•Œ๋ฌธ์—, ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Vite๊ฐ€ ๊ฐœ๋ฐœ ์†๋„์™€ ๋นŒ๋“œ ์ตœ์ ํ™” ์ธก๋ฉด์—์„œ ๋” ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ์ผ ํฌํ‚ค ๋ฐ ๋กœ๋”ฉ ์‹œ๊ฐ„ ๋ฌธ์ œ

Webpack

  • ์ „์ฒด ๋ฒˆ๋“ค๋ง:
    ๋ชจ๋“ˆ์„ ํ•˜๋‚˜์˜ ๋ฒˆ๋“ค ํŒŒ์ผ๋กœ ๋ฌถ๋Š” ๋ฐฉ์‹์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•จ. ์ด๋Š” ๋กœ๋”ฉ ์‹œ์ ์— ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฒˆ๋“ค ํŒŒ์ผ์ด ์ปค์งˆ์ˆ˜๋ก ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง.
  • Code-Splitting: ๋ฒˆ๋“ค์„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฒญํฌ๋กœ ๋‚˜๋ˆ„์–ด ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ์Œ. ๊ทธ๋Ÿฌ๋‚˜ ์„ค์ •์ด ๋ณต์žกํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์žฌ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉด ์„ฑ๋Šฅ ์ตœ์ ํ™” ํšจ๊ณผ๊ฐ€ ์ œํ•œ์ ์ผ ์ˆ˜ ์žˆ์Œ.
  • Tree-Shaking: ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐ. ํ•˜์ง€๋งŒ ์™„๋ฒฝํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์˜์กด์„ฑ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Œ.

Vite

  • ES ๋ชจ๋“ˆ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ: ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ES ๋ชจ๋“ˆ์„ ์ง์ ‘ ๋กœ๋“œํ•˜์—ฌ ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ๊ฐ€์ ธ์˜ด. ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„ ๋‹จ์ถ•.
  • ํ”„๋กœ์ ์…˜ ๋นŒ๋“œ: Rollup ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค ์ƒ์„ฑ. Rollup์€ ES ๋ชจ๋“ˆ์— ์ตœ์ ํ™” ๋˜์–ด์žˆ์œผ๋ฉฐ, ํšจ์œจ์ ์ธ Tree-Shaking๊ณผ Code-Splitting์„ ํ†ตํ•ด ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”.
  • Lazy-Loading: ์ง€์—ฐ ๋กœ๋”ฉ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ์‹œ์ ์—๋งŒ ๋ชจ๋“ˆ์„ ๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›. ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„ ๋‹จ์ถ•.

Plugin ๋ฐ Loader ์‚ฌ์šฉ์˜ ๋ณต์žก์„ฑ

Webpack:

  • ๋‹ค์–‘ํ•œ Plugin ๋ฐ Loader: ๋งค์šฐ ํ’๋ถ€ํ•œ Plugin๊ณผ Loader ์ƒํƒœ๊ณ„๋ฅผ ๊ฐ€์ง. ์ด๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ํ˜•์‹์„ ๋ณ€ํ™˜ํ•˜๊ณ , ์ฝ”๋“œ ์••์ถ•, Tree-Shaking, Code-Splitting, ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ.
  • ๋ณต์žกํ•œ ์„ค์ •: ๊ฐ Plugin๊ณผ Loader๋Š” ํŠน์ • ์„ค์ •์„ ์š”๊ตฌํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋กœ๋”๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ์„ค์ • ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.
  • ์˜์กด์„ฑ ๊ด€๋ฆฌ: ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Plugin๊ณผ Loader๊ฐ„์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š”๊ฒƒ์ด ์–ด๋ ต๊ณ , ์„ค์ • ํŒŒ์ผ์ด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ.

Vite:

  • ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ธ Plugin ์‹œ์Šคํ…œ: Rollup ์˜ Plugin ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, Rollup Plugin์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ. Vite ์ „์šฉ Plugin๋„ ์‰ฝ๊ฒŒ ์ž‘์„ฑ ๊ฐ€๋Šฅ.
  • ๋น ๋ฅธ ์„ค์ •: Plugin๊ณผ Loader ์„ค์ •์ด ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ . ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐ„์˜ ์ถฉ๋Œ์ด ์ ๊ณ , ์„ค์ • ํŒŒ์ผ์ด ๊ฐ„๊ฒฐํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์›€.
  • ๋ชจ๋“ˆ ๋ฐฉ์‹: ๊ธฐ๋ณธ์ ์œผ๋กœ ES ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ๊ฐ„์˜ ์˜์กด์„ฑ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•จ.

Vite๊ฐ€ ๋น ๋ฅธ ์ด์œ 

TL;DR

ESBuild์™€ Pollup์˜ ์žฅ์ ์„ ํ•ฉ์ณค๋‹ค.

ESBuild

์ด์ „๊นŒ์ง€ ๋ชจ๋“  ๋ฒˆ๋“ค๋Ÿฌ๋Š” JS ๊ธฐ๋ฐ˜์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ JS๋Š” ์„ฑ๋Šฅ์ƒ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. ESBuild๋Š” Go ๋กœ ์ œ์ž‘๋˜์–ด 10๋ฐฐ ๋น ๋ฅด๋‹ค.

Vite ํŠน์ง•

  • native ES modules ๊ธฐ๋ฐ˜์˜ ๊ฐ•๋ ฅํ•œ ๊ฐœ๋ฐœ์„œ๋ฒ„
  • ESBuild๋กœ ํŒŒ์ผ๋“ค์„ ํ†ตํ•ฉํ•˜๊ณ  Rollup์„ ํ†ตํ•ด ๋ฒˆ๋“ค๋ง:
    • ๊ฐœ๋ฐœ ์ค‘์—๋Š” ESBuild๋กœ ๋น ๋ฅด๊ฒŒ ๋ชจ๋“ˆ ๋ณ€ํ™˜/ํ†ตํ•ฉ๋งŒ ํ•จ.
    • ๋นŒ๋“œ์‹œ์—๋Š” Rollup์„ ์‚ฌ์šฉํ•ด ์ตœ์ข… ๋ฒˆ๋“ค๋ง์„ ํ•จ.
  • ๋ชจ๋“  CommonJS ๋ฐ UMD ํŒŒ์ผ์„ ESM์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜ํ•จ
  • ๋ณ„๋„ ์„ค์ • ์—†์ด ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค import ๊ฐ€๋Šฅ
  • CSS ๋นŒ๋“œ ์ตœ์ ํ™”(Direct Import ๊ตฌ๋ฌธ์— ๋Œ€ํ•ด Preload ํ•˜๋„๋ก ํ•จ์œผ๋กœ์จ ๋„คํŠธ์›Œํฌ ๋น„์šฉ ์ค„์ž„)

์ฃผ์š” ์ฐจ์ด์ 

์„ค์ • ๋ณต์žก์„ฑ

  • Webpack: ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์„ค์ •์ด ๋ณต์žกํ•˜๊ณ  ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ์Œ. ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ๋กœ๋” ๊ฐ„์˜ ์˜์กด์„ฑ ๋ฐ ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ๋งŽ์Œ.
  • Vite: ์„ค์ •์ด ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ . ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•˜๋ฉฐ, Rollup์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅ.

์ƒํƒœ๊ณ„

  • Webpack: ํ’๋ถ€ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ๋กœ๋” ์ƒํƒœ๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  • Vite: Rollup ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ Vite ์ „์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด, ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ ํƒ์˜ ํญ์ด ๋„“์Œ.

์‚ฌ์šฉ ํŽธ์˜์„ฑ

  • Webpack: ์„ค์ •์ด ๋ณต์žกํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ•๋ ฅํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ๊ฐ€๋Šฅ.
  • Vite: ์„ค์ •์ด ๊ฐ„๋‹จํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋กœ๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

๊ฒฐ๋ก 

๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Vite๊ฐ€ ๊ฐœ๋ฐœ ์†๋„์™€ ๋นŒ๋“œ ์ตœ์ ํ™” ์ธก๋ฉด์—์„œ ๋” ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Webpack์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ๊ฐ•๋ ฅํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์ ํ•ฉ