티스토리 뷰

라이브러리 관리의 어려움

프로젝트를 처음 시작하면 스프링 WEB, 내장 톰캣, JSON 처리기, 로거 등 수많은 라이브러리를 선택해야 한다. 여기에 추가로 각 라이브러리의 버전까지 고민해야하는데 각 라이브러리들끼리 호환이 잘 되는 버전이 있지만 잘 안되는 버전이 있어서 필드를 찾을 수 없거나 클래스를 찾을 수 없다는  에러를 볼 수 있다. 과거에는 이런 문제들 때문에 프로젝트 첫 세팅하는데 상당히 많은 시간을 소비했다.

 

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

외부 라이브러리 버전을 관리해주고 프로젝트 세팅할 때 스프링 부트 버전별 호환이 잘 되는 라이브러리 스프링 부트 스타터를 제공해준다.

 

라이브러리 직접 관리

스프링 부트가 제공하는 라이브러리 관리의 편리함을 느껴보기 위해 과거에 사용하였던 직접 라이브러리를 고르고 설정하는 방법을 알아본다.

 

  • 스프링 웹과 내장 톰캣을 사용하는 웹 애플리케이션

직접 지정한 라이브러리 의존성.

스프링 웹 6번대와 내장 톰캣 10번대와  JSON, Log 라이브러리간 호환성이 맞는가? 사용하려는 라이브러리의 버전을 다 적어주고 저 버전들이 서로 호환이 잘 되는지 개발하는 개발자가 찾아보고 맞는 버전으로 의존성을 추가하는 번거로움이 있다. 간단한 웹 서비스를 테스트로 띄우려고 해도 수많은 라이브러리들을 고르고 세팅해야 한다.

 

내장 서버 잘 띄워지는 것 확인

 

라이브러리 직접 선택시 발생하는 문제

웹 프로젝트를 하나 설정하기 위해서 수 많은 라이브러리를 알아야 한다. 여기에 추가로 각각의 라이브러리의 버전까지 골라서 선택해야 한다. 여기서 가장 어려운 문제는 각 라이브러리간 호환이 잘 되는 버전도 있지만 호환이 잘 안되는 버전도 있다는 점이다. 개발자가 라이브러리의 버전을 선택할 때 이런 부분까지 고려하는 것은 매우 어렵다.

 

 

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

스프링 부트는 개발자 대신에 수 많은 라이브러리의 버전을 직접 관리해준다.

이제 개발자는 원하는 라이브러리만 고르고 라이브러리의 버전은 생략해도 된다.

그러면 스프링 부트가 부트 버전에 맞춘 최적화된 라이브러리 버전을 선택해준다.

 

버전 관리 기능을 사용하기위해 io.spring.dependency-management 플러그인을 사용한다.

해당 플러그인을 사용하면 라이브러리 버전 정보를 생략할 수 있다.

버전 관리 기능을 추가했으니 의존성 라이브러리의 각 버전을 생략한다.

라이브러리 폴더를 보면 알맞은 버전으로 들어온다.

 

dependency-management 버전 관리

io.spring.dependency-management 플러그인을 사용하면 spring-boot-dependencies에 있는 다음 bom 정보를 참고한다. 참고로 spring-boot-dependecies는 스프링 부트 gradle 플러그인에서 사용하기 때문에 개발자의 눈에 의존관계로 보이지 않는다.

 

버전 정보 bom

https://docs.spring.io/spring-boot/docs/current/reference/html/dependency-versions.html#appendix.dependency-versions.coordinates

https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-dependencies/build.gradle

 

GitHub - spring-projects/spring-boot: Spring Boot

Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub.

github.com

build.gradle 에 bom 정보로 라이브러리의 버전들이 명시되어 있는데 해당 bom을 참고하여 라이브러리의 버전들이 설치된다. 프로젝트 구성한 라이브러리들의 목록과 버전들

현재 프로젝트 스프링 부트의 버전을 참고한다

스프링 부트 버전을 변경하면 라이브러리 버전도 당연히 변경된다. 스프링 부트에 맞는 라이브러리 버전 정보를 참고하게 된다. 스프링 부트가 모든 라이브러리 버전을 관리하는 것은 아니어서 대중적이지 않은 라이브러리일 경우 버전정보 없이 의존성을 추가하면 라이브러리를 가져오지 못한다. 그럴 경우에만 버전을 적어주면 된다.

 

스프링 부트가 제공하는 버전관리는 스프링 자신을 포함하여 수 많은 외부 라이브러리의 버전을 최적화해서 관리해준다. 개발자는 스프링부트 자체의 버전만 지정하면 버전에 맞는 각 라이브러리 호환성을 테스트했기 때문에 안전하게 사용할 수 있다. 하지만 항상 100% 완벽한 것은 아니다.

 

 

스프링 부트 스타터

프로젝트 구성시 수 많은 라이브러리가 필요하다. 버전 정보를 제거하고 필요한 라이브러리를 등록할 수 있는 플러그인도 있지만 스프링으로 웹 프로젝트를 시작할 때 필요한 기본적인 라이브러리를 모아 놓은 스프링 부트 스타터를 제공한다.

build.gradle

spring-boot-starter-web 라이브러리 하나로 지금까지 직접 넣은 모든 라이브러리가 포함된다.

편리하게 사용하기 위한 의존성을 모아둔 세트로 관련 의존성 세트가 한번에 들어온다. 스타터안에 또 다른 스타터를 가질 수 있다.

스프링과 웹을 사용하고 싶으면 spring-boot-starter-web에 스프링 웹 MVC, 내장 톰캣, JSON 처리, 스프링 부트 관련, LOG, YAML등등 라이브러리가 다 들어온다.

스프링과 JPA를 사용하고 싶으면 spring-boot-starter-data-jpa에 스프링 데이터 JPA, 하이버네이트 등등 라이브러리가 들어온다.

웹과 JPA 기반 데이터베이스를 사용하려면 해당 스타터 2개 선언해주면 된다.

 

스프링 부트 스타터 이름 패턴

공식: spring-boot-starter-*

비공식: mybatis-spring-boot-starter

 

스프링 부트 스타터 자주 사용하는 것

  • spring-boot-starter: 핵심 스타터, 자동 구성, 로깅, YAML
  • spring-boot-starter-jdbc: JDBC, HikariCP 커넥션풀
  • spring-boot-starter-jpa: 스프링 데이터 JPA, 하이버네이트
  • spring-boot-starter-mongodb: 스프링 데이터 몽고
  • spring-boot-starter-redis: 스프링 데이터 Redis, Lettuce 클라이언트
  • spring-boot-starter-thymeleaf: 타임리프 뷰와 웹 MVC
  • spring-boot-starter-web: 웹 구축을 위한 스타터, RESTful, 스프링 MVC,  내장 톰캣
  • spring-boot-starter-validation: 자바 빈 검증기(하이버네이트 Validator)
  • spring-boot-starter-batch: 스프링 배치를 위한 스타터

https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.startersfkdl

 

Developing with Spring Boot

This section goes into more detail about how you should use Spring Boot. It covers topics such as build systems, auto-configuration, and how to run your applications. We also cover some Spring Boot best practices. Although there is nothing particularly spe

docs.spring.io

 

라이브러리 버전 변경

외부 라이브러리 버전을 변경하고 싶을 때 build.gradle 아무 곳 첫 라인에 선언하면 별도의 버전으로 재 설치 된다.

ext['tomcat.version'] = '버전'

속성 이름 참고

https://docs.spring.io/spring-boot/docs/current/reference/html/dependency-versions.html#appendix.dependency-versions.properties

 

Dependency Versions

 

docs.spring.io

 

'자바 > 스프링 부트' 카테고리의 다른 글

외부설정과 프로필1  (0) 2023.03.23
자동 구성 Auto Configuration  (0) 2023.03.19
스프링 부트와 내장 톰캣  (0) 2023.03.12
웹 서버와 서블릿 컨테이너  (0) 2023.03.11
스프링 부트소개  (0) 2023.03.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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 26 27 28 29 30 31
글 보관함