티스토리 뷰
스프링부트는 기본적으로 사용되는 의존성들과 각 의존성의 버전을 미리 구성해준다. 이로써 개발자는 어떤 의존성을 사용할지 또는 각 의존성간 어떤 버전이 호환성이 좋은지 걱정할 필요없이 즉시 작업을 시작할 수 있게 된다. 그런데 때로는 특정 의존성의 버전을 변경하고 싶을 수도 있다. 그래서 스프링부트에서는 손쉽게 의존성 버전을 사용자가 변경할 수 있는 방법을 제공하고 있다.
스프링부트 의존성 버전 사용자 정의
의존성 버전을 변경하는 방법을 살펴보기 전에 스프링부트에서 어떻게 미리 각 의존성 버전을 설정해주고 또 어디에서 어떻게 관리되고 있는지 간단히 확인해보자.
지난 포스팅 스프링부트 사용하세요. - 스프링프레임워크 개발환경 자동화 도구에서 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
를 상속하는 경우 기본적인 특징들이 적용된다.
특징 :
- 기본 컴파일 레벨을 Java 1.6 으로 지정
- UTF-8 소스 인코딩
spring-boot-starter-dependencies
를 상속하여<version>
태그를 생략하고 의존성을 관리- resource filtering
- exec plugin, surefire, Git commit ID, shade
위에 나열한 여러가지 특징들과 편의성을 얻게 되는데 현재 포스팅에서 다루는 내용과 긴밀한 특징은 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-dependencies
의 pom.xml
을 살펴보니 <properties>
에서 많은 의존성들의 버전을 명시해두고 있다. 익숙한 것들이 많이 보인다. 기본적으로 스프링부트는 이곳에 명시된 의존성 버전들을 참조해서 사용한다.(물론 직접적이던 간적적이던 spring-boot-dependencies
의존성을 사용할 때에만) 이제 본격적으로 의존성 버전을 사용자화 하는 방법을 알아보자.
의존성 버전 사용자화 방법
spring-boot-dependencies
의존성이 추가되었다는 가정하에 Maven
환경에서 작성된 프로젝트를 기준으로 설명하도록 한다.
- 프로젝트의
pom.xml
파일을 연다. <properties>
엘리먼트를 추가하고 원하는 의존성에 해당하는 버전정보를 명시한다.
<properties>
<slf4j.version>1.7.5</slf4j.version>
</properties>
스프링부트 1.4.1의
slf4j
의존성의 기본 버전은 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
로 되어 있음을 확인할 수 있다.
이상으로 스프링부트에서 공통 의존성의 버전 사용자화 방법에 대한 설명을 마치도록 한다. 이처럼 스프링부트는 많은 것들을 자동화하고 공통된 설정과 기능들을 제공하면서도 손쉽게 사용자의 필요에따라 구성과 설정을 변경할 수 있도록 배려하고 있다는 사실을 알게되었다.
'spring boot' 카테고리의 다른 글
스프링부트 사용하세요. - 스프링프레임워크 개발환경 자동화 도구 (0) | 2016.09.21 |
---|
- Total
- Today
- Yesterday
- 책
- 조직문화
- JSON
- c#
- 경청
- springboot
- django
- 스프링부트
- Java
- 협업
- spring-boot
- Python
- scala
- Optional
- tech planet
- Collaboration
- spring-security
- 한글
- TIP
- 지혜
- docker
- jackson-annotations
- Java8
- 성장
- github
- 컨퍼런스
- Lambda
- virtualenv
- Clean Code
- JAVA 8
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |