본문 바로가기

Spring Boot

[Spring Boot] 멀티 모듈 설정하기

728x90

Spring Boot에서 멀티 모듈 설정을 구성하는 것은 대규모 애플리케이션을 모듈화하여 코드 관리와 재사용성을 높이는 데 유리합니다. 멀티 모듈 구조를 활용하면 프로젝트를 독립적인 하위 모듈로 분리할 수 있어 유지보수와 협업이 수월해집니다. 다음은 Spring Boot에서 멀티 모듈 설정하는 방법과 추가 설명입니다.

 

 

멀티 모듈이란?

멀티 모듈은 하나의 루트 프로젝트 내에 여러 하위 모듈(서브 모듈)을 포함하는 프로젝트 구조입니다. 루트 프로젝트의 build.gradle 파일에서 전체 프로젝트 설정을 관리하고, 하위 모듈은 각각의 독립적인 빌드 설정을 가지면서도 상위 모듈과 연계할 수 있습니다. 각 모듈은 독립적으로 개발 및 테스트가 가능하며, 필요에 따라 상호 참조할 수 있습니다.

멀티 모듈의 장/단점

장점

  1. 분리된 모듈 관리: 각각의 모듈은 독립적이므로 특정 기능 또는 도메인에 맞게 개발하고, 필요 시 모듈 간 의존성을 지정할 수 있습니다.
  2. 재사용성 향상: 공통적으로 사용되는 모듈(예: 데이터베이스, 공통 유틸리티)은 다른 모듈에서 손쉽게 재사용할 수 있습니다.
  3. 빌드 효율성: 전체 빌드 대신 변경된 모듈만 빌드할 수 있어 빌드 시간이 단축됩니다.
  4. 협업 용이: 각각의 모듈을 독립적으로 개발할 수 있어 팀원들이 특정 모듈에 집중하여 작업할 수 있습니다.

단점

  1. 복잡성 증가: 멀티 모듈 구조는 설정과 관리가 다소 복잡하여 작은 프로젝트에는 적합하지 않을 수 있습니다.
  2. 빌드 구성 관리: 각 모듈의 build.gradle 파일을 개별 관리해야 하므로 설정에 신경 써야 할 부분이 늘어납니다.

 

 

Spring Boot 멀티 모듈 설정하기

1. 프로젝트 생성

먼저 Spring Initializr를 통해 루트 프로젝트를 생성합니다. Spring Boot 버전, 필요한 의존성 등을 설정하고 프로젝트를 다운로드하여 기본적인 스프링 부트 프로젝트를 준비합니다.

 

 

2. 루트 패키지에서 모듈 생성하기

다음으로 각 모듈을 설정합니다. 프로젝트 루트에서 우클릭하여 새로운 모듈을 추가합니다.

  1. 루트 패키지 우클릭 → New → Module → 모듈 이름 입력 (예: module-name1)
  2. 동일하게 두 번째 모듈도 생성합니다. 예를 들어, module-name2와 같은 방식으로 추가합니다.

이때, 각 모듈은 독립적인 src 디렉토리와 build.gradle 파일을 가지게 됩니다.

 

 

3. src 파일 제거하기

각 모듈은 src 디렉토리를 가지고 생성되지만, 필요에 따라 제거할 수 있습니다. 모듈 내에서 src 폴더를 삭제하고, 각 모듈이 독립적인 설정만을 가지고 루트 프로젝트 내에서 협력하도록 구성합니다.

 

 

4. settings.gradle 파일 확인

루트 프로젝트의 settings.gradle 파일에 각 모듈이 포함되었는지 확인합니다. 예를 들어, 다음과 같은 형식으로 작성되어야 합니다.

 

include 부분에 각 모듈의 이름을 추가함으로써 멀티 모듈 구성이 완료됩니다.

 

 

5. build.gradle 파일 설정

루트 build.gradle 설정

루트 프로젝트의 build.gradle 파일에서는 공통적인 의존성과 설정을 관리합니다. 공통으로 적용할 의존성과 플러그인 설정을 추가하여 모듈 간에 일관성을 유지합니다.

plugins {
	id 'java' // 자바 플러그인을 사용하여 Java 프로젝트로 설정
	id 'org.springframework.boot' version '3.3.5' // 스프링 부트 플러그인을 적용하여 스프링 부트 애플리케이션으로 설정, 버전 3.3.5 사용
	id 'io.spring.dependency-management' version '1.1.6' // 스프링 의존성 관리를 위한 플러그인, 버전 1.1.6 사용
}

allprojects {
	repositories {
		mavenCentral() // 모든 하위 프로젝트에서 공통으로 사용할 Maven 중앙 저장소 설정
	}
}

bootJar {
	enabled = false // 스프링 부트 애플리케이션 실행 파일(jar) 생성을 비활성화 (루트 프로젝트에서만 사용할 경우 유용)
}

jar {
	enabled = false // 표준 자바 JAR 파일 생성 비활성화, 필요한 모듈에서만 JAR 생성
} 

1. jar Task

  • 역할: 일반적인 Java 아카이브 파일(JAR)을 생성합니다.
  • 사용 시기: Java 라이브러리처럼 외부에서 재사용할 수 있는 코드를 배포할 때 주로 사용합니다.
  • 내용: 클래스 파일, 리소스, 그리고 의존성 정보를 포함할 수 있지만, 애플리케이션을 독립적으로 실행하는 기능은 없습니다.
  • 실행 방법: 일반적으로 독립 실행 애플리케이션으로 구성되지 않으므로 직접 실행은 어렵고, 다른 애플리케이션에서 라이브러리로 사용됩니다.

2. bootJar Task

  • 역할: Spring Boot 애플리케이션을 독립 실행 가능한 JAR 파일로 패키징합니다.
  • 사용 시기: Spring Boot 애플리케이션을 독립적으로 실행 가능하도록 패키징할 때 사용합니다.
  • 내용: 애플리케이션 클래스 파일과 리소스 외에도 실행에 필요한 모든 의존성을 포함합니다. 추가로 Spring Boot 런처가 포함되어 있어 Java 명령으로 바로 실행할 수 있습니다.
  • 실행 방법: java -jar your-application.jar로 바로 실행할 수 있으며, Spring Boot 런처 덕분에 자동으로 main 메서드를 찾아 실행합니다.

 

 

자식 build.gradle 설정

각 모듈의 build.gradle 파일에서는 해당 모듈이 필요로 하는 의존성을 추가합니다. 예를 들어, module-name1이 데이터베이스 관련 기능을 가진다면, module-name1의 build.gradle에 데이터베이스 의존성을 추가할 수 있습니다.

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.3.5'
    id 'io.spring.dependency-management'
}

group = 'com.delivery'
version = '0.0.1-SNAPSHOT'

repositories {
    mavenCentral()
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

    implementation project(':module-name2')
}

test {
    useJUnitPlatform()
}

 

 

6. 모듈 간 의존성 설정하기

module-name1에서 module-name2를 사용하려면, module-name1의 build.gradle 파일에서 다음과 같이 모듈 간 의존성을 지정합니다.

implementation project(':module-name2')

이렇게 하면 module-name1이 module-name2에서 제공하는 코드를 사용할 수 있게 됩니다.

 

7. 멀티 모듈 프로젝트 실행하기

설정이 완료되면, 루트 프로젝트에서 빌드 및 실행을 수행하여 각 모듈이 제대로 작동하는지 확인합니다. 이를 통해 프로젝트가 모듈화되어 설정한 대로 동작하는지 테스트할 수 있습니다.

루트 프로젝트의 main 메서드를 실행하거나, 필요에 따라 각 모듈의 test 실행을 통해 모듈 간 의존성을 테스트합니다.

 

멀티 모듈 프로젝트는 복잡한 애플리케이션을 효율적으로 구성하는 데 도움이 됩니다. 필요한 모듈을 독립적으로 구성하여 재사용 가능하고 유지보수가 용이한 구조로 개발할 수 있습니다.

728x90