본문 바로가기
Spring

SpringBoot의 의존성 버전 관리와 원리

by PROMISE_YOO 2022. 1. 4.

1.spring-boot-starter

SpringBoot의 의존성 관리의 핵심은 spring-boot-starter 입니다.


SpringBoot는 spring-boot-starter를 통해 프로젝트 구성에 필요한 의존성들을 자동으로 가져옵니다.

spring-boot-starter 덕분에 관리 효율성이 높아지고 프로젝트의 전체 구성 시간이 감소하였습니다.

 

 

2. spring-boot-starter 내부 

스프링부트가 자동으로 설정해준 목록을 살펴보겠습니다.

test부터 web, log ...등 정말 많은 설정을 자동으로 해줍니다.

 

이때 spring-boot-starter 하위의 의존성들에 버전이 명시되어 있음을 볼 수 있습니다. 자동으로 버전을 설정해주는 원리는 아래에서 다루도록 하겠습니다.


특히 web을 보면 tomcat이 springboot 내부에 있다는 걸 확인 할 수 있습니다.

전에 네이버클라우드에 손배포를 해야할때 따로 tomcat를 다운로드 해줬는데 

생각해보니 spring boot 내에 tomcat이 있다는 걸 깨닫고 이후에는 따로 다운로드를 해주지 않고 프로젝트만 jar파일로 올렸습니다. 

 

그리고 세간에 떠들썩했던 log4j 자동설정도 볼 수 있습니다. 

지난 달에 log4j는 보안에 취약점이 발견됐고 큰 문제가 됐습니다.

Spring Boot에서 자동으로 잡아주는 버전인 log4j의 2 버전 대의 문제였습니다. 
실제 취약한 부분은 Log4j 2.17.1 버전 미만의 라이브러리 중 Log4j-core 모듈입니다.

 

위의 프로젝트도 spring boot 에서 자동으로 2.14.1을 잡아주고 있기때문에 별도의 버전설정이 필요합니다.

깃허브 이슈로 등록하고 버전 수정을 해야겠습니다...

 

 

 

3. 스프링 부트의 의존성 버전 설정 원리

 

스프링부트의 의존성 버전을 자동으로 설정해주는 것은 gradle의 플러그인과 연관이 있습니다.

gradle : 의존성 관계에 있는 라이브러리를 자동으로 다운로드해주는 빌드 자동화 도구입니다.
plugin : plug-in은 추가 기능을 위한 컴퓨터 프로그램 모듈 또는 장치입니다.

 

프로젝트를 생성할때 기본적으로 추가된 gradle 파일의 플러그인입니다.

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

'io.spring.dependency-management' 플러그인이 적용되면 spring-boot의 플러그인이 spring-boot의 버전에 따라 자동적으로 spring-boot-dependencies bom을 import합니다.

 

그리고 spring-boot-dependencies bom 내부 속성 값으로 버전을 자동 설정해줍니다. spring-boot-dependencies bom 내부에는 SpringBoot 버전에 따라 최적화된 각 의존성들의 버전을 저장하고 있습니다.

 

아래 링크로 Spring Boot가 CLI(Command Line Interface), Maven 종속성 관리, Gradle 플러그인에 제공하는 종속성 버전에 대한 정보를 확인할 수 있습니다.

https://docs.spring.io/spring-boot/docs/2.6.2/gradle-plugin/reference/pdf/spring-boot-gradle-plugin-reference.pdf

 

 

 

 

출처 : https://docs.spring.io/spring-boot/docs/2.6.2/gradle-plugin/reference/pdf/spring-boot-gradle-plugin-reference.pdf

https://plugins.gradle.org/plugin/org.springframework.boot