Spring Boot 프로젝트에서 멀티 모듈(Multi-Module) 프로젝트란, 하나의 루트 프로젝트에서 여러 개의 서브 모듈을 관리하는 방식을 의미함.
이렇게 하면 코드 재사용성, 유지보수성, 의존성 관리가 쉬워지고, 각 모듈을 독립적으로 개발 & 배포할 수 있음.
🛠️ 1. 멀티 모듈이란?
멀티 모듈 프로젝트는 하나의 루트 프로젝트 안에서 여러 개의 서브 모듈을 포함하는 구조임.
각 서브 모듈은 독립적인 기능을 담당하며, 필요에 따라 다른 모듈과 연결될 수 있음.
💡 멀티 모듈의 장점
✅ 코드 재사용성 → 공통 기능을 하나의 모듈로 분리하여 여러 모듈에서 사용 가능
✅ 모듈별 독립적인 개발 → 특정 모듈만 빌드/테스트 가능
✅ 빠른 CI/CD 적용 → 변경된 모듈만 빌드하여 배포 가능
✅ 의존성 관리 용이 → 프로젝트 전체의 pom.xml에서 의존성을 일괄 관리
🏗️ 2. 멀티 모듈 프로젝트 구조
📌 일반적인 Spring Boot 멀티 모듈 프로젝트 예시
my-multi-module-project/
│── pom.xml (루트 프로젝트)
│
├── common/ (공통 모듈)
│ ├── pom.xml
│ ├── src/main/java/com/example/common/ (유틸 클래스, DTO 등)
│
├── domain/ (비즈니스 로직 모듈)
│ ├── pom.xml
│ ├── src/main/java/com/example/domain/ (Entity, Service 등)
│
├── api/ (API 모듈 - Controller 포함)
│ ├── pom.xml
│ ├── src/main/java/com/example/api/ (Controller, DTO 등)
│
└── batch/ (배치 모듈)
├── pom.xml
├── src/main/java/com/example/batch/ (배치 처리)
• common → 공통 유틸, DTO, Exception Handling 모듈
• domain → Entity, Repository, Service를 포함하는 핵심 도메인 모듈
• api → REST API를 제공하는 Controller 모듈
• batch → 배치 프로세스를 관리하는 모듈
🔧 3. 멀티 모듈 프로젝트 설정 (Maven 기준)
✅ 1) 루트 pom.xml 설정 (Parent 프로젝트)
루트 프로젝트는 부모 프로젝트(parent project) 역할을 하며, 각 서브 모듈을 관리함.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-multi-module-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>common</module>
<module>domain</module>
<module>api</module>
<module>batch</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.2.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
🔹 핵심 설정:
• <modules> → 하위 모듈(common, domain, api, batch)을 선언
• <packaging>pom</packaging> → 루트 프로젝트는 pom 패키징으로 설정
• <dependencyManagement> → 모든 모듈이 동일한 Spring Boot 버전을 사용하도록 관리
✅ 2) 공통 모듈 (common/pom.xml)
공통 모듈에서는 DTO, 유틸리티 클래스, 예외 처리 등을 정의할 수 있음.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>my-multi-module-project</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>common</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
→ common 모듈은 api, domain, batch 모듈에서 사용 가능.
✅ 3) 도메인 모듈 (domain/pom.xml)
비즈니스 로직을 관리하는 모듈이며, common 모듈을 의존성으로 추가함.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>my-multi-module-project</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>domain</artifactId>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
</project>
→ common 모듈을 의존성으로 추가하여 공통 기능을 사용.
✅ 4) API 모듈 (api/pom.xml)
REST API를 제공하는 모듈이며, domain 모듈을 의존성으로 추가함.
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>domain</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
→ domain 모듈을 포함하여 서비스 레이어를 호출 가능.
🚀 4. 멀티 모듈 프로젝트 실행 및 빌드
✅ 1) 전체 빌드
mvn clean install
→ 모든 모듈을 빌드하고 로컬 .m2에 저장.
✅ 2) 특정 모듈만 빌드
mvn clean install -pl api
→ api 모듈만 빌드 가능.
✅ 3) 특정 모듈 실행
cd api
mvn spring-boot:run
→ api 모듈의 애플리케이션 실행.
🎯 결론
✅ 멀티 모듈 프로젝트는 공통 기능을 재사용하고 독립적인 모듈 개발을 지원하는 구조.
✅ Spring Boot 멀티 모듈은 common, domain, api, batch 등의 모듈로 구성 가능.
✅ Maven의 parent, modules, dependencyManagement를 활용하여 버전 및 의존성을 통합 관리.
'BE > Spring & Spring Boot' 카테고리의 다른 글
[Spring Boot] DispatcherServlet (0) | 2025.03.07 |
---|---|
[Spring Boot] 스프링 배치 (Spring Batch) (0) | 2025.03.01 |
[Spring Boot] @TestMethodOrder (0) | 2025.02.25 |
[Spring Boot, JPA] 리플렉션 (0) | 2025.02.23 |
[Spring Boot] Service를 Interface + ServiceImpl 구조로 사용하는 이유 (0) | 2025.02.20 |