webpack은 모던 JavaScript 애플리케이션을 위한 정적 모듈 번들러이다.
webpack는 모듈 번들러로 웹 어플리케이션에서 사용되는 자원(HTML, CSS, JS, IMAGE 등...)을 모듈로 취급하고, 이들 모듈간의 의존성을 분석해 필요한 형태로 최적화된 번들로 만든다. 즉 webpack을 통해 어플리케이션 로딩 성능을 향상시킬 수 있는 것이다. webpack의 핵심 개념으로는 다음과 같다.
예를 들어 두 개의 JavaScript 파일 app.js와 util.js가 있고 app.js 파일은 util.js 파일에서 정의한 유틸리티 함수를 사용할 때, 이 두 파일을 하나의 번들로 묶어서 사용한다고 가정해보자. 이 때 코드는 아래와 같다.
코드에서 웹팩은 app.js에서 util.js를 import를 통해 의존하고 있음을 파악해 util.js 파일을 먼저 로딩해 의존성 문제를 해결한다. 이렇게 의존성을 파악하고 필요한 순서대로 결합해, 중복된 코드를 최적화하여 최종번들을 생성하는 것이다. 이렇게 초기 로딩시간을 단축시키고, 의존성 관리를 용이하게 만들 수 있다.
다음은 React와 CSS 파일을 사용하는 webpack을 사용하는 조금 더 복잡하 예시이다. src안의 파일들이 번들로 묶이는것을 확인할 수 있다.
Babel은 JavaScript 코드의 트랜스파일러로, 최신 버전의 JavaScript 코드를 오래된 버전으로 변환하여 브라우저 호환성을 유지하거나, 특정 문법을 지원하지 않는 환경에서도 사용 가능하게 한다. 주요 기능 및 개념으로는 다음과 같다.
REACT에서는 공식적으로는 "Create React App"이라는 도구를 사용해 프로젝트 생성을 관리하지만 요즘 트렌드는 Next.js나 Gatsby를 사용해 프로젝트 빌드를 수행한다. 이들 모두 다 내부적으로 Webpack과 Babel을 사용하며 사용하며, 자체적으로 설정을 관리하지만 커스터마이징도 가능하다.
VUE 에서는 Vue CLI라는 도구를 사용해 프로젝트 생성을 관리하지만 SSR과 정적 사이트 생성이 필요할 때 Nuxt.js를 사용해 프로젝트를 생성한다. 마찬가지로 이들 모두 다 내부적으로 Webpack과 Babel을 사용하며 사용하며, 자체적으로 설정을 관리하지만 커스터마이징도 가능하다.