스프링 부트는 io.spring.dependency-management 플러그인을 통해 여러 라이브러리의 버전을 개발자 대신 관리해준다.
개발자는 원하는 라이브러리만 고르고 버전을 지정하지 않아도 된다.
스프링부트가 부트 버전에 맞는 최적화된 라이브러리 버전을 선택해준다.
플러그인 설정
io.spring.dependenct-management 플러그인을 적용하려면 build.gradle에 다음과 같이 써주면 된다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.7'
id 'io.spring.dependency-management' version '1.1.7' // ⭐
// ... 생략
}
그러면 아래와 같이 라이브러리의 버전을 명시해주지 않아도, 스프링 부트 버전에 맞는 의존성을 가져올 수 있다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation "org.springframework.boot:spring-boot-starter-data-jpa"
// ... 생략
}
스프링 부트가 라이브러리 버전을 관리하는 방법
위 문서에 bom(BOM, Bill Of materials)라는 항목이 있다.
이곳에 각각의 라이브러리에 대한 버전이 명시되어 있다.
이곳에 있는 라이브러리들은 스프링 부트에서 호환성 테스트를 했기 때문에 안전하게 사용할 수 있다. (100% 안전하다고 보장할 수는 없음)
io.spring.dependenct-management 플러그인을 적용하면 스프링 부트의 BOM을 자동으로 가져오는 것이다.
BOM에 있는 라이브러리의 버전들은 스프링 부트의 버전을 따르므로, 스프링 부트의 버전을 변경할 시에 라이브러리의 버전도 변경될 수 있다.
예시)
스프링 부트가 3.3.5 버전일 때, org.flywaydb:flyway-core와 org.flywaydb:flyway-mysql의 버전은 10.10.0이다.
따라서 build.gradle의 내용이 아래와 같은 경우, 빌드하면 flyway 라이브러리들은 10.10.0이 받아진다.
plugins {
id 'java'
id 'jacoco'
id 'org.springframework.boot' version '3.3.5'
id 'io.spring.dependency-management' version '1.1.6'
}
// 생략
dependencies {
//Flyway
implementation 'org.flywaydb:flyway-core'
implementation 'org.flywaydb:flyway-mysql' //mysql 8.0 지원
}

스프링 부트 버전을 변경한 뒤 재빌드하면 다른 버전의 flyway 라이브러리 의존성이 추가된 것을 확인할 수 있다.
plugins {
id 'java'
id 'jacoco'
id 'org.springframework.boot' version '3.3.5'
id 'io.spring.dependency-management' version '1.1.6'
}
// 생략
dependencies {
//Flyway
implementation 'org.flywaydb:flyway-core'
implementation 'org.flywaydb:flyway-mysql' //mysql 8.0 지원
}

스프링 부트가 관리하는 외부 라이브러리 버전을 확인하기
Spring Boot 공식 문서에서 아래 경로로 가면 알 수 있다.
Spring Boot > Appendix > Dependency Versions > Managed Dependency Coordinates
아래 링크는 스프링부트 3.3.x가 관리하는 라이브러리 버전 목록이다.
https://docs.spring.io/spring-boot/3.3/appendix/dependency-versions/coordinates.html
버전 관리가 되지 않는 라이브러리들, 라이브러리의 버전을 다른 걸로 지정하기
유명하지 않은 라이브러리들은 스프링 부트에서 자동으로 버전관리를 해주지 않는다.
이런 경우에는 개발자가 직접 뒤에 버전을 명시해주어야 한다.
예시)
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.9'
아래와 같이 ext 안에 버전을 명시하고 이걸 활용해도 된다.
예시)
ext {
lombokVersion = '1.18.38'
springCloudAwsVersion = '3.3.1'
springCloudVersion = '2024.0.2'
flywayVersion = '10.20.1'
snippetsDir = file('build/generated-snippets')
querydslVersion = '5.1.0'
lombokMapstructBindVersion = '0.2.0'
mapStructVersion = '1.5.5.Final'
}
// 생략...
dependencies {
//########## Lombok ##########//
implementation "org.projectlombok:lombok:${lombokVersion}"
testImplementation "org.projectlombok:lombok:${lombokVersion}"
annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
testAnnotationProcessor "org.projectlombok:lombok:${lombokVersion}"
}
라이브러리 버전 커스텀
스프링부트가 관리해주는 버전 대신 다른 버전을 쓰고 싶다면 아래와 같이 지정할 수 있다.
ext[''] 안에 들어가는 속성 값에 대해서는 아래 문서를 참고하여 적으면 된다.
https://docs.spring.io/spring-boot/appendix/dependency-versions/properties.html
Version Properties :: Spring Boot
The following table provides all properties that can be used to override the versions managed by Spring Boot. Browse the spring-boot-dependencies build.gradle for a complete list of dependencies. You can learn how to customize these versions in your applic
docs.spring.io
ext['slf4j.version'] = '1.7.20'
예시)
build.gradle에 이렇게 적어주면 9.20.1 버전의 flyway 의존성이 추가된 것을 확인할 수 있다.
개발자는 원하는 라이브러리만 고르고 버전을 지정하지 않아도 된다.
스프링부트가 부트 버전에 맞는 최적화된 라이브러리 버전을 선택해준다.
ext['flyway.version'] = '9.20.1'
