# [[Vite Build Tool|Vite Build Tool]]

## 📌 Brief 임무
Vite는 현대 프론트엔드 애플리케이션(주로 React)을 위한 표준 빌드 도구로, 기존 Webpack 및 Create React App(CRA)을 대체하며 빠르게 자리 잡았습니다 [1, 2]. 이 도구는 개발 환경에서는 브라우저의 네이티브 ES 모듈(ESM)을 활용해 즉각적인 서버 시작과 초고속 HMR(Hot Module Replacement)을 제공합니다 [2-4]. 프로덕션 배포 시에는 내부적으로 Rollup을 사용하여 코드 스플리팅과 트리 쉐이킹이 적용된 고도로 최적화된 번들을 생성하는 하이브리드 아키텍처를 특징으로 합니다 [5, 6].

## 📖 Core Content
* **하이브리드 아키텍처 (Hybrid Architecture)**
  * **개발 환경:** 코드를 사전에 전체 번들링하지 않고 브라우저에 네이티브 ES 모듈(ESM)로 직접 제공합니다. 필요한 파일만 로드되므로 프로젝트 크기가 커져도 개발 서버가 즉각적으로 반응합니다 [2-4].
  * **프로덕션 환경:** 배포 시에는 Rollup을 사용하여 애플리케이션을 번들링하며, 자동 코드 스플리팅 및 사용하지 않는 코드를 제거하는 트리 쉐이킹(Tree-shaking)을 통해 최적화된 정적 에셋을 제공합니다 [5, 6].
* **초고속 컴파일 및 사전 번들링 (Fast Compilation & Pre-bundling)**
  * Vite는 esbuild나 최신 Rust 기반 트랜스포머인 SWC(Speedy Web Compiler)를 활용하여 JSX 및 TypeScript 파일을 사실상 즉시 컴파일합니다 [4, 7]. 기존 Babel을 SWC로 대체하면 핫 모듈 리로드 시간이 크게 단축됩니다 [8].
  * 개발 중 새로고침 속도를 최적화하기 위해 종속성을 사전 번들링(Pre-bundling, `optimizeDeps`)합니다 [8].
* **설정 및 플러그인 생태계 (Configuration & Plugins)**
  * `vite.config.js`를 통해 경로 별칭(Path Aliases), CORS 문제를 방지하는 개발 서버 프록시, `VITE_` 접두사가 붙은 환경 변수 등을 유연하게 설정할 수 있습니다 [7, 9, 10].
  * SVG를 React 컴포넌트로 가져오기 위한 `vite-plugin-svgr`, 오프라인 PWA 지원을 위한 `vite-plugin-pwa`, 번들 크기를 시각적으로 분석하는 `rollup-plugin-visualizer` 등 강력한 플러그인 생태계를 지원합니다 [11-13].
* **번들 사이즈 최적화 (Bundle Optimization)**
  * 기본적으로 Vite는 앱 코드와 모든 종속성(node_modules)을 하나의 `index.js`에 담아 빌드합니다. 이를 방지하기 위해 `vite.config.ts`의 Rollup 옵션에서 `manualChunks`를 설정하여 React 코어 라이브러리 등 무거운 벤더를 분리하고 브라우저 캐싱 효율을 높입니다 [6, 14, 15].
  * `React.lazy()`와 `<Suspense>`를 결합한 라우트 레벨 동적 임포트를 통해 초기 메인 번들 크기를 극적으로 줄일 수 있습니다 [11, 14, 15].

## ⚖️ Trade-offs & Caveats
* **대형 청크 경고 및 초기 번들 비대화 (Large Chunks Warning):** Vite는 기본적으로 모든 종속성을 단일 파일로 빌드하기 때문에, 수동으로 코드 스플리팅을 하지 않으면 프로덕션 빌드 시 "500kB 초과" 경고가 발생할 수 있습니다. 이는 다운로드 시간을 지연시키고 낮은 성능의 모바일 기기에서 파싱 및 컴파일에 무리를 주어 FCP, LCP, INP와 같은 Core Web Vitals 지표를 악화시킬 수 있습니다 [14, 16, 17].
* **개발자 도구 캐싱 의존성:** Vite는 모듈 로딩 성능을 위해 브라우저의 캐싱에 크게 의존합니다. 따라서 개발 중 브라우저 개발자 도구에서 "캐시 사용 안 함(Disable cache)"을 설정하면 개발 서버가 느려지는 부작용이 발생할 수 있습니다 [18].
* **플러그인 남용으로 인한 성능 저하:** 과도한 플러그인 사용은 개발 서버의 속도를 저하시킬 수 있으므로, 구성을 최소화하고 필요한 플러그인만 유지해야 합니다 [18].
* **사전 번들링 관리 필요성:** 규모가 크거나 특이한 외부 종속성의 경우, `optimizeDeps` 설정을 수동으로 제어하지 않으면 개발 환경에서 사전 번들링으로 인한 속도 저하가 발생할 수 있습니다 [8, 11].

## 🔗 Knowledge Connections

### Related Concepts

#### [아키텍처/기반 기술]
- Native ES Modules (ESM)
  - 연결 이유: Vite가 개발 단계에서 빠른 구동 속도를 달성하기 위해 활용하는 브라우저의 기본 모듈 시스템입니다 [2, 4].
  - 이 개념을 통해 더 깊게 이해할 수 있는 부분: 과거 도구(Webpack)의 무거운 사전 번들링 방식과 대비되는 Vite의 '요청 시 제공(On-demand serving)' 메커니즘의 원리.

- [[Rollup|Rollup]]
  - 연결 이유: Vite의 프로덕션 빌드를 담당하는 내부 번들러입니다 [5, 6].
  - 이 개념을 통해 더 깊게 이해할 수 있는 부분: 배포 환경에서 어떻게 `manualChunks`를 활용하여 번들을 분할하고, 트리 쉐이킹을 통해 최적화된 결과물을 도출하는지 그 과정 [10, 16].

- SWC
  - 연결 이유: 기존의 Babel을 대체하여 JSX와 TypeScript 컴파일을 엄청나게 빠른 속도로 처리하는 Rust 기반 트랜스포머입니다 [4, 7, 8].
  - 이 개념을 통해 더 깊게 이해할 수 있는 부분: Vite 환경에서 React 애플리케이션의 핫 리로드와 빌드 퍼포먼스를 한 차원 끌어올리는 컴파일러의 역할.

#### [최적화 기법]
- Code Splitting & manualChunks
  - 연결 이유: 500kB 이상의 거대한 메인 번들 경고 문제를 해결하기 위해 Vite/Rollup 환경에서 벤더 코드와 앱 코드를 나누는 핵심 기법입니다 [6, 14, 15].
  - 이 개념을 통해 더 깊게 이해할 수 있는 부분: 브라우저 병렬 다운로드와 효율적인 캐시 무효화 전략, 초기 페이로드 최소화 방법 [17, 19].

### Deeper Research Questions

- Vite의 네이티브 ESM 기반 개발 환경과 Rollup 기반 프로덕션 환경 사이의 차이로 인해, 런타임 또는 빌드 타임에 발생할 수 있는 호환성 문제나 예외 케이스는 무엇인가?
- 대규모 애플리케이션에서 `optimizeDeps`를 통한 사전 번들링 메커니즘 최적화를 위해 구체적으로 어떤 기준을 가지고 종속성을 분리/포함해야 하는가?
- `@vitejs/plugin-react-swc` 사용 시, 기존 Babel 생태계의 커스텀 플러그인들을 어떻게 이관하거나 대체해야 하는가?
- `manualChunks`를 세밀하게 설정할 때 벤더 라이브러리의 중복 포함을 막고 가장 이상적인 청크 크기를 유지하는 전략은 무엇인가?
- Vite 환경에서 라우트 레벨 지연 로딩(`React.lazy`) 적용 시 발생하는 워터폴(Waterfall) 네트워크 요청 문제를 방지하기 위해 `preload` 또는 `prefetch` 힌트를 어떻게 결합할 수 있는가?

### Practical Application Contexts

- **Implementation:** `npm create vite@latest`를 사용해 불필요한 설정 없는 가벼운 초기 구조를 생성하고, `vite.config.js`에 `@vitejs/plugin-react-swc`와 같은 플러그인, 경로 별칭(`@/components` 등), 백엔드 API 연동을 위한 proxy 설정을 구현합니다 [3, 7, 9, 10].
- **System Design:** 프론트엔드 시스템 설계 시 개발 환경(빠른 피드백 루프 보장)과 배포 환경(고도의 압축 및 병렬 로드를 위한 모듈화 보장)에 다른 전략을 취하는 Vite의 하이브리드 철학을 아키텍처에 반영합니다 [5].
- **Operation / Maintenance:** CI/CD 파이프라인이나 로컬 빌드 후 `rollup-plugin-visualizer` 플러그인을 활용하여 어떤 패키지가 메인 번들 용량을 차지하는지 시각적 트리맵으로 정기 점검하고 최적화합니다 [11, 13, 18].
- **Learning Path:** 모듈 번들러의 발전 과정(Webpack -> ES Modules 네이티브 도입 -> Vite)을 학습한 후, 빌드 도구 차원의 최적화(`manualChunks`)와 React 프레임워크 차원의 최적화(`React.lazy`)가 결합되었을 때의 시너지를 이해하는 방향으로 학습을 진행합니다 [2, 6, 15].
- **My Project Relevance:** Vite 빌드 시 "Some chunks are larger than 500 kB" 경고가 발생했을 때 당황하지 않고, 자주 변경되지 않는 벤더 코드(React 코어, 차트 라이브러리 등)를 분리하고 라우터 레벨에서 지연 로딩을 도입하여 다운로드 속도 및 FCP, LCP를 개선하는 데 직접적으로 적용합니다 [14-16].

### Adjacent Topics

- Webpack
  - 확장 방향: Vite가 등장하기 전 업계 표준이었으나 시작 전 전체 번들링 과정으로 인해 무거운 구조를 가진 Webpack의 한계와 Vite와의 아키텍처 비교 [1, 2].
- [[Core Web Vitals|Core Web Vitals]]
  - 확장 방향: Vite의 청크 분할 및 지연 로딩 기법이 실제 사용자 경험 지표인 FCP(First Contentful Paint), LCP(Largest Contentful Paint), INP(Interaction to Next Paint)에 어떻게 직결되는지 탐구 [17, 20].

---
*Last updated: 2026-04-30*