스프링 멀티모듈을 학습하며 작성한 글입니다. 학습 과정에서 작성되었기 때문에 잘못된 내용이 있을 수 있으며, 이에 대한 지적이나 피드백은 언제든 환영입니다.
1. 변수를 한 곳에서 관리하는 이유
스프링 단일 모듈을 사용할 때는 아래와 같이 build.gradle 파일에서 변수를 관리해도 괜찮습니다. 프로젝트가 복잡하지 않기 때문에 이곳에서 모든 변수를 관리할 수 있기 때문입니다.
1
2
3
4
5
6
7
8
plugins {
kotlin("jvm") version "${VERSION}"
kotlin("plugin.spring")
kotlin("plugin.jpa")
id("org.springframework.boot") version "${VERSION}"
id("io.spring.dependency-management")
}
하지만 멀티 모듈을 사용하면 아래와 같이 여러 개의 패키지에서 버전을 각각 관리하기 때문에 관리하기가 힘들어집니다. 관리 포인트가 많아지면 실수하기도 쉬워지겠죠? 이를 어떻게 한 곳에서 관리하는지 알아보겠습니다.
2. 적용
한 곳에서 변수를 관리하기 위해서는 gradle.properties과 settings.gradle.kts 설정을 건드려야 합니다.
우선 루트 디렉토리에 gradle.properties 파일을 생성하고 이곳에 공통으로 선언할 변수들을 선언해 줍니다. 이는 gradle 관련 property를 관리해 주는 파일 입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
### Application version ###
applicationVersion=0.0.1
### Project configs ###
projectGroup=with-us
### Project dependency Versions ###
kotlinVersion=1.7.22
### Spring Dependency Versions ###
springBootVersion=3.0.7
springDependencyManagementVersion=1.0.11.RELEASE
springCloudDependenciesVersion=2022.0.2
### Ktlint ###
kotlin.code.style=official
이후 settings.gradle.kts에서 아래와 같이 변수를 선언해 줍니다. 이후 requestid 당 어떤 버전을 사용할지를 적용해서 주면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
rootProject.name = "jm-post"
include(
"jm-post-domain",
"jm-post-api",
"storage",
"support:logging"
)
pluginManagement {
val kotlinVersion: String by settings
val springBootVersion: String by settings
val springDependencyManagementVersion: String by settings
resolutionStrategy {
eachPlugin {
when (requested.id.id) {
"org.jetbrains.kotlin.jvm" -> useVersion(kotlinVersion)
"org.jetbrains.kotlin.plugin.spring" -> useVersion(kotlinVersion)
"org.springframework.boot" -> useVersion(springBootVersion)
"io.spring.dependency-management" -> useVersion(springDependencyManagementVersion)
}
}
}
}
이후 아래와 같이 버전을 제거해줍니다.
1
2
3
4
5
6
7
8
9
10
11
plugins {
kotlin("jvm")
kotlin("plugin.spring") apply false
id("org.springframework.boot") apply false
id("io.spring.dependency-management")
id("org.jlleitschuh.gradle.ktlint")
id("org.jlleitschuh.gradle.ktlint-idea")
id("io.gitlab.arturbosch.detekt")
jacoco
}
3. 정리
멀티 모듈에서 어떻게 한 곳에서 모든 버전을 관리하는지 살펴보았는데요, 이를 통해 실수를 줄이고 각 모듈을 효율적으로 관리할 수 있었으면 합니다.

