ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ ๋ˆˆ๋ถ€์‹œ๊ฒŒ ๋ฐœ์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ์—๋Š” ๋‹จ์ˆœํžˆ <script> ํƒœ๊ทธ๋กœ JS ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ๋˜์—ˆ์ง€๋งŒ, ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ณ  ๋ชจ๋“ˆ ๋‹จ์œ„ ๊ฐœ๋ฐœ์ด ๋ณดํŽธํ™”๋˜๋ฉด์„œ โ€œ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ(Module Bundler)โ€๊ฐ€ ํ•„์ˆ˜ ๋„๊ตฌ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์ธ Webpack, Rollup.js, ๊ทธ๋ฆฌ๊ณ  ์ฐจ์„ธ๋Œ€ ๋ฒˆ๋“ค๋ง ๋„๊ตฌ๋กœ ๊ฐ๊ด‘๋ฐ›๋Š” Vite์— ๋Œ€ํ•ด ๋น„๊ตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ž€

๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ JavaScript, CSS, ์ด๋ฏธ์ง€ ๋“ฑ์˜ ํŒŒ์ผ์„ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„(Dependency Graph)๋กœ ๋ถ„์„ํ•ด ํ•˜๋‚˜์˜ ํŒŒ์ผ(๋˜๋Š” ์ตœ์ ํ™”๋œ ์—ฌ๋Ÿฌ ํŒŒ์ผ)๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

๋ชฉ์ : ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ.

์™œ ํ•„์š”ํ•œ๊ฐ€?

๐Ÿ‘€์†๋„ ๊ฐœ์„ : ํŒŒ์ผ์ด ๋งŽ์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•˜๋‚˜์”ฉ ์š”์ฒญํ•ด์•ผ ํ•ด์„œ ๋А๋ ค์š”. ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ํŒŒ์ผ์„ ํ•ฉ์ณ์„œ ์š”์ฒญ์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.
๐Ÿ‘€์ตœ์ ํ™”: ์“ฐ์ด์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐ(ํŠธ๋ฆฌ ์‰์ดํ‚น)ํ•˜๊ฑฐ๋‚˜, ์ฝ”๋“œ๋ฅผ ์••์ถ•ํ•ด ์šฉ๋Ÿ‰์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.
๐Ÿ‘€๊ฐœ๋ฐœ ํŽธ์˜์„ฑ: ์ตœ์‹  ๋ฌธ๋ฒ•(ES6, TypeScript ๋“ฑ)์„ ๊ตฌ๋ฒ„์ „ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜ํ•ด ์ค๋‹ˆ๋‹ค.


2. ์ฃผ์š” ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ

์ด์ œ ๋งŽ์ด ์“ฐ์ด๋Š” 3๊ฐ€์ง€ ๋„๊ตฌ๋ฅผ ๋น„๊ตํ•ด๋ณผ๊ฒŒ์š”

Webpack

๊ฐ€์žฅ ์œ ๋ช…ํ•˜๊ณ  ์˜ค๋ž˜๋œ ๋ฒˆ๋“ค๋Ÿฌ
์„ค์ •์ด ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ๋ณต์žกํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค
entry โ†’ loader โ†’ plugin โ†’ output ๊ตฌ์กฐ๋กœ ๋™์ž‘.

๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์•ˆ์ •์ ์ด๊ณ  ํ™•์žฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ
React, Vue ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ณธ ๋ฒˆ๋“ค๋Ÿฌ๋กœ ๋งŽ์ด ์“ฐ์˜€์Šต๋‹ˆ๋‹ค.
๋ณต์žกํ•œ ๋นŒ๋“œ(์ด๋ฏธ์ง€, CSS, JS, TS ๋‹ค ํ•ฉ์น˜๊ธฐ)์— ์œ ๋ฆฌ.

Rollup.js

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ์ž‘์— ๊ฐ•์ .
Webpack๋ณด๋‹ค ๋‹จ์ˆœํ•˜๊ณ  ๊ฐ€๋ณ์Šต๋‹ˆ๋‹ค.
ํŠธ๋ฆฌ ์‰์ดํ‚น(tree shaking) ๊ธฐ๋Šฅ์ด ๊ฐ•๋ ฅํ•ด์„œ, ์“ฐ์ง€ ์•Š๋Š” ์ฝ”๋“œ๊ฐ€ ๊ฑฐ์˜ ๋‚จ์ง€ ์•Š์•„์š”.

์˜ˆ์‹œ:
Lodash, D3.js ๊ฐ™์€ ์œ ๋ช…ํ•œ JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ Rollup์œผ๋กœ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค.
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ์ž‘ํ•  ๋•Œ๋Š” Webpack๋ณด๋‹ค Rollup์ด ๋” ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค.


Vite

์ฐจ์„ธ๋Œ€ ๋ฒˆ๋“ค๋Ÿฌ๋กœ, ์ตœ๊ทผ ๊ฐ€์žฅ ํ•ซํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ Rollup์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€๋งŒ, ๊ฐœ๋ฐœ ์„œ๋ฒ„๋Š” ESBuild(Go ์–ธ์–ด๋กœ ๋งŒ๋“  ์ดˆ๊ณ ์† ๋ฒˆ๋“ค๋Ÿฌ)๋ฅผ ์‚ฌ์šฉ


๐Ÿ”ด์žฅ์ : ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์†๋„๊ฐ€ ์—„์ฒญ ๋น ๋ฆ„ (๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์ฆ‰์‹œ ๋ฐ˜์˜ โ†’ HMR)

๐Ÿ”ด๋‹จ์ : ์•„์ง์€ Webpack๋งŒํผ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„๊ฐ€ ๋ฐฉ๋Œ€ํ•˜์ง€ ์•Š์Œ


์˜ˆ์‹œ:
Vue 3, React ์ตœ์‹  ํ…œํ”Œ๋ฆฟ์—์„œ ๊ธฐ๋ณธ ๋นŒ๋“œ ๋„๊ตฌ๋กœ ์ฑ„ํƒ๋จ
์Šคํƒ€ํŠธ์—…์ด๋‚˜ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์—์„œ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ๋•Œ ์ตœ์ 


ํšŒ์‚ฌ์—์„œ๋„ ๊ธฐ์กด์— React + Webpack ๊ธฐ๋ฐ˜์œผ๋กœ ์šด์˜ํ•˜๋˜ ์„œ๋น„์Šค๋ฅผ Vite๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฌด๊ฑฐ์›Œ์ง€๋ฉด์„œ Webpack ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ ์†๋„๊ฐ€ ์˜ค๋ž˜๊ฑธ๋ ค ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๋Š”๋ฐ์— 10๋ถ„ ์ •๋„๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ์•„์ฃผ ํž˜๋“  ์ƒํ™ฉ์ด ์ƒ๊ฒจ๋ฒ„๋ฆฐ๊ฑฐ์ฃ ! HMR ์†๋„๋„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•จ๊ณผ ์ตœ์‹  ์ƒํƒœ๊ณ„์™€ ํ˜ธํ™˜์„ฑ์„ ๊ณ ๋ คํ•ด์„œ ๋…ผ์˜ ๊ฒฐ๊ณผ vite๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •์„ ํ–ˆ์Šต๋‹ˆ๋‹ค



๊ทธ ๊ฒฐ๊ณผ, ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๊ตฌ๋™ ์†๋„๊ฐ€ 1๋ถ„ ๋ฏธ๋งŒ์œผ๋กœ ๋‹จ์ถ•, HMR์†๋„๋Š” ๋งํ•  ๊ฒƒ๋„ ์—†์ด ํ˜„์ €ํžˆ ๋นจ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, Vite๋Š” Webpack ๋Œ€๋น„ ํ›จ์”ฌ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ์ œ๊ณตํ–ˆ๊ณ , ํŒ€์˜ ์ƒ์‚ฐ์„ฑ์—๋„ ๊ธ์ •์ ์ธ ํšจ๊ณผ๋ฅผ ์คฌ์Šต๋‹ˆ๋‹ค.


+ Recent posts