Notice
Recent Posts
Recent Comments
Link
관리 메뉴

look-forest

스프링 부트 스타터와 라이브러리 관리 본문

Spring/Spring boot - 핵심 원리와 활용

스프링 부트 스타터와 라이브러리 관리

studyHub 2025. 1. 26. 21:41

스프링 부트는 개발자가 라이브러리들을 편리하게 사용할 수 있는 다양한 기능들을 제공한다.

  • 외부 라이브러리 버전 관리
  • 스프링 부트 스타터 제공

라이브러리 버전 관리

라이브러리 직접 관리

웹 프로젝트를 하나 설정하기 위해서는 수 많은 라이브러리를 알아야 한다.

여기에 추가로 각각의 라이브러리의 버전까지 골라서 선택해야 한다. 문제는 각 라이브러리들 간에 서로 호환이 잘 되는 버전도 있지만 호환이 잘 안되는 버전도 있다는 점이다.

개발자가 라이브러리의 버전을 선택할 때 이런 부분까지 고려하는 것은 매우 어렵다.

dependencies {
    
    //스프링 웹 MVC
    implementation 'org.springframework:spring-webmvc:6.0.4'
    //내장 톰캣
    implementation 'org.apache.tomcat.embed:tomcat-embed-core:10.1.5'
    //JSON 처리
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.1'
    //스프링 부트 관련
    implementation 'org.springframework.boot:spring-boot:3.0.2'
    implementation 'org.springframework.boot:spring-boot-autoconfigure:3.0.2'
    //LOG 관련
    implementation 'ch.qos.logback:logback-classic:1.4.5'
    implementation 'org.apache.logging.log4j:log4j-to-slf4j:2.19.0'
    implementation 'org.slf4j:jul-to-slf4j:2.0.6'
    //YML 관련
    implementation 'org.yaml:snakeyaml:1.33'
}

 

스프링 부트 라이브러리 버전 관리

스프링 부트는 개발자 대신에 수 많은 라이브러리의 버전을 직접 관리해준다. 이제 개발자는 원하는 라이브러리만 고르고 라이브러리의 버전은 생략해도 된다. 그러면 스프링 부트가 부트 버전에 맞춘 최적화된 라이브러리 버전을 선택해준다.

스프링 부트가 해당 스프링 부트 버전에 맞는 각 라이브러리의 호환성을 테스트 했기 때문에 안전하게 사용할 수 있다.

 

버전 관리 기능을 사용하려면 build.gradle - plugins 에 io.spring.dependency-management 플러그인을 추가해야 한다

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

dependencies {
    
    //스프링 웹, MVC
    implementation 'org.springframework:spring-webmvc'
    //내장 톰캣
    implementation 'org.apache.tomcat.embed:tomcat-embed-core'
    //JSON 처리
    implementation 'com.fasterxml.jackson.core:jackson-databind'
    //스프링 부트 관련
    implementation 'org.springframework.boot:spring-boot'
    implementation 'org.springframework.boot:spring-boot-autoconfigure'
    //LOG 관련
    implementation 'ch.qos.logback:logback-classic'
    implementation 'org.apache.logging.log4j:log4j-to-slf4j'
    implementation 'org.slf4j:jul-to-slf4j'
    //YML 관련
    implementation 'org.yaml:snakeyaml'
}

라이브러리 버전 정보가 모두 제거되었다

 

dependency-management 버전 관리

io.spring.dependency-management 플러그인을 사용하면 spring-boot-dependencies 에 있는 bom 정보를 참고한다.

참고로 spring-boot-dependencies 는 스프링 부트 gradle 플러그인에서 사용하기 때문에 개발자의 눈에 의존 관계로 보이지는 않는다.

 

※ 스프링 부트가 관리하는 외부 라이브러리 버전을 확인하는 방법
https://docs.spring.io/spring-boot/docs/current/reference/html/dependencyversions.html#appendix.dependency-versions.coordinates

 

  스프링 부트가 관리하지 않는 라이브러리
스프링 부트가 관리하지 않는 외부 라이브러리도 있다. 특히 아직 잘 알려지지 않거나 대중적이지 않은 경우가 그러한데, 이때는 아래와 같이 라이브러리의 버전을 직접 적어주어야 한다.
implementation 'org.yaml:snakeyaml:1.30'

 


스프링 부트 스타터

이번에는 라이브러리를 자체를 고르는 고민을 줄여주는 스프링 부트 스타터에 대해서 알아보자.

 

웹 프로젝트를 하나 실행하려면 생각보다 수 많은 라이브러리가 필요하다. 개발자 입장에서는 그냥 웹 프로젝트를 하나 시작하고 싶은 것이고, 일반적으로 많이 사용하는 대중적인 라이브러리들을 포함해서 간단하게 시작하고 싶을 것이다.

스프링 부트는 이런 문제를 해결하기 위해 프로젝트를 시작하는데 필요한 관련 라이브러리를 모아둔 스프링 부트 스타터를 제공한다.

 

spring-boot-starter-web 이 라이브러리 하나로 지금까지 위에서 직접 넣어주었던 모든 라이브러리가 포함된다. 의존성을 모아둔 세트라고 보면 된다.

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

 

스프링 부트 스타터의 전체 목록 공식 메뉴얼
https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.buildsystems.starters

 

 

라이브러리 버전 변경

스프링 부트가 관리하는 외부 라이브러리의 버전을 변경하는 일은 거의 없다. 하지만 아주 가끔 문제가 발생 하기도 하므로 알아두자. (예를 들어 tomcat 10.1.5 버전에 심각한 버그가 발견되어 급히 조치가 필요할 경우)

 

외부 라이브러리의 버전을 변경하고 싶을 때 build.gradle에 다음과 같은 형식으로 편리하게 변경할 수 있다.

//스프링 부트 외부 라이브러리 버전 변경
ext['tomcat.version']='10.1.4'

 

스프링 부트가 관리하는 외부 라이브러리 버전 변경에 필요한 속성 값
https://docs.spring.io/spring-boot/docs/current/reference/html/dependencyversions.html#appendix.dependency-versions.properties

 


참고 자료 & 이미지 출처
스프링 부트 - 핵심 원리와 활용 (김영한 님)