Vite(프랑스어로 '빠르다'라는 의미, 발음은 '비트')는 Vue.js의 제작자 Evan You가 개발한 차세대 프론트엔드 빌드 도구입니다. 2020년에 첫 버전이 공개된 이후 급속도로 인기를 얻어 현재는 React, Vue, Svelte, Lit 등 다양한 프레임워크를 지원하는 프론트엔드 개발 환경으로 자리잡았습니다.
Vite의 가장 큰 특징은 기존 번들러 기반 도구(Webpack, Parcel 등)와 달리 네이티브 ES 모듈(ESM)을 활용한다는 점입니다. 이로 인해:
graph TD;
A[기존 번들러] -->|전체 앱 번들링| B[개발 서버 시작]
C[Vite] -->|ESM 직접 사용| D[즉시 서버 시작]
B -->|수정 시 재번들링| E[변경사항 반영]
D -->|수정된 모듈만 교체| F[즉시 변경사항 반영]
개발 환경에서는 ESM을 활용하고, 프로덕션 빌드에서는 Rollup을 사용해 최적화된 번들을 생성합니다:
# React 프로젝트 생성
npm create vite@latest my-react-app -- --template react
# Vue 프로젝트 생성
npm create vite@latest my-vue-app -- --template vue
# 다른 프레임워크(Svelte, Lit, Preact 등) 지원
| 기능 | Vite | Webpack |
|---|---|---|
| 개발 서버 시작 속도 | 매우 빠름 (ESM 기반) | 상대적으로 느림 (번들링 필요) |
| HMR 성능 | 매우 빠름 | 앱 규모에 따라 느려짐 |
| 설정 복잡도 | 간단함 | 복잡함 |
| 생태계 | 성장 중 | 매우 성숙함 |
| 프로덕션 빌드 | Rollup 기반 | 자체 번들러 |
| 레거시 브라우저 지원 | 별도 설정 필요 | 기본 지원 |
# npm 사용
npm create vite@latest
# yarn 사용
yarn create vite
# pnpm 사용
pnpm create vite
cd my-vite-project
npm install
npm run dev
my-vite-project/
├── node_modules/
├── public/ # 정적 자산 (변환 없이 제공)
├── src/ # 소스 코드
│ ├── assets/ # 빌드 과정에서 처리될 자산
│ ├── components/ # 컴포넌트
│ ├── App.jsx # 메인 컴포넌트
│ └── main.jsx # 진입점
├── index.html # 진입 HTML (중요!)
├── package.json
└── vite.config.js # Vite 설정 파일
Vite에서는 SVG 파일을 여러 방식으로 처리할 수 있습니다:
URL로 가져오기: 기본적으로 SVG를 가져오면 URL 문자열을 반환
import logoUrl from './logo.svg';
// <img src={logoUrl} />
Raw 문자열로 가져오기: SVG를 텍스트로 처리
import logoSvg from './logo.svg?raw';
// <div dangerouslySetInnerHTML={{ __html: logoSvg }} />
React 컴포넌트로 가져오기: ?react 쿼리 사용
import Logo from './logo.svg?react';
// <Logo width={50} height={50} />
다른 빌드 도구(Webpack, Parcel 등)에서도 유사한 기능을 제공하지만, 설정 방법과 문법은 다를 수 있습니다.
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import svgr from 'vite-plugin-svgr';
export default defineConfig({
plugins: [
react(),
svgr() // SVG를 React 컴포넌트로 변환
],
resolve: {
alias: {
'@': '/src' // 경로 별칭 설정
}
},
server: {
port: 3000,
open: true
},
build: {
outDir: 'dist',
minify: 'terser',
sourcemap: false
}
});
// .env 파일
VITE_API_URL=https://api.example.com
// 코드에서 사용
const apiUrl = import.meta.env.VITE_API_URL;
대규모 React 애플리케이션을 기준으로:
| 지표 | Vite | Create React App (Webpack) |
|---|---|---|
| 개발 서버 시작 | ~300ms | ~30초 |
| HMR 속도 | ~50ms | ~1초 |
| 프로덕션 빌드 | ~20초 | ~40초 |
| 번들 크기 | 비슷함 | 비슷함 |
Webpack에서는 SVGR 로더를 설정하여 SVG를 React 컴포넌트로 변환할 수 있습니다:
// webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.svg$/,
use: ['@svgr/webpack', 'url-loader']
}
]
}
};
// 사용법
import Logo from './logo.svg';
// <Logo />
Next.js에서는 SVGR을 통합 설정할 수 있습니다:
// next.config.js
module.exports = {
webpack(config) {
config.module.rules.push({
test: /\.svg$/,
use: ['@svgr/webpack']
});
return config;
}
};
CRA는 기본적으로 SVGR이 설정되어 있어 SVG를 컴포넌트로 바로 임포트할 수 있습니다:
import { ReactComponent as Logo } from './logo.svg';
// <Logo />
Vite는 빠른 개발 환경과 현대적인 빌드 최적화를 제공하는 강력한 도구입니다. 특히 대규모 프로젝트에서 개발 경험을 크게 향상시킬 수 있으며, SVG를 React 컴포넌트로 사용하는 ?react 쿼리 같은 편리한 기능도 제공합니다.
다른 빌드 도구들도 유사한 기능을 제공하지만, Vite의 간결한 설정과 뛰어난 성능은 프론트엔드 개발 환경으로서 큰 경쟁력을 가지고 있습니다. 새 프로젝트를 시작하거나 기존 프로젝트를 마이그레이션할 때 Vite를 고려해 볼 가치가 있습니다.