번들링(Bundling)의 개념과 작동 원리
번들링은 여러 개의 모듈과 의존성을 하나 또는 몇 개의 파일로 결합하는 프로세스입니다. 웹팩(Webpack), 롤업(Rollup), Parcel 같은 모던 프론트엔드 도구들이 이 작업을 수행합니다.
📦 번들링이 필요한 이유
- 브라우저 호환성 문제 해결
import/export같은 ES6 모듈 문법을 모든 브라우저가 지원하지 않음- CommonJS, AMD 등 다양한 모듈 시스템 통합
- 네트워크 효율성 향상
graph LR A[번들링 전] -->|100개 JS 파일| B[100번 HTTP 요청] A -->|번들링 후| C[1-2번 HTTP 요청]- 의존성 관리 자동화
- 라이브러리 간 중복 제거
- 종속성 그래프 분석을 통해 필요한 모듈만 포함
🔧 번들링 과정 상세
- 의존성 그래프 생성
- 진입점(entry) 파일부터 모든 import 관계 분석
// entry.js import { header } from './components/header.js'; import { footer } from './components/footer.js';- 로더 처리
- JavaScript 외의 리소스 처리:
// webpack.config.js module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.(png|jpg)$/, use: ['file-loader'] } ] }
- JavaScript 외의 리소스 처리:
- 플러그인 적용
- 코드 최적화, 에셋 처리 등 고급 작업:
plugins: [ new HtmlWebpackPlugin({ template: './src/index.html' }) ]
- 코드 최적화, 에셋 처리 등 고급 작업:
- 출력 생성
- 최종 번들 파일 생성 (예:
main.bundle.js)
- 최종 번들 파일 생성 (예:
🛠️ 주요 번들링 도구 비교
| 도구 | 특징 | 사용 사례 |
|---|---|---|
| Webpack | 설정 유연, 플러그인 풍부 | 복잡한 SPA 애플리케이션 |
| Rollup | 트리 쉐이킹 우수, 출력 간결 | 라이브러리 개발 |
| Parcel | 제로 컨피그레이션 | 빠른 프로토타이핑 |
| Vite | ESM 기반, 개발 서버 빠름 | 모던 웹 프로젝트 |
💡 번들링의 부가 기능
- 코드 분할(Code Splitting)
- 청크 파일 생성으로 초기 로딩 속도 개선
// 동적 import const module = await import('./module.js');- 트리 쉐이킹(Tree Shaking)
- 사용하지 않는 코드 자동 제거
- Rollup과 Webpack 4+에서 지원
- 소스 맵(Source Maps)
- 압축된 코드와 원본 코드 매핑
- 디버깅 용이성 제공
🏗️ 실제 번들링 결과 예시
번들링 전:
src/
├── index.js
├── math.js
└── utils.js
node_modules/
└── lodash/
번들링 후:
dist/
└── main.bundle.js (모든 코드 포함)
번들링은 현대 웹 개발의 핵심 프로세스로, 개발자의 편의성과 애플리케이션 성능을 동시에 향상시키는 중요한 기술입니다.
'프로그래머로의 여정' 카테고리의 다른 글
| 범용 선택자(universal selector) (1) | 2025.08.18 |
|---|---|
| GitHub에 새로운 저장소(Repository)를 생성하고, 첫 번째 커밋을 올리는 각 Git 명령어 (0) | 2025.08.11 |
| Node.js, npm, npx란? (1) | 2025.08.10 |
| npm 레지스트리(Registry) (2) | 2025.08.10 |
| git log 화면의 index 의 의미 (1) | 2025.08.09 |