๐Ÿ’ป์›น(Web)/React

๋นŒ๋“œ ๋„๊ตฌ ๋น„๊ต: Webpack๊ณผ Vite์˜ ์ฐจ์ด / ์ปดํŒŒ์ผ๊ณผ ๋นŒ๋“œ

stonesy 2024. 11. 10. 10:48
728x90

๐Ÿ“Œ๋นŒ๋“œ๋ž€?

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

 

โœ”๐Ÿ‘€ Webpack

๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ ์ค‘ ํ•˜๋‚˜๋‹ค. Webpack์€ CommonJS์™€ ES ๋ชจ๋“ˆ์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋ฉฐ, ๋ณ„๋„์˜ ๋ณ€ํ™˜ ์—†์ด๋„ require์™€ module.exports๋ฅผ ์ธ์‹ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด ๋ชจ๋“  ๋ชจ๋“ˆ์„ ๋ถ„์„ํ•˜๊ณ  ์˜์กด์„ฑ์„ ํŒŒ์•…ํ•˜๋ฉฐ ์ด๋กœ์ธํ•ด ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

โœ”๐Ÿ‘€ Vite

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

 

1. ์‚ฌ์ „ ๋ฒˆ๋“ค๋ง - ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๊ตฌ๋™์ด ๋น ๋ฅด๋‹ค!

๊ธฐ์กด ๋„๊ตฌ๋“ค์€ ๋จผ์ € ๋ฒˆ๋“ค๋ง ๋œ ํ›„์—์•ผ ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆ์ด ์ปค์งˆ์ˆ˜๋ก ๋‚ฎ์€ ์„œ๋ฒ„ ๊ตฌ๋™ ์†๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. Vite๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์˜์กด์„ฑ ๋“ฑ์„ ์‚ฌ์ „ ๋ฒˆ๋“ค๋ง์„ ํ•จ์œผ๋กœ์จ Webpack๊ณผ ๊ฐ™์€ ๊ธฐ์กด์˜ ๋ฒˆ๋“ค๋Ÿฌ ๋Œ€๋น„ 10~100๋ฐฐ ๋น ๋ฅธ ์†๋„๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

2. ๋‚ด๋ถ€์ ์œผ๋กœ ES Module์„ ์‚ฌ์šฉ - ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค!

Vite๋Š” ES Module์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ผ๋ถ€ ๋ฒˆ๋“ค๋ฆฌ์˜ ๊ธฐ๋Šฅ์„ ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

์ฆ‰, Vite๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๋งค์šฐ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค!

 

*๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ

Vite๋Š” ๊ฐœ๋ฐœํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

  1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ:
    • ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ๋Š” Hot Module Replacement (HMR)์„ ํ™œ์šฉํ•˜์—ฌ ๋น ๋ฅธ ๋ฐ˜๋ณต ๊ฐœ๋ฐœ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฝ”๋“œ๋Š” ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ ์œผ๋กœ ์ปดํŒŒ์ผ๋˜๊ณ  ์ œ๊ณต๋˜๋ฏ€๋กœ ๋น ๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญํ•˜๋Š” ํŒŒ์ผ์ด๋‚˜ ๋ชจ๋“ˆ์ด ๋ณ€๊ฒฝ๋  ๋•Œ, ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋‹ค์‹œ ์ปดํŒŒ์ผ๋˜๊ณ  ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค.
  2. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ:
    • ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์—์„œ๋Š” Vite๋Š” ํŠธ๋ฆฌ์‰์ดํ‚น(Tree-Shaking)๊ณผ ๊ฐ™์€ ์ตœ์ ํ™” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ตœ์ข… ๋ฒˆ๋“ค์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฝ”๋“œ ๋ถ„ํ• (Splitting)์„ ํ†ตํ•ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋Š” ๋ฒˆ๋“ค์— ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์€ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋œ ์ž‘์€ ๋ฒˆ๋“ค๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“Œ๊ธฐํƒ€: ์ปดํŒŒ์ผ๊ณผ ๋นŒ๋“œ

โœ”๐Ÿ‘€ ์ปดํŒŒ์ผ

์ปดํŒŒ์ผ์€ React ์ฝ”๋“œ(ํŠนํžˆ JSX ๋ฌธ๋ฒ•)๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” JavaScript ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. Babel๊ณผ ๊ฐ™์€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ JSX๋ฅผ ์ˆœ์ˆ˜ JavaScript๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ์˜ ์ฃผ์š” ๋ชฉ์ ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๊ณ ์ˆ˜์ค€์˜ ์ฝ”๋“œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

์ดํ›„, Polyfill์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์ตœ์‹  JavaScript ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋„๋ก ๋ณด์™„ ์ž‘์—…์ด ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ Babel์˜ @babel/preset-env๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์— ํ•„์š”ํ•œ Polyfill๋งŒ ์„ ํƒ์ ์œผ๋กœ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ์ „์ฒด Polyfill์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. Polyfill์„ ์ถ”๊ฐ€ํ•˜๋ฉด Promise๋‚˜ Array.prototype.includes์™€ ๊ฐ™์€ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ React ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

โœ”๐Ÿ‘€ ๋นŒ๋“œ

๋นŒ๋“œ๋Š” ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์ž์›์„ ์ตœ์ ํ™”ํ•˜๊ณ  ํŒจํ‚ค์ง•ํ•˜์—ฌ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด๋‹ค. Webpack์ด๋‚˜ Vite๊ฐ™์€ ๋นŒ๋“œ ๋„๊ตฌ๊ฐ€ ์ด ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ฝ”๋“œ ์••์ถ•, ํŠธ๋ฆฌ ์‰์ดํ‚น(Tree Shaking), ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…(Code Splitting) ๋“ฑ ์ตœ์ ํ™” ์ž‘์—…์„ ํฌํ•จํ•œ๋‹ค.

 

 

https://f-lab.kr/insight/web-development-build-tools-comparison

 

์›น ๊ฐœ๋ฐœ์—์„œ์˜ ๋‹ค์–‘ํ•œ ๋นŒ๋“œ ๋„๊ตฌ ๋น„๊ต: Webpack, Rollup, Vite

Webpack, Rollup, Vite์˜ ํŠน์ง•๊ณผ ์ฐจ์ด์ ์„ ๋น„๊ตํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

f-lab.kr

https://velog.io/@boyeon_jeong/vite%EA%B0%80-%EC%84%9C%EB%B2%84%EA%B0%80%EB%8F%99%EA%B3%BC-%ED%94%BC%EB%93%9C%EB%B0%B1%EA%B0%9C%EB%B0%9C-%EC%86%8D%EB%8F%84%EC%9D%B4-%EB%B9%A0%EB%A5%B8-%EC%9D%B4%EC%9C%A0

 

vite๊ฐ€ ์„œ๋ฒ„๊ฐ€๋™๊ณผ ํ”ผ๋“œ๋ฐฑ(๊ฐœ๋ฐœ ์†๋„)์ด ๋น ๋ฅธ ์ด์œ 

javascript ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง์œผ๋กœ์จ ๋ชจ๋“ˆ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ javascript๊ธฐ๋ฐ˜์˜ ๋„๊ตฌ๋Š” ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ์ธํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.์„œ๋ฒ„ ๊ฐ€๋™

velog.io

 

728x90