
“여러 파일들을 하나로 결합하여 단일 파일로 만들어주는 개발도구”
모듈 번들러는 이름의 단어 그대로 여러개의 파일(모듈)을 묶어주는 개발도구입니다.
지난 [JAVASCRIPT] 모듈(module) 포스팅에서 언급 했듯 개발을 하면서 작성한 수 많은 코드들을 각각의 기능으로 나누어 관리한다고 했습니다.
프론트엔드 개발의 가장 큰 특징은 “모듈 단위로 나누어진 수많은 라이브러리와 파일들(.js, .jsx, .css, .jpg 등)을 서로 결합하여 개발”을 한다는 것입니다.
개발하는 웹 어플리케이션의 규모가 커짐에 따라 만들어지고, 사용하는 파일의 수와 종류가 엄청나게 증가하게 됩니다. 외부에서 가져와 사용하는 수많은 라이브러리들과 작성한 여러 파일들을 개발자가 스스로 이것들을 관리하는 것은 매우 어려운 일이 될 것입니다.
이때 각각의 모듈은 서로에게 의존성을 띄면서, 모듈 단위로 나누어진 그대로 서버에 올려 배포를 하였을 때 여러 문제들이 발생합니다.

이러한 몇가지 문제들을 해결하기 위해 등장한 것이 “모듈 번들러”입니다.
모듈 번들러를 사용하게되면, 위에서 언급한 문제들을 해결하면서 동시에 개발의 편의성과 더 나은 성능을 제공합니다.
한 번의 요청으로 대부분의 파일을 받아올 수 있게 한다. 한번 요청을 받아오게 되면 사용하면서 더욱 부드럽고 빠르게 동작하게 해줍니다.
또한 서로 나누어져 있던 모듈들을 하나의 파일로 합쳐서 가져오기 때문에 각각의 파일에서 import, export를 하는 의존성 문제도 자연스럽게 해결이 됩니
이때생길 수 있는 변수 충돌 문제도, 자체적으로 변환해주어, 자연스럽게 해결해 줍니다.
현재 대부분의 브라우저에서는 최신 JS문법을 지원하기는 하지만, 여전히 많은 곳에서 (구) 버전의 브라우저를 사용하는 곳이 많습니다.
그래서 ES6+ 등 최신 문법들을 제공하지 않는 브라우저에서도 잘 동작할 수있도록 ES5 에 맞게 코드를 변환해주어 오래된 버전의 브라우저에서도 잘 동작할 수 있도록 해줍니다.

오래되어 생태계가 풍부하고, 안정성이 뛰어나 가장 널리 사용되는 모듈 번들러

ES6 모듈을 중심으로 설계되었으며, 라이브러리와 프레임워크 개발에 적합한 번들러

"제로 설정" 모듈 번들러

“Node.js 스타일의
require()호출을 사용하여 모듈을 브라우저에서 사용할 수 있게 해주는 번들러”

앞서 알아본 각각의 모듈 번들러의 특성들을 고려하여 내가 지금 작업하려고 하는 프로젝트의 규모나 사용하는 기술 스택, 필요한 기능, 설정의 복잡성 등에 따라 적합한 모듈 번들러를 선택해야 합니다.
대부분 엔터프라이즈 급 기업에서는 커스터 마이징이 가능한 Webpack을 가장 많이 사용하고 있습니다.
최근에는 Vite라는 강력한 번들러가 나오면서 엄청나게 각광을 받고 있습니다. Vite 에 대해서는 따로 포스팅을 올려보도록 하겠습니다.
참고