SpringBoot/심화 주제
멀티모듈 프로젝트 구성
DEVLIB
2025. 4. 16. 11:48
728x90
멀티모듈 프로젝트란?
하나의 루트 프로젝트(Parent) 아래에 여러 개의 서브 모듈을 구성하여 각 모듈이 독립된 책임을 갖도록 분리하는 구조입니다.
프로젝트 구조 예시
my-project/
├── build.gradle ← 루트 빌드 설정
├── settings.gradle ← 모듈 등록
├── common/ ← 공통 유틸/Config 모듈
│ └── build.gradle
├── domain-member/ ← 회원 도메인
│ └── build.gradle
├── domain-order/ ← 주문 도메인
│ └── build.gradle
├── api/ ← 외부 API를 받는 모듈 (Controller 포함)
│ └── build.gradle
└── core/ ← DB 설정, 공통 설정 등
└── build.gradle
1. settings.gradle
rootProject.name = 'my-project'
include 'common', 'domain-member', 'domain-order', 'api', 'core'
2. 루트 build.gradle
plugins {
id 'java'
}
subprojects {
group = 'com.example'
version = '1.0.0'
repositories {
mavenCentral()
}
apply plugin: 'java'
}
공통 의존성, 설정 등을 subprojects 안에서 일괄 처리
3. 서브 모듈 build.gradle 예시
domain-member/build.gradle
dependencies {
implementation project(':common')
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
api/build.gradle
dependencies {
implementation project(':domain-member')
implementation project(':domain-order')
implementation project(':common')
implementation 'org.springframework.boot:spring-boot-starter-web'
}
모듈 간 의존 구조 설계
원칙: 하위 모듈은 상위 모듈을 참조하면 안 됩니다.
예시 구조 (위 → 아래로 참조)
common
↑
domain-member, domain-order
↑
api (컨트롤러)
모듈 책임 분리 예시
모듈 |
역할 |
common | DTO, 공통 유틸, 예외 클래스 |
domain-* | 비즈니스 로직 (Service, Repository, Entity 등) |
api | Controller + 외부 요청 처리 |
core/config | 환경 설정, Security, DB 등 |
테스트와 실행
- api 모듈에 @SpringBootApplication 있는 main class 정의
- 실행: ./gradlew :api:bootRun
- 테스트: 모듈별로 ./gradlew :domain-member:test 등 실행 가능
실무 팁
항목 | 팁 |
Git 관리 | 모듈별 .gitignore 가능 |
빌드 속도 | --parallel 옵션 사용 |
팀 개발 | 모듈별 담당자 지정하면 협업에 최적화 |
API 경량화 | 불필요한 의존성 최소화 (ex. domain 모듈에서 web 제외) |
마무리 요약
항목 | 설명 |
구조 | 루트 + 여러 서브 모듈 |
목적 | 책임 분리, 확장성 확보, 유지보수 용이 |
설정 | settings.gradle, 모듈별 build.gradle |
실무 활용 | 대규모 백엔드, 모놀리식 구조 최적화 |
LIST