๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/JavaScript

Vite #1

by 2T1 2022. 12. 26.
๐Ÿ“ข์ด๊ธ€์€ Vite ๊ฐ€์ด๋“œ๋ฅผ ๋ณด๊ณ  ๊ฐœ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. 
 

Vite

Vite, ์ฐจ์„ธ๋Œ€ ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ ํˆด

vitejs-kr.github.io

 

Vite  /vit/

 

๋น ๋ฅด๊ณ  ๊ฐ„๊ฒฐํ•œ ๋ชจ๋˜ ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์— ์ดˆ์ ์„ ๋งž์ถฐ ํƒ„์ƒํ•œ ๋นŒ๋“œ ๋„๊ตฌ

  • Native ES Module์„ ๋„˜์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ์ œ๊ณต (ex. Hot Module Replacement)
  • ๋ฒˆ๋“ค๋ง ์‹œ, Rollup ๊ธฐ๋ฐ˜์˜ ๋‹ค์–‘ํ•œ ๋นŒ๋“œ ์ปค๋งจ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋†’์€ ์ˆ˜์ค€์œผ๋กœ ์ตœ์ ํ™”๋œ Static Resource ๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉฐ, Pre-configured๋ฅผ ์ œ๊ณต

๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ์ ํ™” ๋œ ์„ค์ • ์ œ๊ณต.

Plugin API ๋˜๋Š” JavaScript API ์‚ฌ์šฉ๊ฐ€๋Šฅ ( + TypeScript ์ง€์› )

 


 

์™œ Vite์ธ๊ฐ€ ?

๋ธŒ๋ผ์šฐ์ €์—์„œ ES Module ์„ ์ง€์›ํ•˜๊ธฐ ์ „ ๊นŒ์ง€, JavaScript Module ํ™”๋ฅผ Native Level ์—์„œ ์ง„ํ–‰ํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ์Œ.

๊ธฐ์กด ์‚ฌ์šฉ์ž๋“ค์€ Bundling์„ ํ†ตํ•œ ์šฐํšŒ์ ์ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ. ( Webpack, Rollup, Parcel… ๋“ฑ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฒˆ๋“ค๋ง ์ž‘์—… ์ง„ํ–‰ )

 

 

Bundling?

๋ชจ๋“ˆํ™” ๋œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ๋กœ ํ•œ๋ฐ ๋ฌถ์–ด ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์ž‘์—…

 

 

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐœ์ „์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•˜๋Š” JavaScript ๋ชจ๋“ˆ์ˆ˜๊ฐ€ ๊ทน์ ์œผ๋กœ ์ฆ๊ฐ€.

JavaScript ๊ธฐ๋ฐ˜์˜ ๋„๊ตฌ๋Š” ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒ.

์ข…์ข… ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ๊ฐ€๋™ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋น„ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  HMR์„ ์ด์šฉํ•˜๋”๋ผ๋„ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ ์ ์šฉ๊นŒ์ง€ ์ˆ˜ ์ดˆ ์ด์ƒ ์†Œ์š”.

๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•˜๋Š” ES Module ๋ฐ Native Language๋กœ ์ž‘์„ฑ๋œ JavaScript ๋„๊ตฌ ๋“ฑ์„ ํ™œ์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ.

 


 

Cold-Start ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•  ๋•Œ, ๋ฒˆ๋“ค๋Ÿฌ ๊ธฐ๋ฐ˜์˜ ๋„๊ตฌ์˜ ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด ๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ์— ๋Œ€ํ•ด ํฌ๋กค๋ง ๋ฐ ๋นŒ๋“œ ์ž‘์—…์ด ๋๋‚˜์•ผ๋งŒ ์‹ค์ œ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์—ˆ์Œ.

(* ์ฝœ๋“œ-์Šคํƒ€ํŠธ: ์ตœ์ดˆ๋กœ ์‹คํ–‰๋˜์–ด ์ด์ „์— ์บ์‹ฑํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธ)

 

 

Vite๋Š” dependencies์™€ source code๋กœ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜์—ฌ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ.

  • Dependencies: ๊ฐœ๋ฐœ ์‹œ ๊ทธ ๋‚ด์šฉ์ด ๋ฐ”๋€Œ์ง€ ์•Š์„ ์ผ๋ฐ˜์ ์ธ(Plain) JavaScript ์†Œ์Šค ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฒˆ๋“ค๋Ÿฌ๋กœ๋Š” ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ฐ™์ด ๋ช‡ ๋ฐฑ ๊ฐœ์˜ JavaScript ๋ชจ๋“ˆ์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๋งค์šฐ ํฐ ๋””ํŽœ๋˜์‹œ์— ๋Œ€ํ•œ ๋ฒˆ๋“ค๋ง ๊ณผ์ •์ด ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด์—ˆ๊ณ  ๋งŽ์€ ์‹œ๊ฐ„์„ ํ•„์š”๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.
    Vite์˜ ์‚ฌ์ „ ๋ฒˆ๋“ค๋ง ๊ธฐ๋Šฅ์€ **Esbuild**๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Go๋กœ ์ž‘์„ฑ๋œ Esbuild๋Š” Webpack, Parcel๊ณผ ๊ฐ™์€ ๊ธฐ์กด์˜ ๋ฒˆ๋“ค๋Ÿฌ ๋Œ€๋น„ 10-100๋ฐฐ ๋น ๋ฅธ ๋ฒˆ๋“ค๋ง ์†๋„๋ฅผ ๋ณด์˜€์ฃ .

  • Source code: JSX, CSS ๋˜๋Š” Vue/Svelte ์ปดํฌ๋„ŒํŠธ์™€ ๊ฐ™์ด ์ปดํŒŒ์ผ๋ง์ด ํ•„์š”ํ•˜๊ณ , ์ˆ˜์ • ๋˜ํ•œ ๋งค์šฐ ์žฆ์€ Non-plain JavaScript ์†Œ์Šค ์ฝ”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ํ• ๊นŒ์š”? (๋ฌผ๋ก  ์ด๋“ค ์—ญ์‹œ ํŠน์ • ์‹œ์ ์—์„œ ๋ชจ๋‘ ๋ถˆ๋Ÿฌ์˜ฌ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.)

Vite๋Š” Native ESM์„ ์ด์šฉํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ œ๊ณต : ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฒˆ๋“ค๋Ÿฌ ์—ญํ• ์„ ํ•จ.

์กฐ๊ฑด๋ถ€ ๋™์  import ์ดํ›„์˜ ์ฝ”๋“œ๋Š” ํ˜„์žฌ ํ™”๋ฉด์—์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉ์ด ๋˜์–ด์•ผ๋งŒ ์ฒ˜๋ฆฌ.

(๋ธŒ๋ผ์šฐ์ €์˜ ํŒ๋‹จ ์•„๋ž˜ ํŠน์ • ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์š”์ฒญํ•˜๋ฉด ์ด๋ฅผ ์ „๋‹ฌ)

 

 


 

๊ธฐ์กด ๋ฒˆ๋“ค๋Ÿฌ ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ์€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ๋งˆ๋‹ค ๋ฒˆ๋“ค๋ง ๊ณผ์ •์„ ๋‹ค์‹œ ๊ฑฐ์ณ์•ผ ํ–ˆ์Œ.

์„œ๋น„์Šค๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์†Œ์Šค ์ฝ”๋“œ ๊ฐฑ์‹  ์‹œ๊ฐ„ ๋˜ํ•œ ์„ ํ˜•์ ์œผ๋กœ ์ฆ๊ฐ€.

 

์ผ๋ถ€ ๋ฒˆ๋“ค๋Ÿฌ๋Š” ์‹ค์ œ๋กœ ๊ฐฑ์‹ ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” ํŒŒ์ผ๋งŒ ์ƒˆ๋กœ ๋ฒˆ๋“ค๋งํ•˜๊ฒŒ ํ•˜์˜€์œผ๋‚˜, ์ด ๋˜ํ•œ ์ฒ˜์Œ์—๋Š” “๋ชจ๋“  ํŒŒ์ผ”์— ๋Œ€ํ•œ ๋ฒˆ๋“ค๋ง์„ ์ง„ํ–‰ํ•ด์•ผ ํ–ˆ์—ˆ์Œ.

์ด๊ฒƒ์— ๋Œ€์•ˆ์œผ๋กœ HMR์„ ์‚ฌ์šฉํ–ˆ์œผ๋‚˜ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง„ ๋ชปํ•จ.

(* HMR: ์•ฑ์„ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ๊ฐฑ์‹ ๋œ ํŒŒ์ผ๋งŒ์„ ๊ต์ฒดํ•˜๋Š”(Replacement) ๋ฐฉ์‹. ๋‹ค๋งŒ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์•ฑ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์„ ํ˜•์ ์œผ๋กœ ๊ฐฑ์‹ ์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•œ๋‹ค.)

 

๋ฌผ๋ก  Vite๋„ HMR์„ ์ง€์›ํ•˜์ง€๋งŒ, ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์•„๋‹Œ ESM์„ ์ด์šฉํ•˜์—ฌ ์ง€์›ํ•œ๋‹ค.

 

ํŠน์ • ๋ชจ๋“ˆ์ด ์ˆ˜์ •๋˜๋ฉด Vite๋Š” ์ˆ˜์ •๋œ ๋ชจ๋“ˆ๊ณผ ๊ด€๋ จ๋œ ๋ถ€๋ถ„๋งŒ ๊ต์ฒดํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์š”์ฒญํ•˜๋ฉด ๊ต์ฒด๋œ ๋ชจ๋“ˆ์„ ์ „๋‹ฌํ•  ๋ฟ์ž„.

์ „ ๊ณผ์ •์—์„œ ์™„๋ฒฝํžˆ ESM์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฑ ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ๋„ HMR์„ ํฌํ•จํ•œ ๊ฐฑ์‹  ์‹œ๊ฐ„์—๋Š” ์˜ํ–ฅ์ด ์—†์Œ.

 

๋˜ํ•œ HTTP ํ—ค๋”๋ฅผ ์ด์šฉํ•˜์—ฌ ์†Œ์Šค์ฝ”๋“œ๋Š” 304 Not Modified๋กœ dependency๋Š” ache-Control: max-age=31536000,immutable ์„ ์ด์šฉํ•˜์—ฌ ์บ์‹œ๋˜๋„๋ก ํ•จ์œผ๋กœ์จ, ์š”์ฒญ์„ ์ตœ์†Œํ™”ํ•˜์—ฌ ํผํฌ๋จผ์Šค๋ฅผ ํ•œ๋‹จ๊ณ„ ๋†’์ž„.

'IT > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[VSCode] Prettier Config  (0) 2023.01.12
JavaScript ๋ฒˆ๋“ค๋Ÿฌ  (0) 2022.12.26
ES5 ๋ฌธ๋ฒ• #4 ~ JSON, Date, Object...  (0) 2022.12.15
ES5 ๋ฌธ๋ฒ• #3 ~ Array  (0) 2022.12.14
ES5 ๋ฌธ๋ฒ• #2 ~ string  (0) 2022.12.13