리액트(또는 현대 프론트엔드) 개발에서 Webpack·Rollup 같은 번들러가 필요한 이유는
한 문장으로 말하면:
브라우저가 이해할 수 없는 모듈 시스템·자원들을 하나의 최적화된 형태로 가공해 브라우저에서 동작하도록 만들기 위해서입니다.
1) 브라우저는 ES 모듈 이전에는 import/export를 이해하지 못했다
프론트엔드 개발자가 작성한 코드는 보통 이런 형태:
import Button from "./components/Button";
import { sum } from "./utils/math";
이런 모듈 시스템을 브라우저에서는 과거엔 직접 실행할 수 없었기 때문에,
번들러가 모든 파일을 하나로 묶어서 브라우저가 이해할 수 있는 구조로 만들어줘야 했습니다.
➡️ 여러 JS 파일 → 하나의 bundle.js
2) HTML/CSS/JS/이미지 등을 하나의 종속 그래프로 묶어줌
번들러는 모든 파일을 하나의 “그래프”로 보고, 필요한 모든 자원을 가져와 다음을 수행합니다.
- JS 파일 묶기 (dependency graph 생성)
- CSS / SCSS / LESS 변환
- 이미지 압축 및 Base64 인라인
- 파일 경량화(트리쉐이킹, 중복 제거)
➡️ “하나의 앱을 구성하는 모든 자원을 최적화해 패키징하는 과정”
3) 프로덕션 빌드 최적화를 위해
번들러는 단순히 묶는 것뿐만 아니라 성능 최적화를 함께 수행합니다.
✔ Tree Shaking
사용되지 않는 코드를 자동으로 제거.
✔ Minify
코드를 압축해 bundle 크기를 줄임.
✔ Code Splitting
페이지 별로 필요한 코드를 분리해서 초기 로딩 속도를 개선.
➡️ 빠른 로딩 = 더 좋은 UX + SEO + 비용 절감
4) 개발 환경에서 편리한 기능 제공
Webpack Dev Server, Vite Dev Server처럼 개발 중 자동 새로고침 / HMR(Hot Module Replacement)을 제공합니다.
- 코드 바꾸면 즉시 브라우저 반영
- 스타일/컴포넌트 수정 시 전체 새로고침 없이 즉시 업데이트
➡️ 개발 속도 대폭 증가
5) 최신 문법 변환(Babel)과의 통합
프론트엔드 코드는 최신 JavaScript 문법(ESNext), TypeScript, JSX 등을 많이 사용합니다.
하지만 브라우저는 모든 최신 문법을 이해하지 못합니다.
그래서 번들러는 Babel·SWC와 함께:
- JSX → JS로 변환
- TS → JS로 변환
- 최신 문법 → 하위 브라우저 호환 코드로 변환
➡️ 개발자는 최신 기술 그대로 사용하고, 번들러가 호환성을 알아서 해결
Webpack vs Rollup 간 차이
| 항목 | Webpack | Rollup |
| 목적 | 앱 번들링(웹사이트/SPA) | 라이브러리 번들링(패키지 배포) |
| 특징 | 거대 프로젝트에 강함, 로더와 플러그인 다양 | 더 작은 번들, Tree shaking 우수 |
| 개발 경험 | Dev Server, HMR 강력 | 작은 규모엔 빠름 |
| 추천하는 경우 | 리액트/SPA/대규모 웹앱 | npm 패키지, 유틸 라이브러리 배포 |
최종 정리
Webpack·Rollup 같은 번들러가 필요한 이유는:
- 브라우저가 이해할 수 없는 코드(모듈 시스템, TS, JSX 등)를 변환하기 위해
- 모든 자원을 하나의 패키지로 최적화하기 위해
- 성능을 향상시키기 위해
- 개발 편의를 높이기 위해
즉, 현대 프론트엔드는 빌드 없이 돌아갈 수 없고, 번들러는 빌드의 핵심 엔진 역할을 합니다.
'Coding Study > FrontEnd Study Note' 카테고리의 다른 글
| Streaming SSR 이란? (0) | 2025.12.01 |
|---|---|
| 서버 컴포넌트에 대해서 (1) | 2025.11.28 |
| 리액트에서 컴포넌트란 (0) | 2025.11.26 |
| Tanstack Query를 사용하는 이유 (1) | 2025.11.21 |
| localStorage와 sessionStorage의 차이점 (0) | 2025.11.21 |