Dev/Article

Modular Monolith 아키텍처

Luigi.yoon 2025. 5. 30. 17:11

Modular Monolith 아키텍처 정의

Modular Monolith모놀리식 아키텍처의 장점(단일 배포, 간단한 인프라)을 유지하면서도, 내부를 MSA처럼 모듈화하여 높은 응집도와 낮은 결합도를 갖는 아키텍처 스타일입니다.

 

출처 : https://www.milanjovanovic.tech/blog/what-is-a-modular-monolith

 

 

✅ 핵심 개념

요소 설명
단일 애플리케이션 하나의 실행 단위 (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/