์ต๊ทผ ์ฌ๋ฌ ๊ฐ์ง ๊ธฐ์ ๋ค์ ๊ณผ์ ๋ฅผ ํ๋ค๊ฐ ๋๋ ์ ์ด ์๋ค. webpack์ด๋ผ๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์ด๊ธฐ ์ค์ ์ด ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ๋ค๋ ์ ์ด๋ค. ๋ฌผ๋ก ํ ๋ฒ ์ ๋๋ก ์ค์ ํด๋๋ฉด ์ดํ๋ก ํฌ๊ฒ ๋ณ๋์ด ์๊ธฐ๊ฑฐ๋ ํ๋ ์ผ์ ๋๋ฌผ์ง๋ง, ์ผ์ฃผ์ผ๋ง์ ๋๋ด์ผํ๋ ๊ณผ์ ํ ์คํธ์ ํน์ฑ์ ๋ฒ๊ฑฐ๋ก์ด ์ค์ ์ ํ๊ฒ ๋ง๋๋ webpack์ ํ์ ๋ง์ง ์๋ค๊ณ ๋๊ผ๋ค.
๊ทธ๋ ๋ค๊ณ ํด์ ๋ด ๋ง์๋๋ก ์ปค์คํ ์ด ํ๋ CRA๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง๋ ์์๊ธฐ์, ์๋ก์ด ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์ฐพ์๋ค. ๊ทธ๊ฒ ๋ฐ๋ก โViteโ์๋ค. Vite๋ webpack์ ๋นํด ์ด๊ธฐ ์ค์ ์ด ๋งค์ฐ ๊ฐ๋จํ๋ค๊ณ ํ๋ค. webpack๊ณผ ๋นํ ๋ฐ๊ฐ ์๋๋ผ ์คํ๋ ค CRA์ ๊ฒฝ์ ์๋ ์ ๋์๋ค.
snowpack, esbuild์ ๊ฐ์ ๋ค๋ฅธ ๋ฒ๋ค๋ฌ๋ค๋ ๋น๊ตํด๋ดค์ง๋ง, ์๋ ๋ฌธ์ ์ SSR ๋ฌธ์ ๋ฅผ ๊ฑด๋ ๋ฐ๊ณ ์ด๊ธฐ ์ค์ ๋ง ์๊ฐํ์ ๋๋ Vite๋ฅผ ์ฌ๋ฌ ๊ณณ์ ์ฑํํด๋ด์งํ๋ค๊ณ ๋๊ผ๋ค.
Vite์ ๋ค๋ฅธ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ค๊ณผ ๋ค๋ฅด๊ฒ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌ๋กค๋งํ๊ณ ๋น๋ํด์ ์๋น์ค๋ฅผ ์์ํ๋ ๋ฐฉ์์ด ์๋๋ค. ๋จผ์ โ์ข ์์ฑโ๊ณผ โ์ฝ๋โ ๋ ๊ฐ์ง ๋ฒ์ฃผ๋ก ๋๋์ด ์๋ฒ ์์ ์๊ฐ์ ๊ฐ์ ํ๋ค.
์ข ์์ฑ์ ๊ฐ๋ฐ ๋์ค ์ ๋ฐ๋์ง ์๋ ๊ฒ์ผ๋ก, esbuild๋ฅผ ํตํด ์ฌ์ ๋ฒ๋ค๋ง์ด ๋๋ค.
์ฝ๋๋ ์ผ๋ฐ JS๊ฐ ์๋(JSX, CSS ๋ฑ๋ฑ) ๊ฒ๋ค์ด ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ ์์ฃผ ํธ์งํ๊ฒ ๋๋ค.
Vite
์ ์๋ ๋ฐฉ์์ธ โNative ESMโ์ ํตํด ์์ค ์ฝ๋๋ฅผ ์ ๊ณตํ๋ค. ๋ค์๋งํด, ๋ธ๋ผ์ฐ์ ๊ฐ ๊ณง ๋ฒ๋ค๋ฌ๋ผ๋ ๋ง์ด๋ค.
Vite๋ ๋ธ๋ผ์ฐ์ ์ ์์ฒญ์ ๋ฐ๋ผ ํ์์ ๋ฐ๋ผ ์์ค ์ฝ๋๋ฅผ ๋ณํํ์ฌ ์ ๊ณตํ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ๊ฐ๋จํ ๋งํด ๊ทธ๋ฅ ํ์ผ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ณ๊ฒฝ๋ ํ์ผ์ ๋ธ๋ผ์ฐ์ ์์ฒญ์ ๋ฐ๋ผ ๋ณด๋ด์ฃผ๋ ์ญํ ๋ง ํ๋ค๋ ์๋ฏธ์ด๋ค.
๊ทธ๋ฌ๋, NoiseEffector ์ ๋์ ์๊ท๋ชจ์ ํ๋ก์ ํธ์์๋ ์๋ ์ฐจ์ด๊ฐ ๋ฏธ๋นํ ์์ค ์๋๊น ์๊ฐํ๋ค.
์ถ๊ฐ์ ์ผ๋ก๋ ESM ๊ธฐ๋ฐ์ HMR, HTTP cache ๋ฑ์ ์ฅ์ ๋ ์กด์ฌํ๋ ์ฌ์ค ํ๋ก์ ํธ๊ฐ ์๋ ์๋ค๋ณด๋ webpack๊ณผ HMR์์ ํฐ ์ฐจ์ด๋ฅผ ๋๋ ์ ๋๋ ์ ๋๋ ๊ฒ ๊ฐ๋ค.
์ ์ ํ์ผ HTTP cache๋ ๋ด๊ฐ ๋ฐ๋ก ์ค์ ์ ์ํด์ค๋ ๋๋ค๋ ์ ์์ ๊ฝค ์ข์๋ค.
์ ๋ง ์ด๊ธฐ ์ค์ ์ด ์๋ ์์ค์ด๋ค. webpack์ผ๋ก ํ๋ฃจ ์ข ์ผ ์ด๊ธฐ ์ค์ ์ ํ๊ณ ์๋ ๊ฑธ ์๊ฐํ๋ฉด, CRA๋ฅผ ๋์ฒดํ๊ณ vite๋ฅผ ์ฌ์ฉํ๋ ํธ์ด ๋ซ์ง ์๋ ์ถ์ ์ ๋๋ก ํธํ๋ค.
$ npm create vite@latest
๋๋๊ฒ๋ ์ ํ ์ค๋ง ์น๋ฉด ์๋์ ํ๋ก์ ํธ๊ฐ ๋ง๋ค์ด์ง๋ค!
(ํ๊ฒฝ๋ณ์๋ ์ ๋๊ฒฝ๋ก ๋ฑ ๊ธฐ์กด๊ณผ ๋ค๋ฅธ ์ค์ ์ ๊ฑด๋๋ฆฌ๋ ค๋ฉด ์ด์ง ๋ฒ๊ฑฐ๋กญ์ง๋ง, ์ถฉ๋ถํ ํด๋ด์งํ ๋ถ๋ถ์ด๋ค.)
Vite๋ ์ด๋ด ๋ ์ฐ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค!
์ฐจ์ธ๋ ๋น๋ ๋๊ตฌ ๋น๊ต
Webpack โ Vite: ๋ฒ๋ค๋ฌ ๋ง์ด๊ทธ๋ ์ด์ ์ด์ผ๊ธฐ
(๋ฒ์ญ) 'Create React App ๊ถ์ฅ์ Vite๋ก ๋์ฒด' PR ๋ํ Dan Abramov์ ๋ต๋ณ