BE/Spring & Spring Boot

[Spring Boot] 멀티 모듈 프로젝트

baek-dev 2025. 2. 26. 19:25

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를 활용하여 버전 및 의존성을 통합 관리.