JavaScript 모듈로 이야기하는 번들러와 웹팩, 롤업, 비트에 대한 요약 정리
목차 펼치기
서두 - JavaScript 모듈에 대한 이야기.
서두 - JavaScript 모듈에 대한 이야기.
초창기 웹에서 JavaScript의 역할은 크지 않았기에 하나의 파일에 모든 기능을 개발해도 크게 문제가 되지 않았다. 하지만 JavaScript로 개발된 프로젝트의 규모는 갈수록 커지고 복잡해졌다. 모듈화되지 않은 거대한 코드는 복잡도 증가를 야기해 잠재적 위험을 높이고 유지보수를 어렵게 했다. 이를 해결하기 위해 물리적으로 JavaScript 파일을 분리해서 개발하기 위한 방법, 즉 JavaScript 모듈의 표준화가 필요해지게 되었고 이에 2009년 CommonJS와 AMD가 등장하게 되었다.
Node.js 진영에서는
require와
exports를 사용하는 CommonJS의 명세를 채택했고, 이 모듈화된 코드를 번들링하기 위해 최초의 번들러,
Browserify가 등장했다.
CommonJS와 AMD의 호환을 위해 UMD 패턴이 등장했고, 현재 웹팩이나 롤업에서도 ES6 모듈 로드의 fallback으로 UMD 패턴을 사용하고 있다.
이후 JavaScript 진영은 2015년 ES6 사양에서
import와
export를 사용하는 ES6 Module(ESM)을 공개했다. 이를 통해 간단한 문법으로 동기 및 비동기 로드를 비롯한 순환 참조 관리와 정적 분석, 트리 쉐이킹(Tree Shaking)을 쉽게 지원할 수 있게 되었다.
트리 쉐이킹 : import 되었지만 사용되지 않는 코드를 삭제하여 최적화하는 기법으로 롤업을 통해 대중화되었다.
ES6 문법을 지원하지 못하는 구형 브라우저에 대응하기 위해 트랜스파일러의 필요성이 대두되어 ‘바벨(Babel)’이 등장하게 되었다.
번들러(Bundler)란?
번들러(Bundler)란?
프로젝트의 소스 코드들을 압축하는 작업을 수행하는 프로그램을 말한다.
웹 사이트의 규모가 커져가면서 프로젝트에 사용되는 JavaScript 모듈의 개수는 급속히 늘어났는데, 웹 브라우저에서 1개의 파일을 다운로드 받는 것이 여러 파일을 다운로드 받는 것보다 훨씬 빠르기 때문에 여러 파일을 압축하여 최소한의 압축 파일 묶음인
번들을 생성하기 위해 사용한다.
트랜스파일링, 코드 스플리팅(Code Splitting), CSS 미니파이(CSS Minification), 이미지 파일 최적화 등 생산성과 성능을 위한 여러 추가 기능까지 함께 수행할 수 있어 대부분의 프로젝트에서 사용하고 있다.
코드 스플리팅 : 코드를 여러 청크로 나누어 필요한 순간에만 특정 청크를 로드함으로써 로딩 시간을 최적화 하는 기법.
CSS 미니파이 : 공백, 줄바꿈, 주석 등을 제거하여 CSS 코드를 최적화 하는 기법.
대표적인 번들러로 ‘웹팩(Webpack)’, ‘롤업(Rollup)’, ‘비트(Vite)’ 등이 있다.
