ES 모듈과 Rollup은 각각 다른 목적을 가지고 있으며, Vite가 두 가지를 모두 지원하는 이유는 개발 환경과 프로덕션 환경에서 각각의 강점을 최대한 활용하기 위해서입니다.
ESM (ES 모듈)
- 목적: ES 모듈은 JavaScript 언어 자체에 내장된 모듈 시스템입니다. 모듈을 정의하고 가져오는 방법을 표준화하여, 브라우저와 Node.js에서 네이티브로 지원됩니다.
- 사용 시점: ES 모듈은 주로 개발 환경에서 사용됩니다. 브라우저가 직접 ES 모듈을 로드하고 실행할 수 있어, 번들링 없이도 개발 서버에서 빠른 피드백을 제공할 수 있습니다.
- 특징:
- 브라우저와 Node.js에서 네이티브로 지원.
- 정적 구조를 가지고 있어, 빌드 도구가 모듈 간의 의존성을 쉽게 분석 가능.
- 동적 임포트를 지원하여, 필요한 모듈만 로드 가능.
Rollup
- 목적: Rollup은 JavaScript 모듈 번들러입니다. 여러 개의 모듈 파일을 하나 또는 소수의 번들 파일로 묶어, 브라우저가 더 효율적으로 로드할 수 있게 합니다.
- 사용 시점: Rollup은 주로 프로덕션 빌드에서 사용됩니다. 코드 스플리팅, 트리 셰이킹, 압축 등 다양한 최적화 기법을 적용하여 최종 번들 크기를 줄이고 성능을 최적화합니다.
- 특징:
- 코드 스플리팅과 트리 셰이킹을 통해 최적화된 번들 생성.
- 다양한 플러그인을 통해 기능 확장 가능.
- 모듈 간의 의존성을 분석하여 불필요한 코드를 제거.
코드 스플리팅 (Code Splitting)
- 코드 스플리팅: 애플리케이션 코드를 작은 청크(chunk)로 분리하는 과정입니다. 이를 통해 필요한 코드만 로드하게 되어 초기 로딩 속도를 향상시킵니다.
- 예시: 예를 들어, 사용자가 로그인 페이지를 방문하면 로그인 페이지와 관련된 코드만 로드되고, 나머지 코드는 나중에 필요할 때 로드됩니다.
트리 셰이킹 (Tree Shaking)
- 트리 셰이킹: 실제로 사용되지 않는 코드를 제거하여 최종 번들 크기를 줄이는 과정입니다. 이는 import된 모듈에서 사용되지 않는 부분을 자동으로 제거합니다.
- 예시: 예를 들어, 큰 라이브러리에서 한두 가지 기능만 사용하는 경우, 그 기능들만 최종 번들에 포함되고 나머지는 제거됩니다.
Vite가 ES 모듈과 Rollup을 모두 지원하는 이유
Vite는 개발 환경과 프로덕션 환경에서 각각의 강점을 활용하여, 개발자 경험을 향상시키고 최종 번들의 성능을 최적화합니다.
개발 환경에서의 ES 모듈 지원
- 빠른 피드백:
- ES 모듈을 사용하면, 브라우저가 필요한 모듈을 동적으로 로드하므로 개발 서버를 매우 빠르게 시작할 수 있습니다.
- 변경된 모듈만 즉시 갱신하는 핫 모듈 리플레이스먼트(HMR)를 통해, 개발 중 빠른 피드백을 제공합니다.