์ƒˆ์†Œ์‹

FrontEnd/JavaScript

๋น„ํŠธ(Vite)์— ๋†€์•„๋ณด์ž! ๋“œ๋ž ๋” ๋น„ํŠธ!

  • -

๐Ÿฃ ์ˆœ์„œ๋Œ€๋กœ ์ž˜ ๋”ฐ๋ผ ์™”๋Š”๊ฐ€


์˜ค๋Š˜์˜ ์ •๋ฆฌ๋Š” ๋‹ค์Œ์˜ ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰๋๋‹ค. ์Šค์Šค๋กœ ์ž˜ ๋”ฐ๋ผ์™”๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. 

๋ฒˆ๋“ค๋Ÿฌ, ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ > ์›นํŒฉ(Webpack) > ๋ฐ”๋ฒจ(Babel) > ํด๋ฆฌํ•„(Polyfill) > ๋น„ํŠธ(Vite)

 

์•„๋ฌดํŠผ ์˜ค๋Š˜ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋น„ํŠธ(vite)์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด์ž!

 

 

 

๐Ÿฃ ๋น„ํŠธ(Vite)


 

1. ๊ฐœ๋…

 ๋น„ํŠธ(Vite)๋Š” Vue ์ฐฝ์‹œ์ž Evan You๊ฐ€ ๋งŒ๋“  ์ƒˆ๋กœ์šด ํ”„๋ก ํŠธ์—”๋“œ ๋„๊ตฌ๋กœ ํ”„๋ž‘์Šค์–ด๋กœ "๋น ๋ฅด๋‹ค(Quick)"์˜ ์˜๋ฏธ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ์Œ. ๋น ๋ฅด๊ณ  ๊ฐ„๊ฒฐํ•œ ๋ชจ๋˜ ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์— ์ดˆ์ ์„ ๋งž์ถฐ ํƒ„์ƒํ•œ ๋นŒ๋“œ ๋„๊ตฌ. 

 Vite๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ(ES Module)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ฐ๋ธŒ ์„œ๋ฒ„. ์ด๋ฏธ ํ˜„๋Œ€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์ƒํƒœ๊ณ„๋Š” ์›นํŒฉ(Webpack)์„ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๋ฐฐํฌ ์‹œ์Šคํ…œ์ด ๊ตฌ์ถ•๋˜์–ด ์žˆ์Œ. ๋น„ํŠธ๋Š” ์›นํŒฉ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์™œ ๋น ๋ฅธ์ง€๋Š” ๋‹ค์Œ์—์„œ ์‚ดํŽด๋ณด๊ฒ ์Œ!

 

 

2. Webpack ๊ณผ ๋‹ค๋ฅธ์ ?

 ์›นํŒฉ(Webpack)๊ณผ ๊ฐ™์€ ๊ธฐ์กด์˜ ๋ฒˆ๋“ค ๊ธฐ๋ฐ˜ ๋ฐฉ์‹์—์„œ๋Š” ๋ชจ๋“  ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋นŒ๋“œ๋˜์–ด์„œ ํ•œ๋ฒˆ์— ๋ฒˆ๋“ค๋ง๋œ ํ˜•ํƒœ๋กœ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ–ˆ๋‹ค๋ฉด, Native ESM ๊ธฐ๋ฐ˜ ๋ฐฉ์‹์˜ Vite์—์„œ๋Š” ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†์Œ. ๋ฒˆ๋“ค๋ง์ด ํ•„์š”๊ฐ€ ์—†๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•„์š”ํ•œ ๋ชจ๋“ˆ์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ importํ• ๋•Œ ์ด๊ฒƒ์„ ์ „๋‹ฌ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๋ฐฉ์‹.

 ์ด๊ฒƒ์€ ๊ฒฐ๊ตญ ํ˜„๋Œ€ ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ESM์„ ์ง€์›ํ•˜๊ธฐ์— ๊ฐ€๋Šฅํ•œ ๊ฒƒ. ESM์ด ๋‚˜์˜ค๊ธฐ ์ „์—๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ ˆ๋ฒจ์—์„œ ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ์‹œ์Šคํ…œ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆ๋“ค๋ง์ด ํ•„์š”ํ–ˆ๋˜ ๊ฒƒ์ด๊ณ , ์ง€๊ธˆ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ ˆ๋ฒจ์—์„œ ๋ชจ๋“ˆ์‹œ์Šคํ…œ์ด ๋“ค์–ด๊ฐ€ ์žˆ๊ณ  ๊ฑฐ์˜ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ด๊ฒƒ์„ ์ง€์›์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Vite์—์„œ๋Š” ESM์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ!

 Webpack๊ณผ ๊ฐ™์€ ๊ธฐ์กด ๋ฒˆ๋“ค๋Ÿฌ๋Š” ๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์ „์— ๋ฒˆ๋“ค๋กœ ๋ฌถ์Œ. ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ธฐ๋ณธ ESM ์ง€์›์„ ํ™œ์šฉํ•˜๋Š” Vite๋Š” ์‚ฌ์ „ ๋ฒˆ๋“ค๋ง ์—†์ด ์ฃผ๋ฌธํ˜• ๋ชจ๋“ˆ์„ ์ œ๊ณต. ์ด๋ฅผ ํ†ตํ•ด ์ „์ฒด ๋นŒ๋“œ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์•„ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ.

 

 

3. ESM(ECMAScript Modules)?

ESM์€ ๋ชจ๋“ˆํ™” ๋ฌธ๋ฒ•์ธ import, export๋ฅผ ๋ณ„๋„์˜ ๋„๊ตฌ ์—†์ด ๋ธŒ๋ผ์šฐ์ € ์ž์ฒด์—์„œ ์†Œํ™”ํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ ๋ฐฉ์‹์„ ์˜๋ฏธ. ๋งŒ์•ฝ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์›นํŒฉ(Webpack)๊ณผ ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ ์—†์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ.

// app.js
import { hello } from 'text.js';

console.log(hello("kevin", "haru");
<script src="app.js"></script>

 

์˜ˆ์ „์—๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ import์™€ export๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ์—†์—ˆ์ง€๋งŒ ์ด์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ import์™€ export๋ฅผ ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ.

 

 

4. ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ? (React)

๋ณดํ†ต์€ React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•  ๋•Œ ์†์นญ ' CRA ' ๋ผ๋Š” Create-React-App ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์ง€๋งŒ CRA๋Š” ๋นŒ๋“œํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ์–‘์ด ์ปค์„œ ๋ถˆํŽธํ•  ๋•Œ๊ฐ€ ์žˆ์Œ. ์ด๋Ÿด ๋•Œ Vite๋Š” ๊ฐ„๊ฒฐํ•œ ๋ชจ๋˜ ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์— ์ดˆ์ ์„ ๋งž์ถ˜ ๋นŒ๋“œ ๋„๊ตฌ.

npm create vite@latest
// ํ”„๋กœ์ ํŠธ ๊ธฐ์ดˆ ์„ค์ • ํ›„
npm install
npm run dev

 

 Vite ๋Š” CRA๋ณด๋‹ค ๊ฐœ๋ฐœ ์‹œ ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋„ ์ ๊ฒŒ ์žก์•„๋จน๋Š”๋‹ค๋Š” ํฐ ์žฅ์ .  Vite๋Š” esbuild๋ฅผ ์ด์šฉํ•ด์„œ " ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„ " ๋งŒ ์ƒˆ๋กญ๊ฒŒ ๋ฒˆ๋“ค๋ง. ์—ฌ๊ธฐ์„œ ์†๋„๊ฐ€ ์ฐจ์ด๊ฐ€ ๋‚จ.  ๋ฌผ๋ก  Vite๋„ ์ฒซ ์‹คํ–‰์—์„œ๋Š” ์ „์ฒด ๋ฒˆ๋“ค๋ง์„ ์ง„ํ–‰(์‚ฌ์ „ ๋ฒˆ๋“ค๋ง)ํ•˜๊ณ  ๊ทธ ์ดํ›„์—๋Š” ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์ƒˆ๋กญ๊ฒŒ ๋ฒˆ๋“ค๋ง. 

 

 

5. '๋ฒˆ๋“ค๋ง์ด ํ•„์š” ์—†๋‹ค'๋ฉด์„œ ์™œ '๋น ๋ฅธ ๋ฒˆ๋“ค๋ง'์ด๋ผํ• ๊นŒ?

  5-1. '๋ฒˆ๋“ค๋ง์ด ํ•„์š” ์—†๋‹ค'์˜ ์˜๋ฏธ

๊ฐœ๋ฐœ๋ชจ๋“œ

๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ Vite๋Š” ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋ณธ ESM(ECMAScript ๋ชจ๋“ˆ) ์ง€์›์„ ํ™œ์šฉํ•˜์—ฌ ์ „์ฒด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ฏธ๋ฆฌ ๋ฌถ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€. ๋Œ€์‹  ์ฃผ๋ฌธํ˜• ๋ชจ๋“ˆ์„ ์ œ๊ณต. ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ณ€๊ฒฝ๋œ ๋ชจ๋“ˆ๊ณผ ํ•ด๋‹น ์ข…์†์„ฑ๋งŒ ๋‹ค์‹œ ๋กœ๋“œ๋˜๋ฏ€๋กœ HMR(ํ•ซ ๋ชจ๋“ˆ ๊ต์ฒด)์ด ๋งค์šฐ ๋นจ๋ผ์ง€๊ณ  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ๋นจ๋ผ์ง.

ํ”„๋Ÿฌ๋•์…˜ ๋ชจ๋“œ

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

 

 

  5-2. '๋น ๋ฅธ ๋ฒˆ๋“ค๋ง'์˜ ์˜๋ฏธ

๊ฐœ๋ฐœ ์†๋„
- ์ดˆ๊ธฐ ๋ฒˆ๋“ค๋ง ์—†์Œ: 

๊ฐœ๋ฐœ ์ค‘์— ๋ชจ๋“  ๊ฒƒ์„ ๋ฏธ๋ฆฌ ๋ฒˆ๋“ค๋กœ ๋ฌถ์„ ํ•„์š”๊ฐ€ ์—†์Œ. ์ฆ‰, ์„œ๋ฒ„๊ฐ€ ์ฆ‰์‹œ ์‹œ์ž‘๋˜๊ณ  ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ตœ์†Œํ™”

- ์ฃผ๋ฌธํ˜• ๋กœ๋”ฉ:

ํ˜„์žฌ ๋ณด๊ธฐ์— ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ๋กœ๋“œ๋˜๋ฏ€๋กœ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋”์šฑ ๋น ๋ฅด๊ณ  ์‘๋‹ต์„ฑ์ด ํ–ฅ์ƒ

๋ฐฐํฌ ํšจ์œจ์„ฑ
์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค๋ง: 

๋ฐฐํฌํ•  ๋•Œ๊ฐ€ ๋˜๋ฉด Vite๋Š” ํšจ์œจ์ ์ธ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์ตœ์ ํ™”๋œ Rollup์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ๋ฒˆ๋“ค๋ง ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰.

  5-3. ์ •๋ฆฌํ•˜๋ฉด

๊ฐœ๋ฐœ ๋ชจ๋“œ

Vite๋Š” ์ „ํ†ต์ ์ธ ๋ฒˆ๋“ค๋ง์„ ํ”ผํ•˜๊ณ  ๋น ๋ฅธ ์ฃผ๋ฌธํ˜• ๋ชจ๋“ˆ ๋กœ๋”ฉ์„ ์œ„ํ•ด ESM์„ ์‚ฌ์šฉ


๋ฐฐํฌ ๋ชจ๋“œ

Vite๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฒˆ๋“ค๋กœ ๋ฌถ์–ด ์ตœ์ ํ™”๋˜๊ณ  ํšจ์œจ์ ์ธ ๋ฐฐํฌ๋ฅผ ๋ณด์žฅ

Vite๋Š” ๊ฐœ๋ฐœ ์‹œ ์ „ํ†ต์ ์ธ ๋ฒˆ๋“ค๋ง์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ๊ฐ•์กฐํ•˜๋ฉด์„œ๋„ ์ƒ์‚ฐ์„ ์œ„ํ•œ ํฌ๊ด„์ ์ด๊ณ  ์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค๋ง ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ "๋น ๋ฅธ ๋ฒˆ๋“ค๋ง"์ด๋ผ๋Š” ์šฉ์–ด ์‚ฌ์šฉ.

ํ›„! ๋‚ด์ผ๋„ ํŒŒ์ดํŒ…ํ•˜์ž!

 

์ฐธ๊ณ 

https://joshua1988.github.io/vue-camp/vite/intro.html

https://analogcode.tistory.com/39

https://kg-dlife.tistory.com/210

https://despiteallthat.tistory.com/256

https://khys.tistory.com/31

https://www.youdad.kr/js-module-system/

https://11001.tistory.com/212

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.