๐ Vite๋ฅผ ์ฌ์ฉํ ๊ณ๊ธฐ
CRA(Create React App)๋ ๋ฆฌ์กํธ์์ ๊ณต์์ ์ผ๋ก ๋ฐ์ด์ฃผ๋(?) ๋ณด์ผ๋ฌ ํ๋ ์ดํธ์ด๋ค. ๊ธฐ์กด์ ์ ์ฌ์ฉํด์๊ธฐ ๋๋ฌธ์ ๊ธฐ์
๊ณผ์ ๋ค์ ์ํํ๋ฉด์ ์ฌ์ฉํ๋ ค ํ์ง๋ง, ์ํฐ๋ ํ๋ฆฌ์จ๋ณด๋ฉ ๊ต์ก์ ๋ฐ์ผ๋ฉฐ CRA๋ณด๋ค ์๋๊ฐ ํจ์ฌ ๋น ๋ฅธ Vite๋ผ๋ ๊ฒ ์๋ค๋ ๋ฉํ ๋์ ์ด์ผ๊ธฐ๊ฐ ๋ ์ฌ๋ผ ์ฌ์ฉํด๋ณด์๋ค. Vite๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ค์ ๋น๋์๋์ dev ์๋ฒ๊ฐ ์ผ์ง๋ ์๋๊ฐ ๋๋ฌด ๋น ๋ฅด๋ค๋ ๊ฒ์ ์ง์ ๋๋ ์ ์์๋๋ฐ, ์ด๋ป๊ฒ Vite๊ฐ ๊ธฐ์กด์ CRA๋ณด๋ค ๋น ๋ฅผ ์ ์์์ง ์ดํดํ๊ธฐ ์ํด ๋ฒ๋ค๋ฌ์ ๋ํด์ ๋จผ์ ์์๋ณด๊ฒ ๋์๋ค.
โ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๊ฒ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์์ฒด์ ์ธ ๋ชจ๋ ์์คํ
์ด ์๋ค. ๋น์์ ์์ ํ๋ก์ ํธ์ ํ
์คํธ ์ฉ์ผ๋ก ์ฌ์ฉ๋ ์๋ฐ์คํฌ๋ฆฝํธ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๊ฐ์ ํ์ผ๋ค์ ๋ง๋ค๊ณ ๋ถ๋ฌ์ค๋ ๋ชจ๋ ๋ฌธ๋ฒ์ด ์์๋ค. ์ด๋ฌํ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ฅ ๋จผ์ ๋์๋ ๋ชจ๋ ๋ฌธ๋ฒ์ด Common JS๋ฐฉ์์ผ๋ก require๊ณผ module.export๋ก ํ์ผ์ ๋ถ๋ฌ์ค๊ณ ์ ๋ฌํ ์ ์๊ฒ ์ฐ๊ฒฐํ๊ณ , npm์ ํตํด์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋ชจ๋๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ค์ ๋ฐ์ ์ฌ ์ ์์๋ค. ํ์ง๋ง ์ ์ฒด ๋ชจ๋์ ๋ง์ ์์ ์ฝ๋๋ค์ ๋ฐ์์ค๋ค ๋ณด๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ์์ฒด์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ ์ด๋ ค์์ด ์๊ธฐ๊ฒ ๋์๊ณ , ์ธ์ ์ด๋ค ๋ชจ๋์ ๋ถ๋ฌ์์ผ ํ ์ง์ ๋ฐ๋ฅธ ์์ ์ ๋ฌธ์ ์ ๋ ๋ฐ์ํ๋ค.
โ ๋ฒ๋ค๋ฌ ๋ฑ์ฅ
๋ ๊ฐ์ง ๋ฌธ์ ์ ์ ํ๋ฒ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋์จ ๊ฒ์ด ๋ฐ๋ก ๋ฒ๋ค๋ฌ๋ค. ๋ฒ๋ค๋ฌ๋ฅผ ์ด์ฉํ๊ฒ ๋๋ฉด ๋ชจ๋ ๋ด๋ถ์์ ํ์ํ ๋ถ๋ถ ๋ง์ ๊ฐ์ ธ์ ๊ธฐ์กด์ ์ ์ฒด๋ฅผ ๊ฐ์ ธ์๋ ์ฉ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ผ๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ ํ์ผ์ด ์๋๋ผ ํ๋์ JS ํ์ผ๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋ชจ๋์ ์์์ ์ธ์ ๋ถ๋ฌ์์ผ ํ ์ง์ ๋ํ ๊ณ ๋ฏผ๋ ๋์์ ํด๊ฒฐํ ์ ์์๋ค.
์ด๋ฌํ ๋ฒ๋ค๋ฌ๋ก ๊ฐ์ฅ ์ ๋ช
ํ ๊ฒ์ ์๋ง Webpack์ด๋ผ ํ ์ ์์ ๊ฒ ๊ฐ๋ค. ๊ธฐ์กด์ ๋ด๊ฐ ์ฌ์ฉํ๋ CRA๋ ๋ฐ๋ก ์ด Webpack์ ๋ฒ๋ค๋ฌ๋ก ์ฌ์ฉํ๋ค. Webpack์ ๋จ์ํ ๋ฒ๋ค๋ฌ์ ์ญํ ๋ฟ ์๋๋ผ HMR (Hot module Replacement), code splitting, CSS, HTML, asset ๋ฑ ์ข
ํฉ์ ์ผ๋ก ์ง์ํด์ฃผ๋ tool๋ก ํ์ฌ๊น์ง ์์ ์ ์ธ ๋ฒ๋ค๋ฌ๋ก ์ฌ์ฉ๋๊ณ ์๋ค. CRA๋ก ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์คํํ ๋ ์๋ก ๊ณ ์นจ ์์ด๋ ์ฝ๋๊ฐ ๋ฐ์๋๋ ์ ์ด webpack์ HMR ๊ธฐ๋ฅ ๋๋ถ์ด๋ผ๋ ๊ฒ์ ๊ณต๋ถํ๋ฉฐ Webpack์ ๊ธฐ๋ฅ์ ์ข ๋ ์ดํดํ๊ฒ ๋์๋ค.
๐ ๋ฒ๋ค๋ฌ์ ๋ฌธ์ ์ ๊ณผ ES Build์ ๋ฑ์ฅ
Webpack๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ์ ๋ฑ์ฅ์ JS์ ์กด์ฌํ์ง ์๋ ๋ชจ๋ ์์คํ
์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ์ง๋ง ์๋์ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ฒ ๋์๋ค. ๊ทธ ์ด์ ๋ ์ฌ๋ฌ JSํ์ผ์ ํ๋๋ก ํญ์ ๋ง๋ค์ด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์์ ์ด ์์ ๋๋ง๋ค ์๋กญ๊ฒ ๋น๋๊ฐ ํ์ํ๊ณ ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด ์ปค์ง์๋ก ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ๋ง์์ ธ ๋น๋์ ํ์ํ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ฒ ๋์๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ก์ด ๋๊ตฌ๋ก ES Build๊ฐ ๋ฑ์ฅํ๊ฒ ๋๋ค. ES Build๋ ๊ธฐ์กด ๋ฒ๋ค๋ฌ๋ค์ ์๋๋ณด๋ค 100๋ฐฐ ์ด์ ๋น ๋ฅธ ๋น๋ ์๋๋ฅผ ๊ฐ์ก๋ค. ์ด๋ ๊ฒ ๋น ๋ฅธ ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ด์ ๋ JS๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ๊ธฐ์กด ๋ฒ๋ค๋ฌ๋ค๊ณผ ๋ฌ๋ฆฌ Go ์ธ์ด๋ก ์์ฑ๋์ด ๋น ๋ฅธ ๋น๋๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด์๋ค. ํ์ง๋ง ๋ฒ๋ค๋ฌ๋ก์จ๋ง ์ฌ์ฉ๋๋ ๊ฒ์ด ์๋๋ผ HMR, code splitting๊ณผ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ด ์ข
ํฉ์ ์ผ๋ก ์ ๊ณต๋๋ Webpack์ด์๊ธฐ ๋๋ฌธ์ ๋ณต์กํ ์ดํ๋ฆฌ์ผ์ด์
์์ ES Build๊ฐ ๋์ฒดํ ์๋ ์์๋ค.
โจVite์ ๋ฑ์ฅ
์น์ด ๋ฐ์ ํ๋ฉด์ ๋ธ๋ผ์ฐ์ ์์ฒด์์ ESM(ES Modules)์ด ์ถ๊ฐ๋๋ค. import์ export๋ก ์์ฑ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ํ ๋ฐฉ์์ ๋ฒ๋ค๋ฌ ์์ด <script type="module">์ ์ด์ฉํ ์ ์๊ฒ ๋๋ค. Go ์ธ์ด์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ก ๋์ ์ฑ๋ฅ์ ๊ฐ์ง ES Build์ ๋ธ๋ผ์ฐ์ ์์ ์ง์ํด์ฃผ๋ ESM์ ์ด์ฉํด Vite๊ฐ ํ์ํ๊ฒ ๋๋ค.
Vite๋ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ๋ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๊ตฌ๋ํ ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ํ๊ธฐ ์ํด ํฌ๊ฒ dependencies์ source code๋ก ๊ตฌ๋ถํด, ๊ฐ๋ฐ ์์ ๋ด์ฉ์ด ๋ฐ๋์ง ์์ dependency์ ์ฝ๋๋ ES Build๋ก ์ฌ์ ๋ฒ๋ค๋ง์ ํ๊ณ , ๊ณ์ํด์ ์์ ํด์ผ ํ๋ source code ๋ ๋ธ๋ผ์ฐ์ ์ ESM์ ์ด์ฉํด์ ๋ฐ์ํ ์ ์๊ฒ ์ฒ๋ฆฌํ๋ค. ESM์ ์์ฒญ๋ฐ์ ๋ชจ๋๋ง ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ ์๋ฒ์ ๋ฐ์์ด ๊ฐ๋ฅํ๋ค.
๋ฐฐํฌ ์์๋ ESM์ด ๋์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ JS๋ฅผ ์ง์ํ๋ ๋ฒ์ ์ ํ๊ฒ์ผ๋ก ํ๋ค. ๋น๋ ์์ ์์ง ESBuild๊ฐ Code splitting, CSS์ฒ๋ฆฌ ๊ด๋ จ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ES Build ๋์ ์ Rollup์ ์ด์ฉํ๋ค๊ณ ํ๋ค.
๐ ์ ๋ฆฌํ๊ธฐ
Vite๋ฅผ ์ฌ์ฉํด์ ์ ์ถํ ํ ๊ธฐ์
์ ๋ฉด์ ์์ CRA ๋์ Vite๋ฅผ ์ด์ฉํด์ ๊ณผ์ ๋ฅผ ํ์
จ๋ค์. Vite๊ฐ ์ CRA๋ณด๋ค ๋น ๋ฅธ์ง ์์๋์?๋ผ๋ ์ง๋ฌธ์ ๋ตํ์ง ๋ชปํ๋ค... ๊ธฐ์ ์ ์๊ณ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํ์๋๋ฐ ๊ทธ๋ฅ ๋์
ํ ๋ชจ์ต์ด ๋์ด๋ฒ๋ ธ๋ค. ์ด์ ๋ ES Build์ ๋ธ๋ผ์ฐ์ ์ ESM์ ์ด์ฉํ ๋ฒ๋ค๋ง์ผ๋ก ๊ธฐ์กด CRA์ WebPack๋ณด๋ค ๋น ๋ฅธ ์ฑ๋ฅ์ ๊ฐ์ง๋๋ค๋ผ๊ณ ๋๋ตํ ์ ์์๋ค. ์์ผ๋ก๋ ์ด๋ ํ ๊ธฐ์ ์ ์ฌ์ฉํ ๋ ํญ์ ์๋ฅผ ๋ ๊ณ ๋ฏผํด๋ณด์.
[์ฐธ์กฐ]