IT Developer/Spring

Spring 기초 <37. Spring Boot에서 멀티 모듈(Multi-Module) 프로젝트 설계>

TEMA_ 2025. 4. 22. 13:45
반응형

스프링 Spring

37. Spring Boot에서 멀티 모듈(Multi-Module) 프로젝트 설계

 

안녕하세요! 태마입니다.

Spring 기초 강좌입니다.

 

강좌의 경우 

1. 주제 간단 정리

2. 상세 주제 정리

으로 이루어져 있습니다.

 

스프링 Spring

포스팅 시작하겠습니다 :)

 


 

1. 주제 간단 정리

 

1. 멀티 모듈 프로젝트란?

멀티 모듈(Multi-Module) 프로젝트는 하나의 프로젝트를 여러 개의 모듈(Module)로 나누어 관리하는 방식
대규모 애플리케이션에서 코드의 재사용성을 높이고 유지보수를 쉽게 하기 위해 사용됨

📌 단일 모듈 vs 멀티 모듈 프로젝트 비교

비교 항목단일 모듈 프로젝트멀티 모듈 프로젝트
구조 하나의 프로젝트에서 모든 코드 관리 여러 개의 독립적인 모듈 구성
유지보수 규모가 커질수록 유지보수 어려움 각 모듈별로 관리하여 유지보수 용이
재사용성 재사용이 어려움 공통 모듈을 활용하여 코드 재사용 가능
빌드 속도 전체 빌드를 해야 함 변경된 모듈만 개별적으로 빌드 가능

📌 멀티 모듈 프로젝트를 활용하면 "코드의 모듈화를 통해 유지보수성과 확장성을 향상 가능"


2. 멀티 모듈 프로젝트가 필요한 이유

대규모 애플리케이션에서는 단일 모듈 프로젝트의 복잡성이 증가하므로, 모듈을 분리하여 관리하는 것이 중요
팀별로 역할을 분리하여 병렬 개발이 가능하고, 빌드 속도를 최적화할 수 있음

📌 멀티 모듈 프로젝트의 주요 장점

장점설명
코드 분리 및 모듈화 각 기능을 독립적인 모듈로 분리 가능
재사용성 향상 공통 기능을 하나의 모듈로 만들어 여러 서비스에서 활용 가능
독립적 배포 가능 특정 모듈만 변경하여 개별적으로 배포 가능
빌드 속도 최적화 변경된 모듈만 빌드 가능하여 전체 빌드 시간을 단축

📌 멀티 모듈 프로젝트를 활용하면 "대규모 프로젝트에서도 효율적인 코드 관리 가능"


✅ 여기까지 멀티 모듈 프로젝트의 개념과 필요성을 배웠습니다!
👉 "그렇다면, Spring Boot에서 실제로 멀티 모듈 프로젝트를 어떻게 설계할까?"
✅ 2부에서 Spring Boot에서 멀티 모듈 프로젝트를 실제로 구성하는 방법을 배워봅시다!

 

반응형

 


 

2. 상세 주제 정리

 

1. 멀티 모듈 프로젝트 구조 설계

Spring Boot 멀티 모듈 프로젝트는 일반적으로 parent 프로젝트와 여러 개의 sub-module로 구성됨

📌 Spring Boot 멀티 모듈 프로젝트 구조 예시

multi-module-project/
 ├── parent-project (Root 프로젝트, 공통 설정 관리)
 │   ├── settings.gradle
 │   ├── build.gradle
 │   ├── gradle.properties
 │   ├── modules/
 │   │   ├── common-module (공통 기능 모듈)
 │   │   ├── api-module (API 서비스 모듈)
 │   │   ├── batch-module (배치 작업 모듈)
 │   │   ├── domain-module (도메인 모델 모듈)
 │   │   ├── service-module (비즈니스 로직 모듈)

parent-project: 전체 프로젝트를 관리하는 루트 프로젝트
common-module: 여러 모듈에서 공통으로 사용하는 유틸리티, DTO, 설정 파일 등을 포함
api-module: REST API를 제공하는 컨트롤러 및 서비스 로직 포함
batch-module: 배치 처리 관련 기능 포함
domain-module: 엔티티(Entity) 및 JPA 관련 설정 포함
service-module: 비즈니스 로직을 담당하는 서비스 계층 포함

📌 멀티 모듈을 활용하면 "각 모듈이 독립적으로 역할을 수행하며, 유지보수성이 향상됨"


2. Parent 프로젝트 설정 (Gradle 기반)

멀티 모듈 프로젝트에서는 parent 프로젝트에서 공통 설정을 관리해야 함

📌 1️⃣ parent-project/build.gradle 설정

plugins {
    id 'java'
}

allprojects {
    repositories {
        mavenCentral()
    }
}

subprojects {
    apply plugin: 'java'

    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter'
    }
}

모든 서브모듈에서 공통적으로 사용할 Spring Boot 의존성을 정의

📌 2️⃣ settings.gradle 설정

rootProject.name = 'multi-module-project'

include 'modules:common-module'
include 'modules:api-module'
include 'modules:batch-module'
include 'modules:domain-module'
include 'modules:service-module'

각 모듈을 settings.gradle에서 등록하여 빌드 가능하도록 설정

📌 Parent 프로젝트를 활용하면 "모든 모듈에서 공통적인 설정을 유지하며 일관된 빌드 환경을 제공 가능"


3. 각 모듈별 역할 및 설정

각 모듈별로 독립적인 역할을 수행하며, 의존성을 설정해야 함

📌 1️⃣ 공통 모듈 (common-module/build.gradle)

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
}

공통 유틸리티 및 DTO 등을 포함하는 모듈

📌 2️⃣ 도메인 모듈 (domain-module/build.gradle)

dependencies {
    implementation project(':modules:common-module')
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}

JPA 관련 설정 및 엔티티(Entity) 관리를 위한 모듈

📌 3️⃣ API 모듈 (api-module/build.gradle)

dependencies {
    implementation project(':modules:service-module')
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

REST API 컨트롤러를 포함하는 모듈

📌 4️⃣ 서비스 모듈 (service-module/build.gradle)

dependencies {
    implementation project(':modules:domain-module')
    implementation 'org.springframework.boot:spring-boot-starter-aop'
}

비즈니스 로직을 포함하는 모듈

📌 모듈별 역할을 분리하면 "코드의 응집도가 높아지고, 유지보수가 쉬워짐"


✅ 여기까지 Spring Boot에서 멀티 모듈 프로젝트를 구성하는 방법을 배웠습니다!
👉 "그렇다면, Spring Boot에서 CQRS 패턴을 적용하려면?"
✅ 다음 회차에서 Spring Boot에서 CQRS 패턴 적용 및 활용법을 배워봅시다!

 



 

반응형