Spring Boot는 최소한의 구성 작업으로 프로덕션에 바로 사용할 수 있는 Spring 애플리케이션을 빌드하는 프로세스를 간소화하도록 설계되었다. 이를 위해 Spring Boot 기반 애플리케이션에 대한 기본 구성 및 종속성을 제공하는 특별한 상위 프로젝트인 spring-boot-starter-parent 가 만들어졌다.
spring-boot-starter-parent 에 지정된 종속성을 통해서 기본적으로 제공되는 여러 종속성들을 간편하게 사용할 수 있다.
spring-boot-starter-parent 관련 내용은 아래 링크에서 확인해 볼 수 있다.
spring-boot-starter-parent 종속성
작성 시점 기준 버전은 3.1.2 이다.
Spring Boot 프로젝트를 생성할 때 spring-boot-starter-parent 를 프로젝트의 pom.xml 혹은 build.gradle 의 부모로 사용한다. spring-boot-starter-parent 를 추가한 후 프로젝트는 spring-boot-starter-parent 에 지정된 기본 빌드, 종속성 및 구성을 상속하므로 수동으로 지정할 필요가 없다.
spring-boot-starter-parent의 pom 내용은 아래 링크에서 확인할 수 있다.
spring-boot-starter-parent 의 버전목록은 아래 링크에서 확인할 수 있다.
개발 중인 spring boot 프로젝트에 spring-boot-starter-parent는 아래와 같이 지정한다.
maven (pom.xml)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
gradle (build.gradle)
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.2'
id 'io.spring.dependency-management' version '1.1.2'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
spring-boot-starter-parent pom 살펴보기
spring-boot-starter-parent pom 파일의 주요 내용
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.1.2</version>
</parent>
spring-boot-dependencies를 상속받고 있다.
<properties>
<java.version>17</java.version>
<resource.delimiter>@</resource.delimiter>
<maven.compiler.release>${java.version}</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
프로젝트의 기본 속성을 정의하고 있다.
java 버전은 17을 사용하고 인코딩은 UTF-8을 사용하도록 설정하고 있다.
spring-boot-dependencies pom 살펴보기
spring-boot-starter-parent에서는 spring-boot-dependencies를 상속받고 있다. spring-boot-dependencies에서는 spring boot에서 기본적으로 사용하고 있는 dependencies 들을 정의하고 있다.
<properties>
<activemq.version>5.18.2</activemq.version>
<classmate.version>1.5.1</classmate.version>
<commons-codec.version>1.15</commons-codec.version>
...
...
...
</properties>
spring boot 에서 기본적으로 제공하는 dependency 들의 버전을 정의하고 있다. 본 예시에서는 spring boot 3.1.2 버전을 사용하고 있기 때문에 spring boot 3.1.2에서 기본적으로 제공하는 dependency 들의 버전을 알 수 있다.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-amqp</artifactId>
<version>${activemq.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>classmate</artifactId>
<version>${classmate.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons-codec.version}</version>
</dependency>
...
...
...
</dependencies>
</dependencyManagement>
dependencyManagement로 spring boot 사용되는 dependency를 정의하고 있다. dependencyManagement 로 정의하고 있기 때문에 자식 pom(개발 프로젝트 pom) 에 <dependencies></dependencies> 내에 artifact 로 정의한 경우에만 dependency 가 추가되지만 버전은 명시하지 않아도 된다. spring-boot-dependencies 에 정의된 버전이 자동으로 적용되기 때문이다.
개발 프로젝트 pom.xml 파일에 기본적으로 추가되는 spring-boot-starter dependency 를 보면 버전 정보를 명시하지 않아도 되는 이유이다.
개발 프로젝트에 다른 버전의 의존성 지정하기
spring-boot-dependencies에서 제공하는 org.apache.activemq:activemq-amqp의 버전은 5.18.2 버전이지만 개발 프로젝트에서 org.apache.activemq:activemq-amqp 의 5.18.1 버전을 사용해야 한다면 2가지 방법으로 버전을 재정의 할 수 있다.
dependencyManagement에서 버전 재정의
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-amqp</artifactId>
<version>5.18.1</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-amqp</artifactId>
</dependency>
...
...
</dependencies>
org.apache.activemq:activemq-amqp 의존성 버전을 5.18.1로 재정의 하였다.
추가된 org.apache.activemq:activemq-amqp 라이브러리는 아래와 같다.
properties 섹션에서 버전 재정의
<properties>
<activemq.version>5.18.1</activemq.version>
...
...
</properties>
activemq.version 속성 값을 5.18.1 로 재정의 하였다.
추가된 org.apache.activemq:activemq-amqp 라이브러리는 아래와 같다.
dependencyManagement와 properties를 통해서 의존성 버전을 변경하는 두 가지 방법을 알아보았다. 두 가지 경우에 대한 차이점은 dependencyManagement 는 동일 group의 개별 artifact 의 버전을 변경할 수 있지만 properties 를 이용한 방법은 동일 group 의 모든 artifact 버전이 변경된다는 것이다.
'스프링부트' 카테고리의 다른 글
Spring Boot GraalVM Native Image 빌드 하기 (0) | 2023.09.04 |
---|---|
spring boot resource 파일 access (0) | 2023.08.27 |
spring boot 필드값 조건별 validation 하기 - json subtype (0) | 2023.07.29 |
spring boot 필드값 조건별 validation 하기 - custom annotation (0) | 2023.07.29 |
Spring REST docs + asciidoctor + restdoc spec + swagger ui 를 통한 문서 자동화 - 필드 제약사항 추가 (커스텀) (0) | 2023.07.28 |
댓글