๐ข์ด๊ธ์ 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 |