스프링 부트는 왜 버전을 명시하지 않아도 되는가?
스프링 부트가 제공하는 의존성 관리 기능 덕분
<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에 해당하는 버전을 올린다고 가정하자 그러면 올린 그 버전이 현재의 스프링 버전이 지원하는 버전일까를 고민하게 되고
지원하지 않는다면 또 스프링 버전에 해당하는 것으로 변경시켜야 하는 번거로움이 있다.
만약 프로젝트에서 특정 상속 구조가 존재하여
<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
'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 |