스프링 부트는 왜 버전을 명시하지 않아도 되는가?
스프링 부트가 제공하는 의존성 관리 기능 덕분
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
부모
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
할머니
할머니의 <dependencyManagement> 에는 해당 의존성들이 정의되어있다.
즉
spring-boot-dependencies에 정의되어있는 의존성을 하나라도 쓰게 되면 버전을 명시하지 않아도 된다.
spring-boot-dependencies에서 관리해주는 버전을 자동으로 사용하게 된다.

현재는 옆에 보이는 바와 같이
2.2.2.RELEASE 버전을 사용하고 있다.

왜 spring-boot-dependencies에서 해당 버전을 정의하였기 때문에 그것을 가져다 쓰는 것이다.
이러한 기능들이 대체 무엇이 좋길래?
우리가 직접 관리해야 할 의존성의 수가 줄어든다. (라테는... 의존성 일일이 넣고... 버전 명시하고 )
Third Party에 해당하는 버전을 올린다고 가정하자 그러면 올린 그 버전이 현재의 스프링 버전이 지원하는 버전일까를 고민하게 되고
지원하지 않는다면 또 스프링 버전에 해당하는 것으로 변경시켜야 하는 번거로움이 있다.
Spring Boot Reference Documentation
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
만약 프로젝트에서 특정 상속 구조가 존재하여
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
위의 parent를 상속하지 못하는 경우에는
해당 프로젝트의 상속 구조를 parent로 정의한 다음에 그 상속 구조의 parent로 spring-boot-starter-parent를 정의하면 된다.
이렇게 하면 프로젝트의 상속 구조도 적절히 사용할 수 있을 뿐만 아니라 스프링이 지원하는 여러 기능도 함께 사용할 수 있기 때문에
depnedencyManagement로 직접적인 상속 구조를 정의하는 것보다 좋은 방법이라 할 수 있다.
depnedencyManagement 적용 방법
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
스프링이 지원하지 않는 의존성 주입 방법
- 항상 버전을 명시하는 것이 좋다.
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.6</version>
</dependency>
스프링이 지원하는 의존성이지만 버전을 바꾸고 싶을때
spring-boot-dependencies의 property에 정의되어있는 버전을 pom.xml에 정의한다.
이러한 식으로 pom.xml에 version을 바꾸어 재정의 하면 된다.
<properties>
<java.version>11</java.version>
<spring-framework.version>5.2.1.RELEASE</spring-framework.version>
</properties>
코드 참조
https://github.com/mike6321/Spring/tree/master/SpringBoot/springinit
mike6321/Spring
Contribute to mike6321/Spring development by creating an account on GitHub.
github.com
'Spring > Spring Boot' 카테고리의 다른 글
(SpringBoot) Spring Boot의 자동설정 구현해보기(1) (0) | 2020.01.13 |
---|---|
(SpringBoot) SpringBoot 자동설정 (0) | 2020.01.12 |
(SpringBoot) Spring Mvc(4) - 정적 리소스 지원 (0) | 2020.01.11 |
(SpringBoot) Spring Mvc(3) - ViewResolver (0) | 2020.01.10 |
(SpringBoot) Spring Mvc(2) - HttpMessageConverters (0) | 2020.01.10 |