2025-09-25 23:28
Tags: 리액트 넥스트
번들러
번들러의 주요 기능
- 의존성 그래프 구축:
- 번들링(Bundling):
- 의존성 그래프를 바탕으로, 번들러는 모든 모듈의 코드를 하나의 파일로 합친다.
- 이 과정에서 각 모듈의 스코프를 격리하여 전역 스코프 오염을 방지한다.
- 트랜스파일링(Transpiling):
- 최신 자바스크립트(ES6+) 문법이나 타입스크립트, JSX(React) 코드를 구형 브라우저에서도 이해할 수 있는 ES5 문법으로 변환한다.
- Babel 같은 트랜스파일러를 번들러에 통합하여 이 작업을 수행한다.
- 로더(Loader) 또는 플러그인(Plugin):
- 자바스크립트뿐만 아니라 CSS, 이미지, 폰트 파일 등 다양한 리소스를 번들러가 처리할 수 있도록 확장해주는 도구다.
- 예를 들어, CSS 로더는 CSS 파일을 자바스크립트 모듈로 변환하고, 이미지 로더는 이미지를 데이터 URL로 변환하거나 최적화된 파일로 생성
- 코드 스플리팅(Code Splitting):
- 모든 코드를 하나의 거대한 번들로 합치면 초기 로딩 시간이 길어질 수 있다.
- 코드 스플리팅은 번들 파일을 여러 개의 작은 덩어리로 나누어, 필요한 시점에만 해당 덩어리를 로드하게 한다.
- 이는 특히 SPA(Single Page Application)에서 초기 로딩 성능을 크게 향상시킨다.
- 성능 최적화:
번들러 작동 원리, 단계별 해부
- 진입점 설정:
- 번들러는
webpack.config.js와 같은 설정 파일에서 **진입점(Entry)**을 찾는다. 이 파일부터 번들링 과정이 시작된다.
- 번들러는
- 모듈 파싱:
- 진입점 파일의 코드를 읽고 분석한다.
import나require와 같은 모듈 구문을 찾아낸다.
- 진입점 파일의 코드를 읽고 분석한다.
- 의존성 탐색:
- 찾아낸 모듈 구문을 따라가며 다음 모듈로 이동한다.
- 이 과정을 재귀적으로 반복하며 모든 모듈의 의존 관계를 파악하고, 이를 시각화하면 거대한 의존성 그래프가 완성된다.
- 변환 및 로딩: 각 모듈 파일을 처리할 때, 파일 확장자에 따라 적절한 로더를 적용한다.
.js파일: 바벨 로더를 통해 트랜스파일링..scss파일: Sass 로더와 CSS 로더를 통해 일반 CSS로 변환 후 번들에 포함..png파일: 파일 로더를 통해 번들링 시점에 새로운 파일로 생성하고, 생성된 파일의 경로를 반환.
- 번들 파일 생성:
- 모든 모듈의 코드를 하나의 자바스크립트 파일로 합친다.
- 이 과정에서 각 모듈은 고유한 ID(숫자 또는 해시)를 부여받고, 모듈 로더 함수로 감싸져 서로의 스코프에 영향을 주지 않게 된다.
- 최적화:
- 완성된 번들 파일에 대해 난독화, 데드 코드 제거, 캐싱 처리를 위한 해시 값 추가 등의 최적화 작업을 수행한다.
- 결과물 출력:
- 최종적으로 생성된 번들 파일(번들러의 Output)을 지정된 경로에 저장한다.
| 특징 | 웹팩(Webpack) | 롤업(Rollup) | 파셀(Parcel) | 비트(Vite) |
|---|---|---|---|---|
| 설정 | 복잡함 | 비교적 간단함 | 거의 없음 | 간단함 |
| 속도 | 느림 | 보통 | 빠름 | 매우 빠름 |
| 용도 | 복잡한 웹 애플리케이션 | 라이브러리 | 간단한 프로젝트 | 모든 프로젝트 |
| 확장성 | 매우 뛰어남 | 보통 | 보통 | 보통 |
| 특징 | 풍부한 플러그인 생태계 | 효율적인 트리 쉐이킹 | 제로 설정 | ES 모듈 기반 개발 서버 |