본문 바로가기

Spring/Spring Boot

(SpringBoot) SpringBoot 의존성 관리

스프링 부트는 왜 버전을 명시하지 않아도 되는가?

스프링 부트가 제공하는 의존성 관리 기능 덕분

<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에 해당하는 버전을 올린다고 가정하자 그러면 올린 그 버전이 현재의 스프링 버전이 지원하는 버전일까를 고민하게 되고 

지원하지 않는다면 또 스프링 버전에 해당하는 것으로 변경시켜야 하는 번거로움이 있다.

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-dependency-management

 

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