2025. 12. 18. 09:17ㆍ개발/fe
---
# Micro-Frontend Architecture 패턴 A/B/C 비교
---
# 1. MFE 세 가지 패턴 요약
## 패턴 A
### **Shell만 모노레포, MFE는 모두 독립 레포**
* Shell: monorepo 내 Next.js 프로젝트
* MFE: 각각 별도의 Git repo
* Shell은 URL 기반으로 원격 MFE를 동적 로딩
* 실제 산업에서 **가장 많이 사용되는 방식**
**특징**
* Shell은 통합 관리
* MFE는 완전 독립 배포
* 플랫폼(공통 기능)과 기능 팀(feature)이 자연스럽게 분리됨
---
## 패턴 B
### **모든 앱이 monorepo (Shell + MFE), 배포만 독립**
* Git repo: 하나
* 각각의 앱(MFE)은 별도 CI/CD로 독립 배포
* 변경된 앱만 빌드/배포 (Turborepo, Nx 등 활용)
**특징**
* 공유 코드 관리 쉬움
* monorepo 규칙 통일 용이
* 팀 간 협업이 쉬움
* 중소 규모 조직에 적합
---
## 패턴 C
### **Repo도 완전 분리, 배포도 완전 분리 (Full Decoupling)**
* Shell: repo A
* MFE: repo B, repo C, repo D…
* Shared lib도 별도 repo (npm private registry 관리)
**특징**
* 팀 독립성 최대
* 스택 완전 독립 (React/Vue/Svelte 혼용도 가능)
* 운영·CI/CD 파이프라인 비용 최댓값
* 대규모 조직에 적합
---
# 2. 패턴 A / B / C 비교표
| 항목 | 패턴 A | 패턴 B | 패턴 C |
| ------------ | ------------------- | ------------ | -------------------- |
| Git repo 수 | Shell 1개 + MFE 여러 개 | 1개 | 모든 앱/공통 repo 각각 분리 |
| Shell 관리 | 모노레포 | 모노레포 | 독립 |
| MFE 관리 | repo별 완전 분리 | monorepo의 폴더 | repo별 완전 분리 |
| 운영 독립성 | 높음 | 중간 | 매우 높음 |
| Shared 코드 공유 | 어렵다 (npm 필요) | 매우 쉬움 | 매우 어렵다 (npm+버전관리 필요) |
| CI/CD 복잡도 | 중간 | 낮음 | 매우 높음 |
| 기술 스택 자유도 | 중간 | 낮음 | 최고 |
| 레이아웃/인증 통합 | 쉬움 | 쉬움 | 어려움 |
| 적합 규모 | 중~대형 | 소~중형 | 초대형 조직 |
---
# 3. Cesium 기반 서비스 특성 정리
Cesium 기반 시스템은 다음 특징을 가진다:
## 1) 전역 Viewer를 한 번만 생성해야 함
* Cesium viewer를 여러 MFE에서 각각 만들면
GPU 메모리 소비 급증
초기 로딩 지연
Viewer 객체 충돌 발생
* 즉, **전역 viewer는 Shell에서만 생성**해야 한다.
## 2) 사용자 권한별 서로 다른 기능·툴·레이아웃 제공
* 따로 관리하면 권한 정책이 어긋남
* Shell에서 공통 인증/권한 체크 필요
## 3) 각 Feature는 독립적이지만, Layout은 공통이어야 함
* 3D 뷰 + Panel 구성은 일관되어야 사용자 혼란 없음
* MFE는 기능만 담당해야 함
## 4) 성능 요구가 높음
* 3D 애플리케이션은 페이지 리로드 없이 Mount/Unmount 방식이 필수
* Shell 중심 구조가 안정적
---
# 4. Cesium 서비스에서는 패턴 A가 가장 적합한 이유
Cesium 기반의 사용자 맞춤형 다기능 플랫폼에서는
**Shell(플랫폼)과 Feature(MFE)의 역할 분리가 매우 중요하다.**
아래는 패턴 A가 가장 적합한 이유이다.
---
## 이유 1. 전역 Cesium Viewer를 Shell에서 통합 관리 가능
패턴 A는 Shell이 단일 repo로 유지되므로
* viewer 초기화
* viewer 인스턴스 공유
* 전역 event bus
* resize/layout Control
같은 Cesium 핵심 로직을 통합적으로 관리할 수 있다.
패턴 C처럼 viewer 책임이 분산되면 성능·구조가 깨진다.
---
## 이유 2. Shell이 Layout/UI/Toolbar 등을 통일할 수 있음
* Shell이 헤더/툴바/패널 위치 관리
* MFE는 기능 UI만 mount
* 사용자 권한에 따라 Shell이 어떤 MFE를 보여줄지 결정
Cesium 기반 서비스에서 UI 구조 통일은 필수적이다.
---
## 이유 3. 인증/권한 관리를 Shell에서 안전하게 통합
* 공통 SSO
* Access Token/Refresh Token 관리
* 사용자 역할 기반 MFE 접근 제어
패턴 C처럼 인증이 각 repo로 분산되면
보안 정책이 일관되지 않게 된다.
---
## 이유 4. MFE는 완전 독립 배포가 가능 → 기능 확장에 강함
Cesium 기반 플랫폼은 보통 기능이 많다:
* 레이어 관리
* 편집 도구
* 분석 기능
* 3D 모델 열람
* 시간축/시뮬레이션
* 사용자 설정 패널
모두 독립 MFE로 배포하면:
* 기능 업데이트가 빠르고
* 다른 기능에 영향을 주지 않고
* 오류에도 안심하고 release 가능하다
패턴 A는 이 독립성이 유지된다.
---
## 이유 5. 운영 복잡도는 C보다 훨씬 낮음
패턴 C는
* Shell도 repo 분리
* Shared UI도 repo 분리
* Auth Client도 repo 분리
* MFE도 repo 분리
→ 총 8~15개의 repo 운영되는 경우도 있음
Cesium처럼 기능이 많은 서비스에서는
운영 오버헤드가 너무 커진다.
패턴 A는 Shell만 monorepo로 묶여 있으니
* 플랫폼 팀 관리가 쉬워지고
* MFE 팀은 자유롭게 개발
정확히 균형 잡힌 구조다.
---
## 이유 6. 실제 GIS/Digital-Twin 기업 구조와 가장 유사
Cesium 기반 기업들은 대부분 다음 구조로 일함:
* **Shell / Viewer 플랫폼 팀**
* **툴/기능(Toolbox) 팀**
* **도메인 기능 팀**
* **분석/워크플로우 팀**
이때 플랫폼 팀은 Shell을 관리하고
기능 팀들은 독립 MFE 형태로 개발한다.
즉, 산업 표준적으로도 **패턴 A가 정답에 가장 가깝다.**
---
# 5. 결론
> **Cesium 기반의 사용자별 맞춤형 다기능 플랫폼**에서는
> **전역 Viewer + 통합 Layout + 공통 인증을 Shell이 담당하고,
> 기능은 독립 MFE로 제공하는 패턴 A가 가장 적합하다.**
패턴 B는 가능하지만 운영 비용 증가
패턴 C는 Viewer/레이아웃/권한 관리 단위가 분산되어
현실적으로 비효율적이다.
'개발 > fe' 카테고리의 다른 글
| ESLint id-length 적용은 의미가 있을까? (0) | 2026.02.24 |
|---|---|
| Turborepo 개념 정리 (0) | 2025.12.10 |
| console.log와 성능 (1) | 2025.12.03 |
| 가상화의 기준 (0) | 2025.12.03 |
| AI 로 프런트 디자인 하는 방법 (0) | 2025.08.18 |