-
[01] Spring boot 의존성 관리Spring/Spring boot 2020. 5. 12. 07:57반응형
[의존성을 어떻게 관리할까?]
Web service를 위해 library 형태로 제공되는 많은 기능들이 존재합니다. 하지만 library도 지속적인 update가 있어 존재하던 기능이 없어지거나 새로운 기능이 추가될 수도 있고 기존 기능이 개선되면서 사양이 일부 변경되기도 하는 등의 변화가 있을 수 있으며 따라서 여러 가지 version이 존재합니다. Web service를 위해 여러 library 간의 협력이 요구되는데 이때 특정 version의 각 library들이 정상적으로 상호 동작하는지 확인해야 합니다. 즉, 상호 의존관계의 기능(의존성)들이 정상 동작하는지 확인하는 것입니다. Spring boot는 maven이나 gradle과 같은 build tool을 사용하여 이런 의존성 관리를 자동으로 해줍니다.
spring boot는 project 구동에 필수적으로 필요한 의존성을 한곳에 모아 관리합니다. 그렇기 때문에 maven project의 pom.xml을 열어봐도 dependencies tag안에서 관리하고 있는 의존성이 몇 개 없는 경우가 대부분입니다. (심지어 version tag도 없습니다.) 그 이유를 확인해보기 위해 pom.xml에 정의된 parent tag를 따라가 보면 다음과 같습니다. (parent의 artifactId tag 요소에서 Ctrl+Q로 tool window를 열고 F4를 누르면 parent가 정의된 file을 열어볼 수 있습니다.)
- pom.xml의 parent : spring-boot-starter-parent.pom
- spring-boot-starter-parent.pom의 parent : spring-boot-dependencies.pom
- spring-boot-dependencies.pom -> Spring boot version에 따라 기본적으로 필요한 의존성들을 모아 놓음.
이것을 보면 의존성 정보를 계층형으로 관리하고 있음을 볼 수 있습니다. 따라서 상위 계층에서 의존성을 정의할 때 version을 명시해 두면 하위 계층은 version을 명시하지 않아도 상위 계층의 version을 그대로 따라갑니다. 계층간 overriding도 가능하기 때문에 만약 상위 계층에 이미 version까지 명시하여 등록해 놓은 의존성을 하위 계층에서 다시 등록하면서 version을 변경할 경우 하위 계층에서 명시한 version의 의존성을 받아오게 됩니다.
이렇게 spring boot에서 의존성을 관리해 주기 때문에 사용자는 의존성과 관련한 특별한 작업 없이 바로 Service를 만들 수 있습니다.
만약 parent에 지정해야 하는 artfactId가 spring-boot-starter-parent가 아닌 다른 부모POM으로 고정되어 있는 project의 경우 그 부모 POM에서 parent로 spring-boot-starter-parent를 지정합니다.
IntelliJ 오른쪽에 위치한 maven 또는 gradle tab을 통해 현재 관리되고 있는 의존성을 계층형으로 확인할 수 있습니다.
[의존성을 추가하는 방법]
1.Spring Boot에서 version관리를 해주는 의존성 추가
Spring JPA 의존성은 spring boot에서 version관리를 해주는 의존성 중 하나입니다. 이런 경우 어떻게 의존성을 추가하는지 살펴봅시다.
pom.xml file에서 dependencies tag 안에 아래에 해당하는 내용으로 새로운 dependency tag를 추가해줍니다.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <!--version은 상위 file에서 관리되고 있으므로 생략합니다.--> </dependency>
editor의 줄번호 옆으로 위치한 icon을 click하면 상위 file에 정의된 version을 확인해 볼 수 있습니다.
2. Spring boot에서 version관리를 하지 않는 의존성 추가
Maven 의존성은 https://mvnrepository.com 에서 검색할 수 있습니다. site에 들어가서 ModelMapper를 검색한 뒤 click 해서 상세 page로 들어갑니다.
원하는 version을 선택합니다.
원하는 build tool에 해당하는 의존성 추가 구문을 복사하여 사용합니다.
3.Spring boot에서 관리하고 있는 의존성 version과 다른 version을 사용하기
의존성 계층을 거슬러 올라가다보면 <properties> tag 안에 각 의존성의 version 정보가 들어가 있는 것을 확인할 수 있습니다. 만약 spring boot에서 기본적으로 제공하고 있는 의존성 version과 다른 version을 사용하기 원하는 경우에는 pom.xml에 <properties> tag를 삽입하고 원하는 의존성 version을 지정할 수 있습니다.
위의 설명대로 하위 계층에서 의존성 version에 대해 overriding되는지 확인하기 위해 spring version을 변경해보도록 합시다.
먼저 spring-boot-dependencies-~.pom file의 내용 중 <properties> tag의 내용을 살펴보면 현재 spring version은 5.2.6.RELEASE 임을 확인할 수 있습니다.
pom.xml에서 <properties> tag를 다음과 같이 추가하여 spring version을 5.2.5.RELEASE로 변경합니다.
<properties> <spring-framework.version>5.2.5.RELEASE</spring-framework.version> </properties>
의존성 계층을 확인해보면 의도한 대로 version이 변경됨을 확인할 수 있습니다.
의존성 설정 file은 계층적으로 관리되고 있고 상위 계층의 설정을 하위 계층에서 overriding 해서 변경할 수 있다는 것을 반드시 기억해 주세요.
'Spring > Spring boot' 카테고리의 다른 글
[05] Spring Application (0) 2020.05.28 [04] 독립으로 실행가능한 JAR file (0) 2020.05.26 [03] 내장 Web Application Server (0) 2020.05.20 [02] Spring boot 자동 설정 (0) 2020.05.15 [00] Maven으로 Spring Boot Project 생성 (0) 2020.05.11