“Vite와 Webpack, 둘 다 프론트엔드 빌드 툴인데 대체 뭐가 다르고 언제 써야 할까?” 궁금하신 분들을 위해 더 자세하게, 재밌게, 그리고 정의(What is…)까지 콕 집어 정리해 보았습니다. 🚀
프론트엔드 개발을 하다 보면 “번들러(bundler)”를 한 번쯤은 마주치실 거예요.
자바스크립트, CSS, 이미지, 폰트 등 웹 자산들을 한 덩어리(또는 쪼개서)로 묶어 주는 역할이죠.
그중 가장 핫한 두 친구가 바로 Vite와 Webpack인데요,
“왜 둘 중 하나를 골라야 되나요?”, “둘의 차이가 뭐예요?”, “언제 어떤 프로젝트에 쓰면 좋나요?”
이 질문들에 답하며 천천히 내려가 볼게요. 🐌
Vite(발음: [비트], 프랑스어로 ‘빠르게’라는 뜻)
개발 서버는 ES 모듈을 그대로 쓰고, 빌드 때만 Rollup으로 번들링하는 초고속 프론트엔드 툴체인
- 탄생 배경
- Vue.js 핵심 팀 멤버(에반 유!)가 “Webpack 너무 느려!”라며 탄생시킴
- 핵심 포인트
- 개발 모드: 브라우저가 지원하는 ES 모듈(
import x from 'y'
)을 그대로 활용- 빌드 모드: Rollup을 이용해 프로덕션용 최적화 번들 생성
- ESBuild: TypeScript/ZigZag(?) 파일 변환 및 프리번들(pre-bundle) 처리 시 속도 최강
npm run dev
후 100ms 안에 서버 띄우기vite.config.ts
몇 줄, plugins
옵션만 추가하면 끝@vitejs/plugin-legacy
)·폴리필 삽입 필요Webpack
“모든 걸 자바스크립트로 번들링”하는, 현존 최강(?)의 번들러. loader·plugin 생태계가 방대
- 역사
- 2012년 Tobias Koppers에 의해 개발
- 수년간 프론트엔드 표준 빌드툴로 자리 잡음
- 핵심 포인트
- Entry–Loaders–Plugins–Output 워크플로우
- 로더(loader):
.js
,.jsx
,.vue
,.css
,.scss
,.svg
,.woff2
… 뭐든 로드 가능- 플러그인(plugin): 번들 최적화, 분석, 압축, 환경 변수 주입 등 다목적
webpack-dev-server
, webpack-merge
, MiniCssExtractPlugin
, BundleAnalyzerPlugin
등 손꼽히는 수백 개 패키지webpack.config.js
가 몇백 줄로 커지기 일쑤상황/요구사항 | 추천 툴 | 이유 |
---|---|---|
빠른 프로토타이핑, 개인 프로젝트 | Vite | 설정 없이 즉시 dev 서버, 초고속 HMR |
오픈소스 라이브러리(Package) 제작 | Vite(Rollup) | 트리쉐이킹 강점, 번들 크기 최소화 |
레거시 브라우저 지원, 복잡한 파이프라인 | Webpack | Babel·Polyfill 통합, 로더·플러그인으로 커스텀 최적화 |
기존 CRA(Create React App) → 전환 계획 | 점진적 Vite | @vitejs/plugin-legacy 활용, 점진적 마이그레이션 가능 |
대규모 기업 프로젝트, 멀티 프론트엔드 통합 | Webpack | 이미 검증된 설정·생태계, 조직 내 표준과 호환성 보장 |
# 프로젝트 생성
npm init vite@latest my-app -- --template react
cd my-app
npm install
# 개발 서버 실행
npm run dev
npm install --save-dev webpack webpack-cli webpack-dev-server babel-loader @babel/core @babel/preset-react
# webpack.config.js (초간단 예시)
module.exports = {
entry: './src/index.jsx',
output: { filename: 'bundle.js', path: __dirname + '/dist' },
module: {
rules: [
{ test: /\.jsx?$/, loader: 'babel-loader', options: { presets: ['@babel/preset-react'] } },
{ test: /\.css$/, use: ['style-loader', 'css-loader'] },
]
},
devServer: { hot: true, open: true },
};
프로젝트마다 요구사항과 환경이 다르기 때문에 “무조건 이거 써라!” 보다는 아래 기준을 참고해 우선순위를 정하고, 그에 따라 선택하세요.
@vitejs/plugin-legacy
)@vitejs/plugin-legacy
로 레거시 지원 추가vite.config.ts
로 설정 옮기기체크포인트 | Vite 추천 조건 | Webpack 추천 조건 |
---|---|---|
🌱 스타트업·사이드 프로젝트 | ✔ 빠르게 시작, 설정 부담 최소 | |
📦 오픈소스 라이브러리 패키징 | ✔ 번들 크기 작고 트리쉐이킹 강력 | |
🏢 엔터프라이즈 · 레거시 브라우저 지원 | ✔ 복잡한 폴리필·트랜스파일링 일체 처리 | |
🛠️ 커스텀 파일 포맷·파이프라인 필요 | ✔ loader/플러그인으로 세밀 제어 | |
👩🏫 팀 경험 및 학습 곡선 | ✔ 설정 간단, 학습 곡선 완만 | ✔ 이미 Webpack 경험 多 |
┌─ “프로토타입/개인 프로젝트인가?” → 예 ──> Vite
│
프로젝트 시작 ── “엔터프라이즈, 레거시 지원 필요?” → 예 ──> Webpack
│
└─ 그 외 → “번들 크기 최적화, 라이브러리 배포 중요?” → 예 ──> Vite
↓
아니오 → Webpack
Tip: 요즘은 Vite 생태도 빠르게 성장 중이니, “시도해 보고 싶다!” 싶으면 작은 프로젝트에서 먼저 도입해 보세요.
익숙해지면 점진 마이그레이션으로도 충분히 안정적인 전환이 가능합니다.
최종 정리:
자, 이제 여러분의 프로젝트에 딱 맞는 번들러를 선택해 보세요!