๐ Vite
๋ฐ์ดํธ๊ฐ ์๋ ํ๋์ค์ด๋ก “๋น ๋ฅธ”์ ์๋ฏธํ๋ ๋นํธ๋ ์ฐจ์ธ๋ ๋ฒ๋ค๋ฌ๋ก์ ์ ์ฐจ ๋๊ฐ์ ๋ํ๋ด๊ณ ์์ต๋๋ค.
๊ธฐ์กด Webpack์ ์ฌ์ฉํ ๋ ๋ณด์๋ ๋ต๋ตํ ๊ฐ๋ฐ์๋ฒ์ ๋ฒ๋ค๋ง ์ฑ๋ฅ์ ์์ฒญ๋๊ฒ ๋์ด์ฌ๋ฆฐ ๊ฒ์ผ๋ก
์ ์ ์ ๋ช ์ธ๋ฅผ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์์๋ณด์ง ์์ ์ ์๊ฒ ์ต๋๋ค.
๊ทธ๋ผ ์ด๋ ํ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐ ์๋ฒ์ ๋ฒ๋ค๋ง ์๋๋ฅผ ๋์ด์ฌ๋ ธ๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
๐ ๋น ๋ฅธ Cold Start
CRA๋ก ์์ฑํ ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Webpack์ ํ์ฌํ๊ณ ์์ต๋๋ค.
Webpack์ ์ฌ๋ฌ ์ํฉ์ ์ ์ฐํ๊ฒ ๋์ฒํ๋ฉฐ ๊ฐ๋ฐ ํ๊ธฐ๋ ์ข์ง๋ง ํ๋ก์ ํธ์ ์ฌ์ด์ฆ๊ฐ ์ปค์ง ์๋ก ๊ฐ๋ฐ ์๋ฒ ๊ตฌ๋์๊ฐ์ด ์ง๋ฃจํ ์ ๋๋ก ๊ธธ์ด์ง๋ ๋จ์ ์ด ์์ต๋๋ค.
์ด๋ ๋ฒ๋ค๋ฌ ๊ธฐ๋ฐ์ ๊ฐ๋ฐ ์๋ฒ๊ฐ ๋ชจ๋ ์์ค ์ฝ๋์ ๋ํด ํฌ๋กค๋ง ๋ฐ ๋น๋ ์์ ์ ๋ง์ณ์ผ์ง๋ง ๋ธ๋ผ์ฐ์ ์ ํ์ด์ง๋ฅผ ์ ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด์ ๋ฐํด Vite๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋์ dependencies์ source code ๋ ๊ฐ์ง ์นดํ ๊ณ ๋ฆฌ๋ก ๋๋์ด ๊ฐ๋ฐ ์๋ฒ์ ์์ ์๊ฐ์ ๊ฐ์ ํ์ต๋๋ค.
- dependencies
๊ฐ๋ฐ ๋์ค ๋ด์ฉ์ด ๋ฐ๋์ง ์๋ ์ฝ๋์ ๋๋ค.
Vite๋ Go lang์ผ๋ก ์์ฑ๋์ด Webpack ๋ณด๋ค ๋ฒ๋ค๋ง ์๋๊ฐ 10~100๋ฐฐ ๋น ๋ฅด์ง๋ง ์ด์ ํ๋ก๋ํธ ๋ฒ๋ค๋ง ๋๊ตฌ๋ก์ ์ ํฉํ์ง ์์ESbuild
๋ฅผ ๊ฐ๋ฐ์๋ฒ์ ์ ์ฉํจ์ผ๋ก์จ ์์ฒญ๋ ์๋์ ํฅ์์ ์ด๋ฃจ์์ต๋๋ค. - source code
JSX, CSS ๋๋ Vue/Svelte ์ปดํฌ๋ํธ์ ๊ฐ์ด ์ปดํ์ผ๋ง์ด ํ์ํ๊ณ , ์์ ๋ํ ๋งค์ฐ ์ฆ์ ์ฝ๋์ ๋๋ค.
Vite๋Native ESM
์ ์ด์ฉํด ์์ค ์ฝ๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
ES6์ ๋์ ๋ ๋ชจ๋ ์์คํ ์ธ Native ESM์ ๋ชจ๋ ์์ฒด๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ํด์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ๋ฒ๋ค๋ง ํ๋ ์ฝ๋๋ค์ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ๋ถ๋ฌ์ฌ ์ ์๊ฒ ํจ์ผ๋ก์จ ๊ฐ๋ฐ ์๋ฒ ์ด๊ธฐ ์์ ์๊ฐ์ ํฌ๊ฒ ์ค์์ต๋๋ค.
๐ ์ ์ํ HMR(Hot Module Replacement)
Webpack์ผ๋ก ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๊ตฌ๋ํ ๋ ์ฌ์ํ ๋ถ๋ถ๋ง ์์ ํ์์๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๋๊ธฐ ๊น์ง ์ ์ด๋ฅผ ๊ธฐ๋ค๋ฆฐ ๊ธฐ์ต์ด ์์ต๋๋ค.
์ด๋ ๋ฒ๋ค๋ฌ๋ฅผ ํตํด ์์ ๋ ๋ถ๋ถ์ ์ฐพ๊ณ , ์ปดํ์ผ ํ๊ณ , ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Vite์์๋ ๋ฐ๋ก ์์์ ์ค๋ช
ํ Native ESM
๋๋ถ์ ์ฑ ์ฌ์ด์ฆ๊ฐ ์ปค์ ธ๋ ๊ฐฑ์ ์๊ฐ์ ์ํฅ์ ๋ผ์น์ง ์์ต๋๋ค.
๋ชจ๋์ด ์์ ๋์๋ค๋ฉด Vite๋ ํด๋น ๋ชจ๋์ ๊ต์ฒด → ๋ธ๋ผ์ฐ์ ์์ ์์ ๋ ๋ชจ๋ ์์ฒญ → ๋ชจ๋ ์ ๋ฌ์ ๊ณผ์ ๋ง์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ ์ ์ํ ๊ฐฑ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ํ HTTP ํค๋๋ฅผ ์ด์ฉํด ํ์์ ๋ฐ๋ผ ์์ค ์ฝ๋๋ 304 Not Modified
๋ก, ๋ํ๋์๋ Cache-Control: max-age=31536000,immutable
์ ์ด์ฉํด ์บ์๋์ด ๋ถํ์ํ ๊ณผ์ ์ ๊ฑด๋ ๋๋๋ค.
๊ณต์๋ฌธ์์ ์๋ ๋ค์ ์ฌ์ง๋ค์ ๋ณด๋ฉด ๋์ฑ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
๐ Rollup์ ์ด์ฉํ ๋ฒ๋ค๋ง
10~100๋ฐฐ ๋น ๋ฅธ ESbuild๋ ํ๋ฌ๊ทธ์ธ API์ ํธํ ๋ฌธ์ ๋๋ฌธ์ ๋ฒ๋ค๋ง์์๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๊ทธ์ ๋ํ ๋์์ผ๋ก ์ ์ฐํ ํ๋ฌ๊ทธ์ธ API์ ์ธํ๋ผ๋ฅผ ๊ฐ์ง Rollup์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
๐ ๋ฒ๋ค๋ง ๋ฐฉ๋ฒ
Rollup์ ๋ฒ๋ค๋ง ์ Webpack๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ชจ๋ ์ฝ๋๋ค์ ๋์ผํ depth๋ก ํธ์ด์คํ ํด์ ํ๋ฒ์ ๋ฒ๋ค๋ง ํด๋ฒ๋ฆฝ๋๋ค.
๋ชจ๋ ์ฝ๋๋ค์ด ๊ฐ์ depth์์ ๋ฒ๋ค๋ง ๋๊ธฐ ๋๋ฌธ์ ๋ณ์๋ค์ด ์ถฉ๋ ๋ ์ ์๋ค๊ณ ์๊ฐํ๊ฒ ์ง๋ง ์ํฉ์ ๋ฐ๋ผ ์๋ณ์๋ฅผ ๋ณ๊ฒฝํด ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ๋๋ฌธ์ ์์ ์ฑ๊ณผ ์๋ ๋๋ง๋ฆฌ ํ ๋ผ๋ฅผ ์ก์ ์ ์์์ต๋๋ค.
ํ์ง๋ง ๋ชจ๋ ๋ชจ๋๋ค์ ๊ฐ๊ฐ ํจ์๋ก ๊ฐ์ธ ์ ์ญ ๋ณ์๋ฅผ ์ง์ญ ๋ณ์๋ก ๋ณํํด ๋ณ์ ์ถฉ๋์ ๋ฐฉ์งํ๋ Webpack์ ๋น๊ตํ๋ฉด ์์ ์ฑ์ ๋ค๋จ์ด์ง๋๋ค.
๐ Tree Shaking
Tree Shaking์ ๋ชจ๋ ๋ฒ๋ค๋ง ๊ณผ์ ์์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์ ๊ฑฐํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ต์ ํํ๋ ๊ธฐ์ ์ ๋๋ค.
MDN์์๋ ES6์ ๋ชจ๋ ์์คํ , ์ฆ import/export ๋ฌธ๋ฒ์ ์์กดํ์ฌ ์ฐธ์กฐ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ณ ์๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋ ๊ธฐ์ ํธ๋ฆฌ ์์ดํน์ ES6์ ๋ชจ๋ ์์คํ ์์๋ง ์ง์ํ๊ณ ์์ต๋๋ค.
์นํฉ์ ๊ธฐ๋ณธ์ ์ผ๋ก ES6 ๋ชจ๋์ ํํด ํ์ผ ๋จ์๋ก๋ง ํธ๋ฆฌ ์์ดํน์ ํ๊ธฐ๋ ํ๊ณ ํ์ ํธํ์ฑ ๋๋ฌธ์ ์ด์ฉํ๋ ES6 ๋ฌธ๋ฒ์ CommonJS๋ก ๋ณํํ๋ ๋ฐ๋ฒจ, ์ฌ์ด๋ ์ดํํธ ์ค์ ๋ฑ๋ฑ ์ ๋์ง๋ ์๋๋ฐ ์ค์ ์ ๋ ๊น๋ค๋กญ์ต๋๋ค.
๊ทธ๋ ๊ธฐ์ CommonJS ์ฝ๋๋ฅผ ES6 ์ฝ๋๋ก ๋ณํํ ์ ์๋ ๊ณต์ ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ถ Rollup์ด ๋ ๋ฐ์ด๋ ํธ๋ฆฌ ์์ดํน ์ค๋ ฅ์ผ๋ก ๋ ์์ ๋ฒ๋ค ํ์ผ์ ์์ฑํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
๐ ๋ง๋ฌด๋ฆฌ
์์์ ์ดํด๋ณธ ๋ด์ฉ ๋๋ฌธ์ ํ๋ก์ ํธ์ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๊ณ ๊ท๋ชจ๊ฐ ์ปค์ง ์๋ก ๋ฒ๋ค๋ง์ ๋ถ์์ ์ฑ์ ์ ์ ์ปค์ง๊ฒ ๋์ด “๊ท๋ชจ๊ฐ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ Webpack, ๊ท๋ชจ๊ฐ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์ Rollup”์ด๋ ๋ง์ด ์ ํ์ฒ๋ผ ๋ฒ์ก์ต๋๋ค.
Vite๊ฐ ๊ฐ๊ด์ ๋ฐ์ผ๋ฉฐ ๋น ๋ฅด๊ฒ ๋ฐ์ ์ค์ด๊ธฐ ๋๋ฌธ์ ์์ ๋จ์ ํ๋ก์ ํธ๋ถํฐ ์ ์คํ๊ฒ ๋์ ํด๋ณด๋ฉฐ ์ตํ๋ด์ผ๊ฒ ์ต๋๋ค.
๋๊ธ