멀티모듈은 하나의 애플리케이션을 여러 모듈로 나누는 구조.
하지만 실행은 여전히 하나의 서버(애플리케이션) 로 동작.
구성 방식 - 하나의 프로젝트를 여러 모듈로 분리
실행 방식 - 하나의 애플리케이션만 실행
배포 방식 - 전체를 함께 빌드 및 배포
통신 방식 - 모듈 간 직접 메서드 호출
의존 관계 - Gradle / Maven으로 모듈 간 의존성 설정
데이터베이스 - 보통 하나의 DB 사용
유지보수 - 한 프로젝트 안에 있어 관리가 쉬움
대표 기술 - Gradle, Maven
적합한 규모 - 소형 ~ 중형 프로젝트
코드 재사용 - 공통 모듈로 분리하여 재사용 가능
📂 예시 구조
api
core
domain
common
✅ 장점
구조가 단순하다
로컬 개발 및 테스트가 편리하다
코드 관리가 수월하다
초기 설계 비용이 낮다
❌ 단점
서비스 단위 독립 배포 불가
전체를 함께 빌드/배포해야 함
대규모 트래픽 확장에는 한계
MSA는 하나의 시스템을 여러 개의 독립적인 서비스로 분리하는 구조.
각 서비스는 독립적인 서버와 데이터베이스를 가지며,
네트워크 통신(REST API, 메시지 큐 등)을 통해 서로 데이터를 주고받는다.
구성 방식 - 여러 개의 독립 서비스로 분리
실행 방식 - 서비스별 개별 애플리케이션 실행
배포 방식 - 서비스 단위로 독립 배포 가능
통신 방식 - REST API, 메시지 큐 등 네트워크 통신
의존 관계 - 서비스 간 느슨한 결합 (Loose Coupling)
데이터베이스 - 서비스별 개별 DB 사용
유지보수 - 분산 관리로 복잡성 증가
대표 기술 - Spring Cloud, Docker, Kubernetes, Eureka, Gateway
적합한 규모 - 중대형 시스템, 대규모 트래픽
코드 재사용 - 공통 기능은 별도 공통 서비스로 구성
📂 예시 구조
user-service
order-service
product-service
✅ 장점
서비스 단위 독립 배포 가능
특정 서비스만 개별 확장 가능
장애 격리 가능
기술 스택을 서비스별로 다르게 선택 가능
❌ 단점
네트워크 통신 비용 발생
인프라 관리 복잡
모니터링 및 트랜잭션 관리 어려움
초기 설계 비용이 높음
하나의 애플리케이션 안에서 기능을 모듈로 분리한 구조.
유지보수 및 코드 관리에 유리하며, 서버는 하나만 실행.