본문 바로가기
Lecture/김영한 - 스프링 부트 - 핵심 원리와 활용

스프링 부트 - 핵심 원리와 활용 - 스프링 부트 스타터와 라이브러리 관리

by Soono991 2023. 3. 12.

💡이 포스팅은 김영한님의 인프런 강의인 스프링 부트 - 핵심 원리와 활용 수강하고 학습한 내용을 정리한 포스팅입니다.

 

김영한님의 강의를 수강하며 정리한 GitHub Repository입니다.

 

GitHub - kiekk/inflearn-kyh-spring-boot

Contribute to kiekk/inflearn-kyh-spring-boot development by creating an account on GitHub.

github.com

 

이번 챕터에 대해 정리할 내용은 다음과 같습니다.

  • 의존성 버전 직접 관리 시 어려움 & 단점
  • Spring Dependency Management & Version Info BOM
  • Spring Boot Starter Dependency

 

의존성 버전 직접 관리 시 어려움 & 단점

라이브러리 버전을 개발자들이 직접 관리하게 될 때의 어려움은 라이브러리들간의 호환성을 맞추는 것입니다.

예를 들어 어떤 두 라이브러리가 있다고 가정할 때 각각 1.0 버전은 서로 호환이 잘 되는 반면 2.0 버전부터는 호환이 잘 안된다던지하는 이슈들이 있기 때문에 라이브러리 버전을 선택할 때 라이브러리간의 호환성을 고려해야 합니다.

하지만 이 부분이 명확하게 어떤 버전과 호환이 된다. 안된다로 정리가 되어 있는 것이 아니라 개발자들이 직접 라이브러리를 추가하고 사용해봄으로써 이를 파악해야 하는데, 이게 말이 쉽지 프로젝트에서 사용하는 라이브러리들이 한 두개도 아니기 때문에 정말 심할 경우에는 프로젝트 개발 시간보다 라이브러리 호환성을 맞추는 시간이 더 많이 들어갈 때도 있습니다.

이처럼 라이브러리 버전을 직접 관리하게 되면 개발자들이 라이브러리를 사용하기 보다 버전 호환성을 맞추는 것에 더 애를 먹고는 합니다.

 

Spring Boot에서는 이 문제를 해결하기 위해 아래와 같은 기능들을 제공하고 있습니다.

 

Spring Dependency Management & Version Info BOM

Spring Boot 프로젝트를 생성하게 되면 Spring Boot 버전에 맞춰 Dependency Management가 적용되는데, 바로 Dependency Management가 Spring Boot 버전과 호환되는 라이브러리들의 버전 정보를 가지고 있기 때문에, 더 이상 라이브러리 추가 시 버전을 개발자들이 직접 명시해줄 필요가 없게 됩니다.

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

 

io.spring.dependency-management 플러그인을 사용하게 되면 spring-boot-dependencies에 있는 다음 BOM 항목을 참고합니다.

그리고 gradle 플러그인을 사용하기 때문에 의존관계가 눈에 보이지 않습니다.

 

BOM 정보는 아래 링크에서 확인할 수 있습니다.

 

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 항목 안에 여러 라이브러리들의 버전이 명시되어 있는 것을 확인할 수 있습니다.

 

💡BOM이란?

BOM은 (Bill Of Materials)의 약자로 명세서라는 뜻을 가지고 있으며
일종의 특별한 POM 파일이라고 합니다.
여러 의존성들을 한 곳에서 관리하고 싶은 경우 사용한다고 합니다.
즉, 의존성들의 명세서 같은 느낌이라고 이해할 수 있습니다.

그리고 build.gradle 파일을 조금 더 확인해보면 Spring Boot 버전에 따라서 관련된 의존성들의 버전도 바뀌는 것을 확인할 수 있습니다.

아래와 같이 Spring Boot 버전만 명시하면 관련된 의존성들은 버전을 작성하지 않아도 호환되는 버전이 추가되는데, 버전에 대한 정보는 Spring Boot 버전별 레퍼런스 문서 중 Dependency Versions 항목에서 확인할 수 있습니다.

 

 

Spring Boot Reference Documentation 바로가기

 

 

만약 의존성을 추가할 때 버전을 명시하지 않을 경우 아래 나열된 의존성의 버전이 적용된다고 합니다. 

즉, Spring Boot에서 제공해주는 버전이 아니라 특정 버전을 사용하고 싶은 경우에는 버전을 직접 명시함으로써 사용할 수도 있다는 뜻이 됩니다.

 

포스팅 작성일 기준 (2023.03.15) Spring Boot 버전은 3.0.4 이지만 강의에서 사용한 버전은 Spring Boot 버전은 3.0.2로 해당 레퍼런스 문서의 Dependency Versions 항목을 확인해보면 다음과 같이 버전 정보들이 작성되어 있는 것을 확인할 수 있습니다.

 

 

Spring Boot Starter Dependency

Spring Boot Starter Dependency는 의존성 셋트라고 하면 이해하기 쉽습니다.

즉 어떤 라이브러리를 사용하려 하는데 관련해서 필요한 라이브러리들이 셋트로 추가되기 때문에, 개발자가 일일이 어떤 라이브러리들이 필요한지 기억하고 있을 필요가 없습니다.

 

예를 들어 Spring Web 을 사용하고 싶은 경우 스프링 웹 MVC, 내장 톰캣, JSON 처리, 스프링 부트 관련, LOG, YML 등등의 라이브러리들이 필요할 것입니다.

이때 spring-boot-starter-web 라이브러리만 추가하게 되면 위 라이브러리들이 자동으로 전부 추가되게 됩니다.

 

Starter Dependency는 토비님 인프런 강의 정리 포스팅에서도 한 번 정리했기 때문에 추가로 참고하셔도 좋을 것 같습니다.

 

토비의 스프링 부트 - 스프링 부트 살펴보기 ~ 스프링 부트 시작하기

💡이 포스팅은 토비님의 인프런 강의인 토비의 스프링 부트 - 이해와 원리를 수강하고 학습한 내용을 정리한 포스팅입니다. 토비님의 강의를 수강하며 정리한 GitHub Repository 입니다. GitHub - kiekk/

soono-991.tistory.com

 

그리고 Spring Boot Starter Dependency가 어떤 것들이 있고 각 starter 마다 어떤 의존성을 추가로 가지고 있는지에 대한 정보는 아래 링크에서 확인할 수 있습니다.

 

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

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

github.com

 

 

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

 

댓글