๐Ÿ˜ฑVite vs Webpack ๋ฌด์—‡์ด๋‹ค๋ฅธ๊ฐ€...

๋ฐ•์ฑ„์œคยท2024๋…„ 3์›” 29์ผ
2

๐Ÿ‘๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ...

๋ฒˆ๋“ค๋Ÿฌ๋ž€?

๋จผ์ € Vite์™€ Webpack์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „ ๋ฒˆ๋“ค๋Ÿฌ ๋ž€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„์•ผ ํ•  ๊ฑฐ ๊ฐ™๋‹ค.

๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€ ?

๋ฒˆ๋“ค๋Ÿฌ๋ž€? => ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๋„๊ตฌ

์ฒ˜์Œ์—” ๋ธŒ๋ผ์šฐ์ €๋Š” ES Modules๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ํ•œ๋‹ค.
์ฆ‰ ES6 import ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , ๊ทธ ๋ง์€ <script>๊ฐ„ ๋ชจ๋“ˆ์„ ๋ณด๋‚ผ ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

์ดˆ๊ธฐ์—๋Š” ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๋ช‡๊ฐœ๋งŒ ์ด์šฉํ•ด์„œ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ ์ ์  ์‚ฌ์ดํŠธ๊ฐ€ ์ปค์ง€๊ณ  ์ˆ˜์š”๊ฐ€ ๋งŽ์•„ ์งˆ ์ˆ˜๋ก ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์กŒ๋‹ค๊ณ  ํ•œ๋‹ค.

์ด์— ๋”ฐ๋ผ์„œ ์›น์‚ฌ์ดํŠธ ์ „์ฒ˜๋ฆฌ์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ์ ์  ๋งŽ์•„์ง€๊ฒŒ ๋˜์—ˆ๊ณ  ์ด๋ฅผ ์ž๋™ํ™” ํ•ด์ค„ ๊ฒƒ๋“ค์ด ํ•„์š”ํ•ด์ง€๊ฒŒ๋˜๋Š”๋ฐ, ์ด๋Ÿฐ์ด์œ ์—์„œ ์ด์ œ ์•Œ์•„๋ณผ Webpack,Vite๋“ฑ ๋ฒˆ๋“ค๋Ÿฌ๋“ค์ด ๋“ฑ์žฅ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

โœจWebpack

webpack์˜ ์žฅ์ 

1. ๊ฐ„ํŽธํ•œ ์„ค์ •

webpack์€ ํ•˜๋‚˜์˜ ์„ค์ •ํŒŒ์ผ์—์„œ entry ์™€ output์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ 
์–ด๋–ค plugin๊ณผ loader๋กœ ํŒŒ์ผ์„ ๋‹ค๋ฃฐ ๊ฑด์ง€ ๋ช…์‹œ ๋˜์–ด์žˆ๋‹ค.

์ด๋ฅผ ํ™•์ธํ•ด๋ณด๊ธฐ ์œ„ํ•ด testํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  webpack.config.js๋ฅผ ํ™•์ธ ํ•ด๋ณด์ž.
testํ”„๋กœ์ ํŠธ๋ฅผ CRA๋กœ ์ƒ์„ฑํ•ด๋ณด๋‹ˆ webpack.config.js๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.

npm run eject

์œ„์™€๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋‹ˆ

์ˆจ๊ฒจ์กŒ๋˜ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ 

webpack.config.js์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด entry์™€ output์„ค์ •์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

entry, output ์ด๋ž€?
webpack์€ ๋ฒˆ๋“ค๋ง ํ•˜๋Š”๊ณผ์ •์—์„œ ์ผ๋ฐ˜ ์ ์œผ๋กœ ์ง„์ž…์ ์ธ entry point๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ
์ด๋Š” ๋ณดํ†ต src/index.js๋กœ ์‚ผ๊ณ  ์ด entry point๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜์กด์ ์ธ ๋ชจ๋“ˆ๋“ค์„ ์ฐพ์•„์„œ ํ•˜๋‚˜์˜ ๋ฌถ์Œ์œผ๋กœ ๋ฒˆ๋“ค๋ง ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค๊ณ  ํ•œ๋‹ค.
์œ„์—์„œ ๋ณธ๊ฒƒ์ฒ˜๋Ÿผ webpack.config.js์—์„œ ์ง„์ž…์ ๊ณผ ๋ฌถ์–ด์ง„ ๋ฒˆ๋“ค๋“ค์ด ์ƒ์„ฑ๋  output์„ ์„ค์ • ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ํ•ด๋‹น ํŒŒ์ผ์—์„œ plugin๊ณผ loader๋„ ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋‹ˆ ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์žฅ์ ์ด๋‹ค.

2.plugin ๊ณผ loader

webpack์€ 2012๋…„ ์ฒ˜์Œ ๋‚˜์™”๋‹ค. ๋ฐ˜๋ฉด์— vite๋Š” 2021๋…„์— ๋“ฑ์žฅํ–ˆ๋Š”๋ฐ ๋” ์˜ค๋žœ์‹œ๊ฐ„ ์‚ฌ์šฉ๋œ ๋งŒํผ ๋‹ค์–‘ํ•œ plugin๊ณผ loader๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
loader๋ฅผ ํ†ตํ•ด์„œ ํŒŒ์ผ๋“ค์„ ๋ณ€ํ™˜, ๋ฒˆ๋“ค๋ง, ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  plugin์„ ํ†ตํ•ด์„œ output ํŒŒ์ผ์„ ํŠœ๋‹ํ•œ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ plugin, loader๊ฐ€ ์˜คํ”ˆ์†Œ์Šค์—์„œ๋„ ๊ฐœ๋ฐœ ๋˜๊ณ ์žˆ๋‹ค๊ณ  ํ•˜๋‹ˆ
์ด ๋˜ํ•œ webpack์˜ ์žฅ์ ์ด๋‹ค.

3.Code Splitting

Code Splitting์ด webpack์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์ด๋ผ๊ณ  ํ•œ๋‹ค.

Code Splitting์ด๋ž€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋“ค์„ ๋”ฐ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋ณ„๋„์˜ ๋ฒˆ๋“ค๋กœ ๋งŒ๋“œ๋Š” ๊ธฐ์ˆ ์ด๊ณ , ์ด๋ ‡๊ฒŒ ๋ถ„ํ• ๋œ ๋ฒˆ๋“ค์€ ํ•„์š”ํ•  ๋•Œ๋งŒ ๋กœ๋”ฉ๋˜๋ฏ€๋กœ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค๊ณ  ํ•œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด SplitChunksPlugin์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณตํ†ต ๋ชจ๋“ˆ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  , ๋™์  import๋ฅผ ํ†ตํ•ด ํ•„์š”ํ• ๋•Œ๋งŒ ๋กœ๋“œ๋ฅผ ํ•˜๋Š”๋“ฑ ๋” ๋งŽ์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๊ฑฐ ๊ฐ™์€๋ฐ ๋‹ค ์•Œ์•„๋ณด์ง„ ๋ชปํ–ˆ๋‹ค.

Rollup

๋ฒˆ๋“ค๋Ÿฌ๋“ค ๊ฒ€์ƒ‰ํ•˜๋‹ค๋ณด๋ฉด Rollup, esbuild์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ๋” ๋‚˜์˜ค๋Š”๋ฐ webpack, vite์™€๋Š” ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€? ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž.

Webpack๊ณผ Rollup์€ ๋ฒˆ๋“ค๋ง ๋ฐฉ์‹์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

  • Webpack: Webpack์€ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ํ•˜๋‚˜์˜ ๋ฒˆ๋“ค๋กœ ๋ฌถ๋Š”๋‹ค. ์ด๋Š” ๋ชจ๋“  ๋ชจ๋“ˆ์„ ํ‰๊ฐ€ํ•˜๊ณ  ๋ชจ๋“  ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•œ ํ›„์— ๋ฒˆ๋“ค์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • Rollup: Rollup์€ ES6 ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ด๋ฅผ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฒˆ๋“ค๋งํ•œ๋‹ค. Rollup์€ Tree-shaking๊ณผ ๊ฐ™์€ ์ตœ์ ํ™” ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•œ๋‹ค.

๋” ๋งŽ์€ ์ฐจ์ด์ ์ด ์กด์žฌํ•˜๋Š”๋ฐ ์ด๋กœ ์ธํ•ด Webpack์€ ์ฃผ๋กœ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋ฐœ ๋ฐ ๋นŒ๋“œ์— ์‚ฌ์šฉ๋˜๊ณ , Rollup์€ ์ฃผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํŒจํ‚ค์ง€์˜ ๋ฒˆ๋“ค๋ง์— ์‚ฌ์šฉ๋œ๋‹ค.

โœจVite

esbuild

Vite์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „์— ๋˜ ๋‹ค๋ฅธ ๋ฒˆ๋“ค๋Ÿฌ์ธ esbuild์— ๋Œ€ํ•ด ์ž ๊น ์•Œ์•„๋ณด์ž.

esbuild๋Š” ๋‹ค๋ฅธ ๋ฒˆ๋“ค๋Ÿฌ์™€ ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€?

esbuild๋Š” ๋‹ค๋ฅธ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ JavaScript๊ธฐ๋ฐ˜์œผ๋กœ ๋ฒˆ๋“ค๋ง ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ Go์–ธ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฒˆ๋“ค๋ง์„ ํ•œ๋‹ค. ์ด๋Š” ๊ธฐ์กด ์†๋„๋ณด๋‹ค ๋น ๋ฅธ ํฌํผ๋จผ์Šค๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

ํ•˜์ง€๋งŒ ์•„์ง ์„ค์ •์ด ์œ ์—ฐํ•˜์ง€ ๋ชปํ•˜๊ณ  ์•ˆ์ •์„ฑ ์ด์Šˆ๊ฐ€ ์žˆ์–ด์„œ ์ •์‹ ๋ฒ„์ „์ด Release๋˜์ง€ ๋ชปํ•œ ์ƒํƒœ๋ผ๊ณ  ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ esbuild์˜ ๋‹จ์ ์„ ๋ณด์™„์‹œํ‚จ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ Vite๋ผ๊ณ  ํ•œ๋‹ค.

Vite์˜ ์žฅ์ 

1.๋น ๋ฅธ ์†๋„

vite์˜ ๊ฐ€์žฅํฐ ์žฅ์ ์€ ๋น ๋ฅธ ์†๋„์ด๋‹ค. vite๋Š” esbuild๋ฅผ ํ†ตํ•ด ๋ฒˆ๋“ค๋ง์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ์†๋™์˜ ๋ฒˆ๋“ค๋ง์„ ์ œ๊ณตํ•œ๋‹ค.

๋˜ํ•œ Vite๋Š” ES ๋ชจ๋“ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋Š” ํŒŒ์ผ์„ ์‹ค์ œ๋กœ ๋ฒˆ๋“ค๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์„œ๋น™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘์‹œํ‚จ๋‹ค.
๋”ฐ๋ผ์„œ ๋ชจ๋“ˆ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ๋ชจ๋“ˆ๋งŒ ๋‹ค์‹œ ๋ฒˆ๋“ค๋งํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ ์„œ๋ฒ„์˜ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค.

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

๊ฐ„๋‹จํ•œ ๋น„๊ต

์†๋„๋ฉด์—์„œ Vite๊ฐ€ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— Vite๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์กฐ๊ฑด ์ ์œผ๋กœ ์ข‹์•„ ๋ณด์ด๋Š”๋ฐ
๊ผญ ๊ทธ๋Ÿฐ๊ฒƒ ๋งŒ์€ ์•„๋‹ˆ๋ผ๊ณ  ํ•œ๋‹ค.

Vite๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ์„ค์ •์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋นŒ๋“œ ์•ˆ์ •์„ฑ์ด ๋‚ฎ์•„์„œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๊ฒฌ๋„ ๋งŽ๋‹ค๊ณ  ํ•œ๋‹ค.

๋˜ํ•œ vite๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ <root>/index.html ํŒŒ์ผ์ด ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ์ง„์ž…์ ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ˆœ์ˆ˜ํ•œ JS ๋ฒˆ๋“ค์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋“œ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ‘‡์ฐธ๊ณ  ์ž๋ฃŒ

์ฐจ์„ธ๋Œ€ ๋ฒˆ๋“ค๋Ÿฌ ๋น„๊ต ๋ฐ ๋ถ„์„ (feat. webpack, rollup, esbuild, vite)

๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ž€? - Webpack vs Vite ๋ฌด์—‡์„ ์จ์•ผ ํ• ๊นŒ์š”?

profile
์™•์ด๋  ์ƒ์ธ๊ฐ€

0๊ฐœ์˜ ๋Œ“๊ธ€