테마
마이크로프론트엔드 통합 방식 종합 비교
SSI, 빌드타임, iframe, Web Components, JS(AJAX), Module Federation 등 6가지 통합 방식을 통합 시점, 격리 수준, SPA 지원, 독립 배포, SEO, 성능, 복잡도 기준으로 종합 비교하고, 상황별 추천 방식과 Module Federation이 현대적 표준으로 자리 잡은 이유를 정리한다.
학습 목표
- 마이크로프론트엔드의 6가지 주요 통합 방식을 한눈에 비교할 수 있다
- 각 통합 방식의 통합 시점(빌드타임 vs 런타임 vs 서버)을 구분할 수 있다
- 7가지 비교 항목(통합 시점, 격리, SPA, 독립 배포, SEO, 성능, 복잡도)으로 각 방식을 평가할 수 있다
- 프로젝트 요구사항에 맞는 통합 방식을 선택하는 기준을 확립한다
- Module Federation이 현대 마이크로프론트엔드에서 가장 실용적인 이유를 설명할 수 있다
1. 통합 방식 전체 맵
마이크로프론트엔드의 통합 방식은 통합이 일어나는 시점과 위치에 따라 크게 세 범주로 나뉜다.
2. 6가지 통합 방식 종합 비교표
| 비교 항목 | SSI/ESI | 빌드타임 (npm) | iframe | Web Components | JS 통합 (AJAX) | Module Federation |
|---|---|---|---|---|---|---|
| 통합 시점 | 서버 렌더 시 | 빌드 시 | 런타임 (로드 시) | 런타임 (로드 시) | 런타임 (로드 시) | 런타임 (로드 시) |
| 격리 수준 | 없음 | 없음 | 완전 격리 | Shadow DOM 격리 | 없음 | 없음 (규약 기반) |
| SPA 지원 | 어려움 | 가능 | 부분적 | 가능 | 가능 | 가능 |
| 독립 배포 | 가능 | 불가능 | 가능 | 가능 | 가능 | 가능 |
| SEO | 우수 | 우수 | 불리 | 불리 | 보통 | 보통 |
| 성능 | 우수 | 우수 | 낮음 | 보통 | 보통 | 우수 |
| 구현 복잡도 | 낮음 | 낮음 | 낮음 | 중간 | 중간 | 중간~높음 |
| 프레임워크 공유 | 해당 없음 | 가능 | 불가능 | 불가능 | 불가능 | 가능 |
| 런타임 모듈 공유 | 불가능 | 불가능 | 불가능 | 불가능 | 불가능 | 가능 |
2.1 각 항목 해설
통합 시점:
- 서버 렌더 시(SSI): 사용자 요청이 서버에 도달하면, 서버가 여러 서비스의 HTML 조각을 모아 완성된 HTML을 응답한다.
- 빌드 시(npm): 각 마이크로앱을 npm 패키지로 게시하고, Shell 앱이 빌드할 때 의존성으로 포함하여 하나의 번들로 합친다.
- 런타임(클라이언트): 브라우저가 페이지를 로드한 후, JavaScript로 마이크로앱의 코드를 동적으로 가져와 조합한다.
격리 수준:
- 완전 격리(iframe): 별도 document, window, CSS, JS 컨텍스트. 가장 강력하지만 통신 비용이 크다.
- Shadow DOM 격리(Web Components): CSS와 DOM 쿼리는 격리되지만 JS 전역 상태는 공유된다.
- 없음(SSI, npm, JS, Module Federation): 같은 document 내에서 동작하므로 CSS 충돌 가능성이 있다. 별도의 네이밍 규약이나 CSS-in-JS 등으로 대응해야 한다.
독립 배포:
- 빌드타임 통합(npm)만 유일하게 독립 배포가 불가능하다. 마이크로앱을 수정하면 Shell 앱을 다시 빌드해야 하므로, 마이크로프론트엔드의 핵심 가치인 팀별 독립 배포가 훼손된다.
3. 방식별 상세 비교
3.1 SSI/ESI (서버 사이드 통합)
서버에서 HTML 조각을 삽입하는 방식으로, 초기 페이지 로드 성능과 SEO에 유리하다. 그러나 SPA 방식의 클라이언트 인터랙션을 구현하기 어렵고, 서버 인프라(Nginx, Varnish 등)에 대한 의존이 생긴다.
- 적합: 콘텐츠 중심 웹사이트, SEO가 핵심인 서비스
- 부적합: 복잡한 클라이언트 인터랙션, SPA
3.2 빌드타임 통합 (npm 패키지)
각 마이크로앱을 npm 패키지로 배포하고 Shell 앱에서 import하는 방식이다. 가장 단순하지만 독립 배포가 불가능하여 마이크로프론트엔드의 핵심 가치를 달성할 수 없다.
- 적합: 공통 라이브러리, 디자인 시스템 공유
- 부적합: 팀별 독립 배포가 필요한 마이크로프론트엔드
3.3 iframe
가장 오래되고 가장 강력한 격리를 제공하지만, 성능, SEO, 접근성, 반응형 모든 면에서 불리하다.
- 적합: 관리자 도구, 서드파티 위젯 삽입, 레거시 과도기
- 부적합: 고객 대면 서비스, 모바일 서비스
3.4 Web Components
웹 표준 기반으로 Shadow DOM 격리를 제공하지만, SSR 지원과 프레임워크 연동에 한계가 있다.
- 적합: 프레임워크 무관한 위젯 제공, 디자인 시스템
- 부적합: SSR 필수 서비스, React 생태계 중심 프로젝트
3.5 JS 통합 (AJAX)
JavaScript로 마이크로앱의 번들을 동적으로 로드하고 DOM에 마운트하는 방식이다. 유연하지만 로딩 순서 관리와 공유 의존성 처리가 복잡하다.
- 적합: 단순한 프래그먼트 통합, 소규모 마이크로프론트엔드
- 부적합: 대규모 마이크로프론트엔드, 공유 의존성이 많은 경우
3.6 Module Federation
Webpack 5에서 도입된 런타임 모듈 공유 메커니즘이다. 각 마이크로앱이 독립적으로 빌드/배포되면서도 런타임에 모듈(React, 공유 라이브러리 등)을 공유할 수 있다.
- 적합: 대부분의 현대적 마이크로프론트엔드 프로젝트
- 부적합: Webpack 외 번들러만 사용하는 프로젝트 (다만 Vite, Rspack 등도 지원 확대 중)
4. 상황별 추천 방식
4.1 결정 기준 요약
| 상황 | 추천 방식 | 이유 |
|---|---|---|
| SEO 최우선 + SPA 불필요 | SSI/ESI | 서버에서 완성된 HTML을 제공하므로 검색엔진 최적화에 가장 유리 |
| SEO + SPA 모두 필요 | Module Federation + SSR | 런타임 통합의 유연함과 SSR 프레임워크(Next.js 등)의 SEO를 결합 |
| 독립 배포 불필요 | 빌드타임 (npm) | 구현이 가장 단순. 공통 라이브러리, 디자인 시스템에 적합 |
| 완전 격리 + 내부 시스템 | iframe | 구현이 간단하고 격리가 완벽. 성능/SEO가 덜 중요한 내부 도구에 적합 |
| 프레임워크 무관 + 격리 | Web Components | 웹 표준으로 Shadow DOM 격리 제공. 위젯, 디자인 시스템에 적합 |
| 대부분의 현대적 프로젝트 | Module Federation | 독립 배포 + 런타임 모듈 공유 + SPA 지원. 가장 균형 잡힌 선택 |
5. Module Federation이 가장 현대적이고 실용적인 이유
6가지 통합 방식 중 Module Federation이 현대 마이크로프론트엔드의 사실상 표준으로 자리 잡은 이유는, 다른 방식들이 하나씩 가지고 있는 한계를 종합적으로 해결하기 때문이다.
5.1 다른 방식들의 한계와 Module Federation의 해결
| 다른 방식의 한계 | Module Federation의 해결 |
|---|---|
| 빌드타임 통합: 독립 배포 불가 | 각 마이크로앱이 독립적으로 빌드/배포되며, 런타임에 원격 모듈을 가져옴 |
| SSI: SPA 인터랙션 어려움 | 클라이언트에서 동적으로 모듈을 로드하고 SPA 내비게이션 지원 |
| iframe: 성능 오버헤드, 통신 복잡 | 같은 document 내에서 동작하므로 추가 컨텍스트 비용 없음 |
| Web Components: 프레임워크 연동 복잡 | React, Vue 등을 직접 공유하므로 프레임워크 래핑이 불필요 |
| JS 통합: 공유 의존성 중복 로드 | shared 설정으로 React, lodash 등 공통 모듈의 중복을 자동 제거 |
5.2 Module Federation의 핵심 이점
런타임 모듈 공유의 동작 원리:
Module Federation은 빌드 시 각 마이크로앱을 독립된 번들로 빌드하되, 공유 모듈(React, React-DOM 등)은 shared 설정에 따라 런타임에 버전 협상을 거쳐 단일 인스턴스만 로드한다. 이로 인해 각 마이크로앱이 React를 별도로 번들하지 않아도 되고, 중복 로드에 의한 번들 크기 증가를 방지한다.
javascript
// Webpack 5 Module Federation 설정 예시
// Shell 앱 (호스트)
new ModuleFederationPlugin({
name: 'shell',
remotes: {
teamA: 'teamA@http://localhost:3001/remoteEntry.js',
teamB: 'teamB@http://localhost:3002/remoteEntry.js',
},
shared: {
react: { singleton: true, requiredVersion: '^18.0.0' },
'react-dom': { singleton: true, requiredVersion: '^18.0.0' },
},
});
// 마이크로앱 (리모트)
new ModuleFederationPlugin({
name: 'teamA',
filename: 'remoteEntry.js',
exposes: {
'./App': './src/App',
},
shared: {
react: { singleton: true, requiredVersion: '^18.0.0' },
'react-dom': { singleton: true, requiredVersion: '^18.0.0' },
},
});5.3 Module Federation의 한계
Module Federation이 만능은 아니다. 알아두어야 할 한계와 트레이드오프가 있다.
| 한계 | 설명 |
|---|---|
| 번들러 의존 | 기본적으로 Webpack 5에 의존한다. Vite, Rspack 등에서의 지원은 확대되고 있지만 완전히 동등하지는 않다 |
| 격리 없음 | 같은 document에서 동작하므로 CSS 충돌 가능성이 있다. CSS Modules, CSS-in-JS 등의 별도 전략 필요 |
| 초기 설정 복잡도 | shared 설정, 버전 관리, 타입 공유 등 초기 구성에 학습 비용이 있다 |
| 런타임 의존성 | 리모트 서버가 다운되면 해당 마이크로앱 로드가 실패한다. 폴백 처리가 필요하다 |
| 디버깅 난이도 | 모듈이 여러 서버에서 로드되므로 소스맵 추적이 복잡할 수 있다 |
6. 통합 방식 진화의 흐름
마이크로프론트엔드 통합 방식은 서버 사이드 -> 빌드타임 -> 클라이언트 사이드(iframe, Web Components, JS) -> Module Federation 순서로 진화해 왔다. 각 단계는 이전 단계의 한계를 극복하려는 시도에서 탄생했다.
| 세대 | 방식 | 해결한 문제 | 남긴 한계 |
|---|---|---|---|
| 1세대 | SSI/ESI | 서버에서 다수 서비스의 HTML 조합 | SPA 인터랙션 불가 |
| 2세대 | 빌드타임 (npm) | 프레임워크 활용, SPA 지원 | 독립 배포 불가 |
| 3세대 | iframe | 완전한 격리, 독립 배포 | 성능, SEO, UX 문제 |
| 3세대 | Web Components | 표준 기반 격리, 독립 배포 | SSR 어려움, 생태계 부족 |
| 3세대 | JS 통합 (AJAX) | 유연한 런타임 통합 | 공유 의존성 중복 |
| 4세대 | Module Federation | 런타임 모듈 공유, 독립 배포, SPA | 번들러 의존, CSS 격리 없음 |
핵심 정리
| 핵심 개념 | 요약 |
|---|---|
| 6가지 통합 방식 | SSI, 빌드타임, iframe, Web Components, JS 통합, Module Federation |
| 통합 시점 구분 | 서버(SSI), 빌드(npm), 런타임(iframe, WC, JS, MF) |
| 독립 배포 | 빌드타임 통합만 유일하게 독립 배포 불가. 나머지는 모두 가능 |
| 격리 강도 순 | iframe(완전) > Web Components(Shadow DOM) > 나머지(없음) |
| SEO 유리 순 | SSI = 빌드타임 > JS = MF > WC > iframe |
| Module Federation 핵심 | 런타임 모듈 공유로 공유 의존성 중복 제거 + 독립 배포 + SPA |
| 현대적 추천 | 대부분의 프로젝트에서 Module Federation이 가장 균형 잡힌 선택 |
| 상황별 예외 | SEO 최우선이면 SSI, 완전 격리 필수면 iframe, 프레임워크 무관이면 Web Components |
다음 단계
지금까지 마이크로프론트엔드의 모든 통합 방식을 비교하고, Module Federation이 현대적 표준으로 자리 잡은 이유를 확인했다. 다음 장에서는 Module Federation의 구체적인 동작 원리, 설정 방법, 호스트/리모트 개념을 상세히 학습한다.