Dev/Article
Modular Monolith 아키텍처
Luigi.yoon
2025. 5. 30. 17:11
Modular Monolith 아키텍처 정의
Modular Monolith는 모놀리식 아키텍처의 장점(단일 배포, 간단한 인프라)을 유지하면서도, 내부를 MSA처럼 모듈화하여 높은 응집도와 낮은 결합도를 갖는 아키텍처 스타일입니다.
✅ 핵심 개념
요소 | 설명 |
단일 애플리케이션 | 하나의 실행 단위 (1개의 프로세스, 1개의 배포 아티팩트)로 유지됨 |
모듈화된 구조 | 도메인 별로 명확하게 모듈이 분리되고, 인터페이스를 통해 통신 |
강한 캡슐화 | 모듈 간 직접 접근이 제한되며, API 또는 이벤트로만 소통 |
단계적 MSA 전환 가능 | 필요 시 개별 모듈을 마이크로서비스로 독립시키기 쉬움 |
📊 비교 분석 도표
항목 | Modular Monolith | Monolith | Microservices (MSA) |
구조 | 단일 실행 + 내부 모듈화 | 단일 실행, 구조 분리 거의 없음 | 개별 서비스 단위 분산 구조 |
배포 단위 | 단일 배포 | 단일 배포 | 다중 배포 |
모듈 간 통신 | 내부 메서드 호출 또는 API 인터페이스 | 함수/클래스 직접 호출 | 네트워크(RPC, HTTP, 메시지 브로커) |
개발 복잡도 | 중간 | 낮음 | 높음 |
테스트 편의성 | 쉬움 (단일 테스트 환경) | 쉬움 | 어렵고 느림 (통합 테스트 필요) |
운영 복잡도 | 낮음 | 낮음 | 높음 (서비스 메쉬, 분산 트레이싱 등 필요) |
스케일링 단위 | 전체 앱 기준 | 전체 앱 기준 | 개별 서비스 기준 |
도입 비용 | 낮음~중간 | 낮음 | 높음 |
확장성 | 수평 확장은 어렵지만 모듈별 확장 구조 가능 | 어렵다 | 매우 뛰어남 |
전환 용이성 | → MSA로 전환하기 쉬움 | 어렵다 | 구조적 자유도 높음 |
📁 프로젝트 구조 (Gradle 기반 예시)
ecommerce-modular-monolith/
├── build.gradle
├── settings.gradle
├── modules/
│ ├── user/
│ │ ├── build.gradle
│ │ └── src/main/java/com/example/user/...
│ ├── product/
│ │ ├── build.gradle
│ │ └── src/main/java/com/example/product/...
│ ├── order/
│ ├── payment/
│ ├── inventory/
│ └── shared/ <-- 공통 유틸, 공통 도메인
└── app/
├── build.gradle
└── src/main/java/com/example/app/