Maven 다중 모듈(Multi-module) 프로젝트 구성 가이드
Maven은 큰 프로젝트를 여러 개의 서브 모듈로 나누어 관리할 수 있는 기능을 제공합니다. 이를 통해 각 기능을 독립적으로 개발하고, 공통 모듈을 재사용할 수 있으며, 프로젝트 전체를 체계적으로 빌드할 수 있습니다.
🧱 기본 개념
다중 모듈 프로젝트는 하나의 루트(Parent) 프로젝트와 여러 개의 자식(Sub) 모듈로 구성됩니다.
루트 프로젝트는 각 모듈의 공통 설정, 의존성, 플러그인을 관리하는 역할을 합니다.
📂 디렉터리 구조 예시
my-project/
├── pom.xml ← 루트 POM
├── common/ ← 공통 모듈
│ └── pom.xml
├── service-a/ ← 기능 A
│ └── pom.xml
└── service-b/ ← 기능 B
└── pom.xml
🧩 루트 pom.xml 구성
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>common</module>
<module>service-a</module>
<module>service-b</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
🧩 자식 모듈 pom.xml 구성
<project>
<parent>
<groupId>com.example</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>service-a</artifactId>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>common</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>
🚀 빌드 실행 방법
루트 디렉토리에서 다음 명령어로 모든 모듈을 순차적으로 빌드합니다:
mvn clean install
💡 유용한 팁
- 각 모듈 간 의존성은 명확하게 관리 (
common→service-a또는service-b) - 루트 POM에서 의존성/플러그인을 관리하면 중복 제거 가능
mvn install -pl service-a -am: 특정 모듈만 빌드하되 필요한 모듈도 함께 빌드mvn test -pl service-b -am: service-b만 테스트
🧾 정리
- 루트 POM이 프로젝트 전체의 구조를 제어
- 각 모듈은 개별적으로 관리되며, 필요에 따라 다른 모듈을 참조할 수 있음
- 빌드 속도 최적화, 코드 재사용성, CI 파이프라인 연동에 특히 유리