본문 바로가기
프로그래머로의 여정

번들링(Bundling)의 개념

by nunaaa 2025. 8. 10.

번들링(Bundling)의 개념과 작동 원리

번들링은 여러 개의 모듈과 의존성을 하나 또는 몇 개의 파일로 결합하는 프로세스입니다. 웹팩(Webpack), 롤업(Rollup), Parcel 같은 모던 프론트엔드 도구들이 이 작업을 수행합니다.

📦 번들링이 필요한 이유

  1. 브라우저 호환성 문제 해결
    • import/export 같은 ES6 모듈 문법을 모든 브라우저가 지원하지 않음
    • CommonJS, AMD 등 다양한 모듈 시스템 통합
  2. 네트워크 효율성 향상
  3. graph LR A[번들링 전] -->|100개 JS 파일| B[100번 HTTP 요청] A -->|번들링 후| C[1-2번 HTTP 요청]
  4. 의존성 관리 자동화
    • 라이브러리 간 중복 제거
    • 종속성 그래프 분석을 통해 필요한 모듈만 포함

🔧 번들링 과정 상세

  1. 의존성 그래프 생성
    • 진입점(entry) 파일부터 모든 import 관계 분석
  2. // entry.js import { header } from './components/header.js'; import { footer } from './components/footer.js';
  3. 로더 처리
    • JavaScript 외의 리소스 처리:
      // webpack.config.js
      module: {
        rules: [
          { test: /\.css$/, use: ['style-loader', 'css-loader'] },
          { test: /\.(png|jpg)$/, use: ['file-loader'] }
        ]
      }
  4. 플러그인 적용
    • 코드 최적화, 에셋 처리 등 고급 작업:
      plugins: [
        new HtmlWebpackPlugin({ template: './src/index.html' })
      ]
  5. 출력 생성
    • 최종 번들 파일 생성 (예: main.bundle.js)

🛠️ 주요 번들링 도구 비교

도구 특징 사용 사례
Webpack 설정 유연, 플러그인 풍부 복잡한 SPA 애플리케이션
Rollup 트리 쉐이킹 우수, 출력 간결 라이브러리 개발
Parcel 제로 컨피그레이션 빠른 프로토타이핑
Vite ESM 기반, 개발 서버 빠름 모던 웹 프로젝트

💡 번들링의 부가 기능

  1. 코드 분할(Code Splitting)
    • 청크 파일 생성으로 초기 로딩 속도 개선
  2. // 동적 import const module = await import('./module.js');
  3. 트리 쉐이킹(Tree Shaking)
    • 사용하지 않는 코드 자동 제거
    • Rollup과 Webpack 4+에서 지원
  4. 소스 맵(Source Maps)
    • 압축된 코드와 원본 코드 매핑
    • 디버깅 용이성 제공

🏗️ 실제 번들링 결과 예시

번들링 전:

src/
  ├── index.js
  ├── math.js
  └── utils.js
node_modules/
  └── lodash/

번들링 후:

dist/
  └── main.bundle.js (모든 코드 포함)

번들링은 현대 웹 개발의 핵심 프로세스로, 개발자의 편의성과 애플리케이션 성능을 동시에 향상시키는 중요한 기술입니다.