[Tools] 모듈 번들링, Webpack과 Vite는 왜 필요할까?
🚀 시작하며
프로젝트를 처음 만들때, 함께 했던 팀원이 Vite가 더 좋다며 Vite를 적용하면서 당연하게 Vite를 기본으로 적용했습니다.
하지만 정확하게 Vite가 무엇이며 왜 사용되는지에 대해서 고민한 시간이 적었습니다.
이 글에서는 모듈 번들링이 왜 필요한지, 그리고 Webpack, Vite 같은 도구가 어떤 역할을 하는지를 실제 사용 흐름과 연결하여 공부합니다.
모듈 번들링이란?
✅정의
모듈 번들링이란?
여러 개의 자바스크립트 파일(모듈)을 하나 또는 몇 개의 파일로 합쳐서 브라우저가 효율적으로 로딩할 수 있게 만드는 과정입니다.
✅왜 필요한가?
자바스크립트는 모듈 시스템을 통해 코드를 파일 단위로 나눌 수 있게 되었지만, 다음과 같은 문제가 존재합니다.
-
HTTP 요청 수 증가
수십에서 수백개의 모듈을 브라우저가 개별적으로 불러오면 속도가 느려짐
-
브라우저 호환성 문제
모든 브라우저가 최신 모듈 사양을 완전히 지원하지 않음
-
리소스 처리 한계
자바스크립트 외의 리소스(CSS, 이미지 등)는 브라우저가 JS처럼 모듈로 처리 불가
-
성능 최적화의 어려움
코드 압축, 트레쉐이팅, 난독화 같은 최적화를 수작업으로 하기 어려움
➡️그래서 이를 해결하기 위해서 등장한 것이 번들러(Bundler)입니다.
번들러란?
번들러는 JS, CSS, 이미지 등 다양한 리소스를 모듈처럼 인식하고 하나의 파일로 묶는 도구 입니다.
우리가 실제로 사용하는 자원들은 JS가 아닌 파일들도 존재합니다. 예를 들어 SCSS, SVG, JSON 등이 있습니다. 그러나 브라우저는 오직 JS, HTML, CSS만 이해하기 때문에 이런 자원들을 JS로 변환하거나 정리해서 묶어주는 역할을 합니다.
✅주요 역할
- 모듈 해석 및 의존성 분석
- 하나 또는 여러 개의 파일로 묶기
- 코드 압축, 난독화, 트리쉐이킹 등 최적화 수행
- 핫 리로드(HMR), 개발 서버 제공
대표적인 번들러에는 Webpack, Rollup, Vite가 있습니다.
핫 리로드(HMR)이란?
애플리케이션을 종료하거나 완전히 다시 시작하지 않고도 코드 변경 사항을 즉시 반영하여 실행 중인 애플리케이션에 적용하는 기술
코드 수정 ➡️ 저장 ➡️ 앱 재시작 ➡️ 변경 확인
의 루틴은 시간낭비가 많은데, 이 과정을 줄여서 빠르게 피드백 받고, 개발 속도를 크게 향상 시켜줍니다.
Webpack이란?
Webpack은 가장 널리 사용되는 범용 모듈 번들러입니다.
✅특징
-
모든 것을 모듈로 간주
JS뿐만 아니라 CSS나 이미지 등도 모듈로 간주
-
로더(Loader)
다른 형식의 파일을 웹에서 사용할 수 있게 변환해주는 것
ex) SCSS ➡️ CSS
-
플러그인(Plugin)
추가 기능 제공
-
강력한 커스터마이징 가능
위에서 브라우저에서는 JS와 CSS, HTML은 이해한다고 했는데 왜 웹 팩이 변환해야하는지 궁금했습니다.
브라우저는 CSS를
<link>
로, 이미지는<img>
태그로 읽을 수 있습니다. 하지만 JS코드 안에서 CSS나 이미지를 직접 불러오는 것은 브라우저가 이해하지 못하기 때문에 CSS와 이미지 파일을 JS처럼 불러다 쓸 수 있게 처리해주는 것입니다.
✅단점
- 설정이 복잡할 수 있음
- 개발 서버 속도는 느린 편 (기본 HMR 속도 느림)
Vite란?
Vite는 ESM 기반의 차세대 번들러입니다.
개발 속도와 사용자 경험 개선에 집중한 도구입니다.
✅특징
- 개발 중에는 실시간 ESM 방식으로 모듈을 바로 로드 ➡️ 매우 빠름
- 프로덕션 빌드 시에는 Rollup 기반으로 최적화된 번들 생성
- 기본 설정이 간단하고 직관적
- TypeScript, JSX, CSS 모듈 등을 기본 지원
✅장점
- 빠른 스타트업 속도
- HMR이 거의 즉각적으로 작동함
- 최신 브라우저 중심 환경에 최적화
✅단점
- 아주 복잡한 요구사항(레거시 호환 등)에서는 Webpack보다 유연성이 부족할 수 있음
번들러를 사용해야하는 이유
이유 | 설명 |
---|---|
로딩 성능 개선 | 수십 개의 JS 파일 → 1~2개로 줄여서 네트워크 비용 절감 |
코드 최적화 | 트리쉐이킹, 압축, 난독화 등을 통해 앱 성능 개선 |
다양한 리소스 통합 | CSS, 이미지, 폰트 등도 JS처럼 다뤄서 통합 관리 가능 |
개발 생산성 향상 | HMR, DevServer 등으로 실시간 개발 경험 향상 |
크로스 브라우저 호환 | 최신 ESM 사용이 어려운 브라우저도 대응 가능 |
주요 번들러 비교
항목 | Webpack | Vite |
---|---|---|
개발 서버 | 느림 (전체 번들링 필요) | 빠름 (ESM 기반, on-demand 로딩) |
설정 난이도 | 복잡하지만 유연함 | 기본 설정 간단 |
번들링 툴 | 자체 번들링 시스템 | Rollup 사용 |
최적화 | 직접 구성 필요 | 기본 설정으로도 잘 되어 있음 |
사용처 | 대형 프로젝트, 복잡한 구조 | 대부분의 프론트엔드 프로젝트 |
댓글남기기