๋จผ์ Vite์ Webpack์ ๋ํด ์์๋ณด๊ธฐ ์ ๋ฒ๋ค๋ฌ ๋ ๋ฌด์์ธ์ง ์์์ผ ํ ๊ฑฐ ๊ฐ๋ค.
๋ฒ๋ค๋ฌ๋? => ์ฌ๋ฌ๊ฐ์ ํ์ผ๋ค์ ํ๋์ ํ์ผ๋ก ๋ฌถ์ด์ฃผ๋ ๋๊ตฌ
์ฒ์์ ๋ธ๋ผ์ฐ์ ๋ ES Modules๋ฅผ ์ง์ํ์ง ์์๋ค๊ณ ํ๋ค.
์ฆ ES6 import ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์๊ณ , ๊ทธ ๋ง์ <script>
๊ฐ ๋ชจ๋์ ๋ณด๋ผ ์ ์๋ค๋ ์๋ฏธ๋ค.
์ด๊ธฐ์๋ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ ํ์ผ ๋ช๊ฐ๋ง ์ด์ฉํด์ ์๋น์ค๊ฐ ๊ฐ๋ฅํ์ง๋ง ์ ์ ์ฌ์ดํธ๊ฐ ์ปค์ง๊ณ ์์๊ฐ ๋ง์ ์ง ์๋ก ๊ด๋ฆฌ๊ฐ ์ด๋ ค์์ก๋ค๊ณ ํ๋ค.
์ด์ ๋ฐ๋ผ์ ์น์ฌ์ดํธ ์ ์ฒ๋ฆฌ์ ์๊ตฌ์ฌํญ์ด ์ ์ ๋ง์์ง๊ฒ ๋์๊ณ ์ด๋ฅผ ์๋ํ ํด์ค ๊ฒ๋ค์ด ํ์ํด์ง๊ฒ๋๋๋ฐ, ์ด๋ฐ์ด์ ์์ ์ด์ ์์๋ณผ Webpack,Vite๋ฑ ๋ฒ๋ค๋ฌ๋ค์ด ๋ฑ์ฅ ํ๊ฒ ๋์๋ค.
webpack์ ํ๋์ ์ค์ ํ์ผ์์ entry ์ output์ ์ค์ ํ ์ ์๊ณ
์ด๋ค plugin๊ณผ loader๋ก ํ์ผ์ ๋ค๋ฃฐ ๊ฑด์ง ๋ช
์ ๋์ด์๋ค.
์ด๋ฅผ ํ์ธํด๋ณด๊ธฐ ์ํด testํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ webpack.config.js๋ฅผ ํ์ธ ํด๋ณด์.
testํ๋ก์ ํธ๋ฅผ CRA๋ก ์์ฑํด๋ณด๋ webpack.config.js๊ฐ ๋ณด์ด์ง ์๋๋ค.
npm run eject
์์๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋
์จ๊ฒจ์ก๋ ํ์ผ์ด ์์ฑ๋๊ณ
webpack.config.js์์ ๋ค์๊ณผ ๊ฐ์ด entry์ output์ค์ ์ ํ์ธ ํ ์ ์์๋ค.
entry, output ์ด๋?
webpack์ ๋ฒ๋ค๋ง ํ๋๊ณผ์ ์์ ์ผ๋ฐ ์ ์ผ๋ก ์ง์
์ ์ธ entry point๋ฅผ ์์ฑํ๋๋ฐ
์ด๋ ๋ณดํต src/index.js
๋ก ์ผ๊ณ ์ด entry point๋ฅผ ๊ธฐ์ค์ผ๋ก ์์กด์ ์ธ ๋ชจ๋๋ค์ ์ฐพ์์ ํ๋์ ๋ฌถ์์ผ๋ก ๋ฒ๋ค๋ง ํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค๊ณ ํ๋ค.
์์์ ๋ณธ๊ฒ์ฒ๋ผ webpack.config.js์์ ์ง์
์ ๊ณผ ๋ฌถ์ด์ง ๋ฒ๋ค๋ค์ด ์์ฑ๋ output์ ์ค์ ํ ์ ์๋ค. ๋ํ ํด๋น ํ์ผ์์ plugin๊ณผ loader๋ ๋ค๋ฃจ๊ณ ์์ผ๋ ํ๋์ ํ์ผ์์ ๊ฐํธํ๊ฒ ์ค์ ํ๋ ๊ฒ์ด ์ฅ์ ์ด๋ค.
webpack์ 2012๋
์ฒ์ ๋์๋ค. ๋ฐ๋ฉด์ vite๋ 2021๋
์ ๋ฑ์ฅํ๋๋ฐ ๋ ์ค๋์๊ฐ ์ฌ์ฉ๋ ๋งํผ ๋ค์ํ plugin๊ณผ loader๋ฅผ ์ฌ์ฉ ํ ์ ์๋ค.
loader๋ฅผ ํตํด์ ํ์ผ๋ค์ ๋ณํ, ๋ฒ๋ค๋ง, ๋น๋๋ฅผ ์งํํ๊ณ plugin์ ํตํด์ output ํ์ผ์ ํ๋ํ๋ค. ํ์์ ๋ฐ๋ผ ๋ค์ํ plugin, loader๊ฐ ์คํ์์ค์์๋ ๊ฐ๋ฐ ๋๊ณ ์๋ค๊ณ ํ๋
์ด ๋ํ webpack์ ์ฅ์ ์ด๋ค.
Code Splitting์ด webpack์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ด๋ผ๊ณ ํ๋ค.
Code Splitting์ด๋ ๊ฐ๋จํ๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์ํ์ง ์์ ๋ถ๋ถ๋ค์ ๋ฐ๋ก ๋ถํ ํ์ฌ ๋ณ๋์ ๋ฒ๋ค๋ก ๋ง๋๋ ๊ธฐ์ ์ด๊ณ , ์ด๋ ๊ฒ ๋ถํ ๋ ๋ฒ๋ค์ ํ์ํ ๋๋ง ๋ก๋ฉ๋๋ฏ๋ก ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ํฅ์์ํค๊ณ , ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํจ๋ค๊ณ ํ๋ค.
์๋ฅผ๋ค์ด SplitChunksPlugin์ ์ฌ์ฉํ์ฌ ๊ณตํต ๋ชจ๋์ ๋ถ๋ฆฌํ์ฌ ์ค๋ณต์ ์ต์ํํ๊ณ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ต์ ํํ๊ณ , ๋์ import๋ฅผ ํตํด ํ์ํ ๋๋ง ๋ก๋๋ฅผ ํ๋๋ฑ ๋ ๋ง์ ๋ฐฉ๋ฒ์ด ์๋๊ฑฐ ๊ฐ์๋ฐ ๋ค ์์๋ณด์ง ๋ชปํ๋ค.
๋ฒ๋ค๋ฌ๋ค ๊ฒ์ํ๋ค๋ณด๋ฉด Rollup, esbuild์ ๊ฐ์ ๊ฒ๋ค์ด ๋ ๋์ค๋๋ฐ webpack, vite์๋ ๋ฌด์์ด ๋ค๋ฅธ๊ฐ? ๊ฐ๋จํ๊ฒ ์์๋ณด์.
Webpack๊ณผ Rollup์ ๋ฒ๋ค๋ง ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์๋ค.
๋ ๋ง์ ์ฐจ์ด์ ์ด ์กด์ฌํ๋๋ฐ ์ด๋ก ์ธํด Webpack์ ์ฃผ๋ก ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐ ๋ฐ ๋น๋์ ์ฌ์ฉ๋๊ณ , Rollup์ ์ฃผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํจํค์ง์ ๋ฒ๋ค๋ง์ ์ฌ์ฉ๋๋ค.
Vite์ ๋ํด ์์๋ณด๊ธฐ ์ ์ ๋ ๋ค๋ฅธ ๋ฒ๋ค๋ฌ์ธ esbuild์ ๋ํด ์ ๊น ์์๋ณด์.
esbuild๋ ๋ค๋ฅธ ๋ฒ๋ค๋ฌ์ ๋ฌด์์ด ๋ค๋ฅธ๊ฐ?
esbuild๋ ๋ค๋ฅธ ๋ฒ๋ค๋ฌ๊ฐ ๋ด๋ถ์ ์ผ๋ก JavaScript๊ธฐ๋ฐ์ผ๋ก ๋ฒ๋ค๋ง ํ๋ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ Go์ธ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฒ๋ค๋ง์ ํ๋ค. ์ด๋ ๊ธฐ์กด ์๋๋ณด๋ค ๋น ๋ฅธ ํฌํผ๋จผ์ค๋ฅผ ๋ณด์ฌ์ค๋ค.
ํ์ง๋ง ์์ง ์ค์ ์ด ์ ์ฐํ์ง ๋ชปํ๊ณ ์์ ์ฑ ์ด์๊ฐ ์์ด์ ์ ์ ๋ฒ์ ์ด Release๋์ง ๋ชปํ ์ํ๋ผ๊ณ ํ๋ค.
์ด๋ฌํ esbuild์ ๋จ์ ์ ๋ณด์์ํจ ๋ฒ๋ค๋ฌ๊ฐ Vite๋ผ๊ณ ํ๋ค.
vite์ ๊ฐ์ฅํฐ ์ฅ์ ์ ๋น ๋ฅธ ์๋์ด๋ค. vite๋ esbuild๋ฅผ ํตํด ๋ฒ๋ค๋ง์ ํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ์๋์ ๋ฒ๋ค๋ง์ ์ ๊ณตํ๋ค.
๋ํ Vite๋ ES ๋ชจ๋์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ ํ์ผ์ ์ค์ ๋ก ๋ฒ๋ค๋งํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ๊ฐ์ ๋ชจ๋์ ๊ฐ๋ณ์ ์ผ๋ก ์๋นํ๋ ๋ฐฉ์์ผ๋ก ๋์์ํจ๋ค.
๋ฐ๋ผ์ ๋ชจ๋์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํด๋น ๋ชจ๋๋ง ๋ค์ ๋ฒ๋ค๋งํ๋ฏ๋ก ๊ฐ๋ฐ ์๋ฒ์ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค.
Vite๋ HMR์ ํตํด ๋ณ๊ฒฝ๋ ๋ชจ๋๋ง ์ค์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ๋ก๋ํ ํ์ ์์ด ๋ณ๊ฒฝ๋ ๋ชจ๋๋ง ๋น ๋ฅด๊ฒ ๋ฐ์๋์ด ๋น ๋ฅธ ๊ฐ๋ฐ ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋๋ฉด์์ Vite๊ฐ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ Vite๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฌด์กฐ๊ฑด ์ ์ผ๋ก ์ข์ ๋ณด์ด๋๋ฐ
๊ผญ ๊ทธ๋ฐ๊ฒ ๋ง์ ์๋๋ผ๊ณ ํ๋ค.
Vite๋ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ํ๋ก๋์ ํ๊ฒฝ์ ์ค์ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋น๋ ์์ ์ฑ์ด ๋ฎ์์ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ์ฌ์ฉํ๋ค๋ ์๊ฒฌ๋ ๋ง๋ค๊ณ ํ๋ค.
๋ํ vite๋ ๊ธฐ๋ณธ์ ์ผ๋ก <root>/index.html
ํ์ผ์ด ๋น๋๋ฅผ ์ํ ์ง์
์ ์ด๊ธฐ ๋๋ฌธ์, ์์ํ JS ๋ฒ๋ค์ ์์ฑํ๊ธฐ ์ํด์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋๋ฅผ ์ค์ ํด์ผ ํ๋ค.
์ฐจ์ธ๋ ๋ฒ๋ค๋ฌ ๋น๊ต ๋ฐ ๋ถ์ (feat. webpack, rollup, esbuild, vite)
๋ชจ๋ ๋ฒ๋ค๋ฌ๋? - Webpack vs Vite ๋ฌด์์ ์จ์ผ ํ ๊น์?