๋นํธ(Vite)์ ๋์๋ณด์! ๋๋ ๋ ๋นํธ!
- -
๐ฃ ์์๋๋ก ์ ๋ฐ๋ผ ์๋๊ฐ
์ค๋์ ์ ๋ฆฌ๋ ๋ค์์ ์์๋๋ก ์งํ๋๋ค. ์ค์ค๋ก ์ ๋ฐ๋ผ์๋์ง ๋ชจ๋ฅด๊ฒ ๋ค.
๋ฒ๋ค๋ฌ, ๋ชจ๋ ๋ฒ๋ค๋ฌ > ์นํฉ(Webpack) > ๋ฐ๋ฒจ(Babel) > ํด๋ฆฌํ(Polyfill) > ๋นํธ(Vite)
์๋ฌดํผ ์ค๋ ๋ง์ง๋ง์ผ๋ก ๋นํธ(vite)์ ๋ํด์ ์ ๋ฆฌํด๋ณด์!
๐ฃ ๋นํธ(Vite)
1. ๊ฐ๋
๋นํธ(Vite)๋ Vue ์ฐฝ์์ Evan You๊ฐ ๋ง๋ ์๋ก์ด ํ๋ก ํธ์๋ ๋๊ตฌ๋ก ํ๋์ค์ด๋ก "๋น ๋ฅด๋ค(Quick)"์ ์๋ฏธ๋ฅผ ์ง๋๊ณ ์์. ๋น ๋ฅด๊ณ ๊ฐ๊ฒฐํ ๋ชจ๋ ์น ํ๋ก์ ํธ ๊ฐ๋ฐ ๊ฒฝํ์ ์ด์ ์ ๋ง์ถฐ ํ์ํ ๋น๋ ๋๊ตฌ.
Vite๋ ๋ค์ดํฐ๋ธ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋(ES Module)์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ฐ๋ธ ์๋ฒ. ์ด๋ฏธ ํ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ ์ํ๊ณ๋ ์นํฉ(Webpack)์ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ๋ฐฐํฌ ์์คํ ์ด ๊ตฌ์ถ๋์ด ์์. ๋นํธ๋ ์นํฉ๋ณด๋ค ํจ์ฌ ๋ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ๊ณ ๋ฐฐํฌํ ์ ์๋๋ฐ, ์ ๋น ๋ฅธ์ง๋ ๋ค์์์ ์ดํด๋ณด๊ฒ ์!
2. Webpack ๊ณผ ๋ค๋ฅธ์ ?
์นํฉ(Webpack)๊ณผ ๊ฐ์ ๊ธฐ์กด์ ๋ฒ๋ค ๊ธฐ๋ฐ ๋ฐฉ์์์๋ ๋ชจ๋ ์์ค์ฝ๋๊ฐ ๋น๋๋์ด์ ํ๋ฒ์ ๋ฒ๋ค๋ง๋ ํํ๋ก ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค๋ฉด, Native ESM ๊ธฐ๋ฐ ๋ฐฉ์์ Vite์์๋ ๊ทธ๋ด ํ์๊ฐ ์์. ๋ฒ๋ค๋ง์ด ํ์๊ฐ ์๊ณ ๋ธ๋ผ์ฐ์ ์์ ํ์ํ ๋ชจ๋์ ์์ค์ฝ๋๋ฅผ importํ ๋ ์ด๊ฒ์ ์ ๋ฌ๋ง ํ๋ฉด ๋๋ ๋ฐฉ์.
์ด๊ฒ์ ๊ฒฐ๊ตญ ํ๋ ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์ ESM์ ์ง์ํ๊ธฐ์ ๊ฐ๋ฅํ ๊ฒ. ESM์ด ๋์ค๊ธฐ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ ๋ฒจ์์ ์ง์ํ๋ ๋ชจ๋์์คํ ์ด ์์๊ธฐ ๋๋ฌธ์ ๋ฒ๋ค๋ง์ด ํ์ํ๋ ๊ฒ์ด๊ณ , ์ง๊ธ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ ๋ฒจ์์ ๋ชจ๋์์คํ ์ด ๋ค์ด๊ฐ ์๊ณ ๊ฑฐ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ด๊ฒ์ ์ง์์ ํ๊ธฐ ๋๋ฌธ์ Vite์์๋ ESM์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค ์ ์๊ฒ ๋ ๊ฒ!
Webpack๊ณผ ๊ฐ์ ๊ธฐ์กด ๋ฒ๋ค๋ฌ๋ ๋ชจ๋ ์์ค ์ฝ๋๋ฅผ ์ ๊ณตํ๊ธฐ ์ ์ ๋ฒ๋ค๋ก ๋ฌถ์. ์ต์ ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ ESM ์ง์์ ํ์ฉํ๋ Vite๋ ์ฌ์ ๋ฒ๋ค๋ง ์์ด ์ฃผ๋ฌธํ ๋ชจ๋์ ์ ๊ณต. ์ด๋ฅผ ํตํด ์ ์ฒด ๋น๋ ๋จ๊ณ๊ฐ ํ์ํ์ง ์์ ๊ฐ๋ฐ ์๋๊ฐ ํฌ๊ฒ ํฅ์.
3. ESM(ECMAScript Modules)?
ESM์ ๋ชจ๋ํ ๋ฌธ๋ฒ์ธ import, export๋ฅผ ๋ณ๋์ ๋๊ตฌ ์์ด ๋ธ๋ผ์ฐ์ ์์ฒด์์ ์ํํด ๋ผ ์ ์๋ ๋ชจ๋ ๋ฐฉ์์ ์๋ฏธ. ๋ง์ฝ ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์นํฉ(Webpack)๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ ์์ด ๋ธ๋ผ์ฐ์ ์์ ์คํํ๋ฉด ์๋ฌ ๋ฐ์.
// app.js
import { hello } from 'text.js';
console.log(hello("kevin", "haru");
<script src="app.js"></script>
์์ ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ import์ export๋ฅผ ํด์ํ ์ ์๋ ๋ฅ๋ ฅ์ด ์์์ง๋ง ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ์ ์ถ๊ฐํ๋ฉด ๋ธ๋ผ์ฐ์ ์์ import์ export๋ฅผ ์ํํ ์ ์๊ฒ ๋จ.
4. ์ด๋ป๊ฒ ์ฌ์ฉ? (React)
๋ณดํต์ React ํ๋ก์ ํธ ์์ฑํ ๋ ์์นญ ' CRA ' ๋ผ๋ Create-React-App ๋ช ๋ น์ด๋ฅผ ์คํํ์ง๋ง CRA๋ ๋น๋ํ๋๋ฐ ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๊ณ ์์ด ์ปค์ ๋ถํธํ ๋๊ฐ ์์. ์ด๋ด ๋ Vite๋ ๊ฐ๊ฒฐํ ๋ชจ๋ ์น ํ๋ก์ ํธ ๊ฐ๋ฐ์ ์ด์ ์ ๋ง์ถ ๋น๋ ๋๊ตฌ.
npm create vite@latest
// ํ๋ก์ ํธ ๊ธฐ์ด ์ค์ ํ
npm install
npm run dev
Vite ๋ CRA๋ณด๋ค ๊ฐ๋ฐ ์ ์๋๊ฐ ๋ ๋น ๋ฅด๊ณ ๋ฉ๋ชจ๋ฆฌ๋ ์ ๊ฒ ์ก์๋จน๋๋ค๋ ํฐ ์ฅ์ . Vite๋ esbuild๋ฅผ ์ด์ฉํด์ " ๋ณ๊ฒฝ๋ ๋ถ๋ถ " ๋ง ์๋กญ๊ฒ ๋ฒ๋ค๋ง. ์ฌ๊ธฐ์ ์๋๊ฐ ์ฐจ์ด๊ฐ ๋จ. ๋ฌผ๋ก Vite๋ ์ฒซ ์คํ์์๋ ์ ์ฒด ๋ฒ๋ค๋ง์ ์งํ(์ฌ์ ๋ฒ๋ค๋ง)ํ๊ณ ๊ทธ ์ดํ์๋ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์๋กญ๊ฒ ๋ฒ๋ค๋ง.
5. '๋ฒ๋ค๋ง์ด ํ์ ์๋ค'๋ฉด์ ์ '๋น ๋ฅธ ๋ฒ๋ค๋ง'์ด๋ผํ ๊น?
5-1. '๋ฒ๋ค๋ง์ด ํ์ ์๋ค'์ ์๋ฏธ
๊ฐ๋ฐ๋ชจ๋
๊ฐ๋ฐ ๋ชจ๋์์ Vite๋ ์ต์ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ESM(ECMAScript ๋ชจ๋) ์ง์์ ํ์ฉํ์ฌ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ฌถ๋ ๊ฒ์ ๋ฐฉ์ง. ๋์ ์ฃผ๋ฌธํ ๋ชจ๋์ ์ ๊ณต. ํ์ผ์ ๋ณ๊ฒฝํ๋ฉด ๋ณ๊ฒฝ๋ ๋ชจ๋๊ณผ ํด๋น ์ข
์์ฑ๋ง ๋ค์ ๋ก๋๋๋ฏ๋ก HMR(ํซ ๋ชจ๋ ๊ต์ฒด)์ด ๋งค์ฐ ๋นจ๋ผ์ง๊ณ ๊ฐ๋ฐ ํ๊ฒฝ์ด ๋นจ๋ผ์ง.
ํ๋ฌ๋์
๋ชจ๋
์์ฐ์ ์ํด Vite๋ ๋ฒ๋ค๋ง์ ์ํ. ๋ฐฐํฌ์ฉ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ ๋ Vite๋ ๋ด๋ถ์ ์ผ๋ก ๋กค์ ์ ์ฌ์ฉํ์ฌ ๋ชจ๋์ ์ต์ ํ๋ ํ์ผ๋ก ๋ฌถ์. ์ด ๋จ๊ณ๋ฅผ ํตํด ํธ๋ฆฌ ์์ดํน ๋ฐ ์ฝ๋ ๋ถํ ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํตํด ํ๋ก๋์ ๋น๋์ ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ด ์ต๋ํ ํฅ์.
5-2. '๋น ๋ฅธ ๋ฒ๋ค๋ง'์ ์๋ฏธ
๊ฐ๋ฐ ์๋
- ์ด๊ธฐ ๋ฒ๋ค๋ง ์์:
๊ฐ๋ฐ ์ค์ ๋ชจ๋ ๊ฒ์ ๋ฏธ๋ฆฌ ๋ฒ๋ค๋ก ๋ฌถ์ ํ์๊ฐ ์์. ์ฆ, ์๋ฒ๊ฐ ์ฆ์ ์์๋๊ณ ๋๊ธฐ ์๊ฐ์ด ์ต์ํ
- ์ฃผ๋ฌธํ ๋ก๋ฉ:
ํ์ฌ ๋ณด๊ธฐ์ ํ์ํ ๋ชจ๋๋ง ๋ก๋๋๋ฏ๋ก ๊ฐ๋ฐ ํ๋ก์ธ์ค๊ฐ ๋์ฑ ๋น ๋ฅด๊ณ ์๋ต์ฑ์ด ํฅ์
๋ฐฐํฌ ํจ์จ์ฑ
์ต์ ํ๋ ๋ฒ๋ค๋ง:
๋ฐฐํฌํ ๋๊ฐ ๋๋ฉด Vite๋ ํจ์จ์ ์ธ ํ๋ก๋์
๋น๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ต์ ํ๋ Rollup์ ์ฌ์ฉํ์ฌ ์ ์ฒด ๋ฒ๋ค๋ง ํ๋ก์ธ์ค๋ฅผ ์ํ.
5-3. ์ ๋ฆฌํ๋ฉด
๊ฐ๋ฐ ๋ชจ๋
Vite๋ ์ ํต์ ์ธ ๋ฒ๋ค๋ง์ ํผํ๊ณ ๋น ๋ฅธ ์ฃผ๋ฌธํ ๋ชจ๋ ๋ก๋ฉ์ ์ํด ESM์ ์ฌ์ฉ
๋ฐฐํฌ ๋ชจ๋
Vite๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฒ๋ค๋ก ๋ฌถ์ด ์ต์ ํ๋๊ณ ํจ์จ์ ์ธ ๋ฐฐํฌ๋ฅผ ๋ณด์ฅ
Vite๋ ๊ฐ๋ฐ ์ ์ ํต์ ์ธ ๋ฒ๋ค๋ง์ด ํ์ํ์ง ์๋ค๊ณ ๊ฐ์กฐํ๋ฉด์๋ ์์ฐ์ ์ํ ํฌ๊ด์ ์ด๊ณ ์ต์ ํ๋ ๋ฒ๋ค๋ง ํ๋ก์ธ์ค๋ฅผ ์ํํ๋ฏ๋ก "๋น ๋ฅธ ๋ฒ๋ค๋ง"์ด๋ผ๋ ์ฉ์ด ์ฌ์ฉ.
ํ! ๋ด์ผ๋ ํ์ดํ ํ์!
์ฐธ๊ณ
https://joshua1988.github.io/vue-camp/vite/intro.html
https://analogcode.tistory.com/39
https://kg-dlife.tistory.com/210
https://despiteallthat.tistory.com/256
'FrontEnd > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ํจ์ ์ ์ธ๋ฌธ๊ณผ ํจ์ ํํ์, ํ์ดํ ํจ์ ๊ทธ๋ฆฌ๊ณ ํธ์ด์คํ (0) | 2024.07.10 |
---|---|
ํด๋ฆฌํ(Polyfill)๊ณผ ๋ฐ๋ฒจ(Babel) ๋น๊ตํ๋ฉฐ ๊ฐ๋ ์ฒดํฌ! (0) | 2024.06.17 |
๋ฐ๋ฒจ(Babel)์ ๋ํด์ ์์๋ณด์! (0) | 2024.06.17 |
์นํฉ(Webpack)์ ํํค์ณ ๋ณด์! (0) | 2024.06.17 |
๋ฒ๋ค(bundle)๊ณผ ๋ฒ๋ค๋ง(bundling) (0) | 2024.06.17 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค