Webpack Module Federation: 런타임 통합 원리와 마이크로 프런트엔드 적용
·2022.06.23 09:00
핵심 내용
별도 빌드된 컨테이너를 런타임에 통합하여 빌드 시간과 영향 범위를 줄이는 Webpack 5의 Module Federation 기능의 원리와 한계를 설명한다.
1 / 2
자세히 보기
Module Federation의 개념과 필요성
Webpack 5의 Module Federation은 여러 애플리케이션을 개별적으로 빌드한 후 런타임에 하나의 애플리케이션처럼 통합하는 기능이다. 기존 마이크로 프런트엔드 방식이 모노레포 기반의 빌드타임 통합에 의존했던 것과 달리, 이 기능은 독립적인 빌드 산출물을 서로 연결할 수 있게 한다.
이 기술은 서비스 규모가 커질 때 다음과 같은 이점을 제공한다:
- 빌드 및 배포 시간 단축: 변경된 컨테이너만 빌드하므로 전체 빌드 부담이 줄어든다.
- 영향도 최소화: 검증 범위를 변경된 컨테이너로 한정할 수 있다.
- 로딩 효율성: 배포된 컨테이너의 원격 모듈만 새로 로딩하므로 배포 직후 로딩 시간이 짧다.
핵심 용어와 동작 원리
Module Federation은 컨테이너(Container) 단위로 애플리케이션을 정의하며, 각 컨테이너는 다른 컨테이너의 **원격 모듈(Remote Module)**을 로딩하거나 **노출(Expose)**할 수 있다.
- 리모트 앱: 모듈을 Expose하는 컨테이너
- 호스트 앱: 원격 모듈을 사용하는 컨테이너
- 공유 모듈(Shared): 런타임에 한 번만 로딩되는 의존성 (예: React)
동작 과정:
- 리모트 앱은
remoteEntry.js파일을 생성하여 모듈 맵을 제공한다. - 호스트 앱은
remoteEntry.js를 로딩하여 전역 변수(예:app2)를 설정한다. - 호스트 앱은
import("app2/Button")과 같은 방식으로 원격 모듈을 동적으로 로딩한다.
주의사항 및 한계
실제 도입 시 다음과 같은 제약이 존재한다:
- 타입 정보 부재: 호스트 앱은 리모트 모듈의 타입을 자동으로 인식하지 못하므로, 타입 정의를 별도로 관리해야 한다.
- 경로 관리 복잡성: 환경별(개발, 운영 등)로
remoteEntry.js의 URL이 달라지므로, 빌드 시점이나 런타임에 적절한 경로 설정 로직이 필요하다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.