2 분 소요

번들링이란?

번들링(Bundling)은 웹 애플리케이션에서 여러 개의 파일을 하나의 파일로 결합하는 과정을 의미합니다.

HTML, CSS, JavaScript 파일 등을 여러 개의 작은 파일로 분리 한 뒤, 이를 하나로 묶어 서버로 전송하거나 브라우저에서 더 효율적으로 로드할 수 있도록 최적화하는 방법입니다.

이는 웹 애플리케이션의 성능을 최적화하고 로딩 속도를 향상시키기 위해 사용됩니다.

번들링의 필요성

네트워크 요청 최소화

웹 애플리케이션에서 각각의 팡리은 개별적이 HTTP 요청을 통해 서버로부터 다운로드 됩니다. 웹 페이지가 로드될 때, 여러 개의 자원(CSS, JavaScript, 이미지 등)을 개별적으로 요청하는 것은 네티워크 부하를 크게 증가시키고, 페이지 로딩속도를 늦출 수 있습니다.

JavaScript 파일이 10개라면, 10개의 HTTP요청이 발생합니다. 이 과정에서 브라우저의 연결을 지속적으로 열어두어야하고, 네트워크 대역폭도 낭비될 수 있습니다.

번들링을 통해서 여러 파일을 하나로 묶음으로써 HTTP 요청을 수를 줄여 네트워크 트래픽을 최적화 할 수 있습니다.

캐싱 최적화

브라우저는 웹 자원들을 캐시하여 동일한 리소스에 대해 반복적으로 요청하지 않도록 합니다. 그러나 파일이 여러 개로 분리되어 있으면, 하나의 파일이 업데이트되면 모든 파일이 새롭게 캐시되어야 할 수 있습니다. 이때 번들링으로 묶어둔다면 변경된 파일만 캐시를 갱신할 수 있어 효율적입니다.

파일 압축 및 최적화

번들링 할 때 보통 압축과 최적화도 함께 이루어집니다. 이 과정에서 파일 크기를 줄여주므로, 클라이언트가 서버로부터 받아오는 데이터의 양을 줄일 수 있습니다.

번들링 과정

모듈 시스템

자바스크립트에서 모듈 시스템을 도입하면 , 애플리케이션 코드가 여러 파일로 나누어질 수 있습니다. ES6 모듈 또는 CommonJS 같은 방식으로 코드를 분리할 수 있습니다.

이때 번들링 도구가 이 여러 모듈을 하나의 파일로 결합하는 역할을 합니다.

번들링 도구

프론트엔드에서 번들링을 자동화하려면 번들러라는 도구를 사용해야 합니다. 대표적인 번들러 도구는 다음과 같습니다.

  • Webpack

    가장 많이 사용되는 번들링도구, JavaScript뿐만 아니라 CSS, 이미지, 폰트 파일 등 다양한 자원을 처리가능

  • Parcel

    간단한 설정으로 빠르게 프로젝트를 번들링할 수 있는 도구

  • Rollup

    주로 라이브러리나 애플리케이션에서 효율적인 번들링을 위해 사용

  • Vite

    모던 웹 애플리케이션을 위한 도구로, 빠른 빌드 속도와 효율적인 번들링 제공

이 도구들은 파일을 하나로 묶고, 필요한 파일만 로딩할 수 있도록 코드 스플리팅(Code Splitting)도 지원하며, 트리 쉐이킹(Tree Shaking)을 통해 불필요한 코드도 제거해줍니다.

번들링 과정에서의 최적화 기법

코드 스플리팅(Code Splitting)

코드 스플리팅은 전체 애플리케이션의 자바스크립트 파일을 하나로 묶는 대신, 필요할 때만 로딩되도록 파일을 분할하는 기법입니다.

예를 들면 한 페이지에만 필요한 자바스크립트 코드만 먼저 로드하고, 다른 페이지에서 필요할 때 로딩하도록 분할할 수 있습니다. 이 기법은 페이지 로딩 속도를 크게 향상시킵니다.

트리 쉐이킹(Three Shaking)

트리 쉐이킹은 사용되지 않는 코드(Dead Code)를 제거하는 기법입니다. 이 기법은 주로 ES6 모듈 시스템에서 효과적으로 작동합니다. 예를 들어, 어떤 모듈이 함수나 변수를 여러 개 export하지만 실제로 사용되지 않는 코드가 있다면, 이를 자동으로 제거하여 최종 번들 파일을 최적화합니다.

압축(Compression)

번들링 후, 파일 크기를 줄이기 위한 압축 과정이 필요합니다. 자주 사용되는 압축 방식으로는 UglifyJS, Terser등을 통해 자바스크립트 파일을 최소화하거나, CSSNano나 PostCSS를 통해 CSS 파일을 압축할 수 있습니다. 이를 통해 불필요한 공백, 주석 , 변수명 등을 제거하여 파일 크기를 최소화합니다.

번들 파일의 분할

일반저긍로, 하나의 큰 파일을 다운로드 하는 것보다 여러 개의 작은 파일을 병렬로 다운로드 하는 것이 더 빠르기 때문에, 번들 파일을 여러 개로 나누는 방법이 유용할 수 있습니다. 예를 들어 메인 애플리케이션 파이로가 추가적인 라이브러리 파일을 분리하여 로드하게 할 수 있습니다.

번들링의 문제점과 해결 방법

큰 번들 파일의 문제

번들링 제대로 이러지지 않거나, 너무 많은 파일을 하나로 묶게되면 번들 파일 크기가 지나치게 커질 수 있습니다. 이렇게 되면 로딩 시간이 길어지고, 초기 렌더링 속도가 저하될 수 있습니다. 이를 해결하려면 코드 스플리팅이나 Lazy Loading을 적용해 필요한 코드만 로드되로록 해야 합니다.

번들링 후 디버깅

번들링 후에 디버깅이 어려울 수 있습니다. 특히, 최소화된 코드에서는 원래 코드와 일치하는 정보를 찾기가 어려워집니다. 일르 해결하기 위해 소스맵(Sorce Maps)을 사용하여 온본 코드와 번들링된 코드 간의 매핑을 제공할 수 있습니다. 소스맵을 통해 디버깅을 쉽게 할 수 있습니다.

업데이트:

댓글남기기