티스토리 뷰

스프링부트는 기본적으로 사용되는 의존성들과 각 의존성의 버전을 미리 구성해준다. 이로써 개발자는 어떤 의존성을 사용할지 또는 각 의존성간 어떤 버전이 호환성이 좋은지 걱정할 필요없이 즉시 작업을 시작할 수 있게 된다. 그런데 때로는 특정 의존성의 버전을 변경하고 싶을 수도 있다. 그래서 스프링부트에서는 손쉽게 의존성 버전을 사용자가 변경할 수 있는 방법을 제공하고 있다.

스프링부트 의존성 버전 사용자 정의

의존성 버전을 변경하는 방법을 살펴보기 전에 스프링부트에서 어떻게 미리 각 의존성 버전을 설정해주고 또 어디에서 어떻게 관리되고 있는지 간단히 확인해보자.
지난 포스팅 스프링부트 사용하세요. - 스프링프레임워크 개발환경 자동화 도구에서 Maven을 이용한 스프링부트 설치방법을 설명하면서 다음과 같은 pom.xml을 구성했었다.

<!-- Inherit defaults from Spring Boot -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.1.RELEASE</version>
</parent>

<!-- Add typical dependencies for a web application -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

<!-- Package as an executable jar -->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Maven에서 스프링부트를 설치하기 위해 작성한 pom.xml.

여기서 line:2-6을 살펴보면 <parent>를 이용해 spring-boot-starter-parent를 상속하고 있음을 확인할 수 있다. 사실 spring-boot-starter-parent를 상속하는게 필수는 아니다. 개인의 선택에 따라 상속하지 않고 직접 필요한 의존성들을 추가하고 관리할 수도 있다. Using Spring Boot without the parent POM에서 spring-boot-starter-parent없이 사용하는 방법을 확인할 수 있다.

만약 spring-boot-starter-parent를 사용하지 않는다면 스프링부트의 의존성 관리를 지원받지 못하게 된다.(직접 spring-boot-dependencies를 import하면 쓸 수 있음) 반드시 그래야 하는 상황이 아니라면 spring-boot-start-parent를 사용하는편이 더 편리할 것이다. 간단히 spring-boot-starter-parent에 대해서 알아보자.

spring-boot-starter-parent

Maven프로젝트를 기준으로 설명하고 있으며, spring-boot-starter-parent를 상속하는 경우 기본적인 특징들이 적용된다.

특징 :

13.2 Maven - using-boot-maven 참고

위에 나열한 여러가지 특징들과 편의성을 얻게 되는데 현재 포스팅에서 다루는 내용과 긴밀한 특징은 spring-boot-start-dependencies의 상속을 포함하게 된다는 것이므로 이것에 대해서만 다룬다. spring-boot-dependencies/pom.xml을 살펴보면 스프링부트에서 사용하는 각 의존성 버전들이 어떻게 관리되고 있는지 확인할 수 있다. 그 중 의존성 버전을 정의하고 있는 내용을 일부분만 살펴보자.

spring-boot-dependencies 의 pom.xml

pom.xml에서 <properties>의 일부분을 살펴보자.

<properties>
    ...
    <h2.version>1.4.192</h2.version>
    <gson.version>2.7</gson.version>
    <slf4j.version>1.7.21</slf4j.version>
    <spring.version>4.3.3.RELEASE</spring.version>
    <tomcat.version>8.5.5</tomcat.version>
    ...
</properties>

직접 spring-boot-dependencies/pom.xml을 살펴보면 더 많은 내용을 확인할 수 있다. 그 중 몇가지만 추려서 작성된 것임을 참고.

spring-boot-dependenciespom.xml을 살펴보니 <properties>에서 많은 의존성들의 버전을 명시해두고 있다. 익숙한 것들이 많이 보인다. 기본적으로 스프링부트는 이곳에 명시된 의존성 버전들을 참조해서 사용한다.(물론 직접적이던 간적적이던 spring-boot-dependencies의존성을 사용할 때에만) 이제 본격적으로 의존성 버전을 사용자화 하는 방법을 알아보자.

의존성 버전 사용자화 방법

spring-boot-dependencies의존성이 추가되었다는 가정하에 Maven환경에서 작성된 프로젝트를 기준으로 설명하도록 한다.

  1. 프로젝트의 pom.xml 파일을 연다.
  2. <properties>엘리먼트를 추가하고 원하는 의존성에 해당하는 버전정보를 명시한다.
<properties>
    <slf4j.version>1.7.5</slf4j.version>
</properties>

스프링부트 1.4.1slf4j의존성의 기본 버전은 1.7.2이지만 앞에서처럼 프로젝트의 pom.xml파일에 새로운 버전을 명시하면 스프링부트는 해당 버전을 참조하여 의존성을 관리하게 된다.

앞에서 주저리주저리 길게 설명한 내용들에 비해 실제 작업은 굉장히 단순하고 쉽다. 스프링부트의 의존성 버전 참조 우선순위에 의해 사용자 프로젝트내 pom.xml에 명시된 버전 정보가 우선순위가 높으므로 스프링부트는 사용자가 원하는 의존성 버전을 사용하게 된다. 그럼 잘 변경 되었는지 확인해보자.

변경된 의존성 버전 확인

아마도 대부분 IDE를 사용할텐데 그런 경우라면 Maven에 의해 추가된 외부 의존성의 정보를 쉽게 도구로써 확인할 수 있을테니 설명을 생략한다. 만약 찾기 어렵거나 IDE를 사용하지 않는다면 Maven을 이용해 확인할 수도 있다.

 $ mvn dependency:tree

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building eglowc-posting 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.10:tree (default-cli) @ eglowc-posting ---
[INFO] com.eglowc:eglowc-posting:jar:1.0-SNAPSHOT
[INFO] \- org.springframework.boot:spring-boot-starter-web:jar:1.4.1.RELEASE:compile
[INFO]    +- org.springframework.boot:spring-boot-starter:jar:1.4.1.RELEASE:compile
[INFO]    |  +- org.springframework.boot:spring-boot:jar:1.4.1.RELEASE:compile
[INFO]    |  +- org.springframework.boot:spring-boot-autoconfigure:jar:1.4.1.RELEASE:compile
[INFO]    |  +- org.springframework.boot:spring-boot-starter-logging:jar:1.4.1.RELEASE:compile
[INFO]    |  |  +- ch.qos.logback:logback-classic:jar:1.1.7:compile
[INFO]    |  |  |  +- ch.qos.logback:logback-core:jar:1.1.7:compile
[INFO]    |  |  |  \- org.slf4j:slf4j-api:jar:1.7.5:compile
[INFO]    |  |  +- org.slf4j:jcl-over-slf4j:jar:1.7.5:compile
[INFO]    |  |  +- org.slf4j:jul-to-slf4j:jar:1.7.5:compile
[INFO]    |  |  \- org.slf4j:log4j-over-slf4j:jar:1.7.5:compile
[INFO]    |  +- org.springframework:spring-core:jar:4.3.3.RELEASE:compile
[INFO]    |  \- org.yaml:snakeyaml:jar:1.17:runtime
[INFO]    +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.4.1.RELEASE:compile
[INFO]    |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.5:compile
[INFO]    |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.5:compile
[INFO]    |  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.5:compile
[INFO]    +- org.hibernate:hibernate-validator:jar:5.2.4.Final:compile
[INFO]    |  +- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO]    |  +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile
[INFO]    |  \- com.fasterxml:classmate:jar:1.3.1:compile
[INFO]    +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.3:compile
[INFO]    |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.3:compile
[INFO]    |  \- com.fasterxml.jackson.core:jackson-core:jar:2.8.3:compile
[INFO]    +- org.springframework:spring-web:jar:4.3.3.RELEASE:compile
[INFO]    |  +- org.springframework:spring-aop:jar:4.3.3.RELEASE:compile
[INFO]    |  +- org.springframework:spring-beans:jar:4.3.3.RELEASE:compile
[INFO]    |  \- org.springframework:spring-context:jar:4.3.3.RELEASE:compile
[INFO]    \- org.springframework:spring-webmvc:jar:4.3.3.RELEASE:compile
[INFO]       \- org.springframework:spring-expression:jar:4.3.3.RELEASE:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.179 s
[INFO] Finished at: 2016-09-22T15:19:13+09:00
[INFO] Final Memory: 20M/226M
[INFO] ------------------------------------------------------------------------

mvn dependency:tree명령어로 현재 의존성 정보를 트리 형태로 출력한다.

출력된 정보중 line:18부터 살펴보면 slf4j의 의존성 버전이 1.7.5로 되어 있음을 확인할 수 있다.
이상으로 스프링부트에서 공통 의존성의 버전 사용자화 방법에 대한 설명을 마치도록 한다. 이처럼 스프링부트는 많은 것들을 자동화하고 공통된 설정과 기능들을 제공하면서도 손쉽게 사용자의 필요에따라 구성과 설정을 변경할 수 있도록 배려하고 있다는 사실을 알게되었다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함