스프링 부트의 의존성 관리(Dependency Management)
스프링 부트의 의존성 관리(Dependency Management)
기본적인 스프링 부트 프로젝트의 pom.xml 파일을 보면 의존성 설정이 spring-boot-starter-web과 spring-boot-starter-test 두 개 뿐이고 버전 또한 명시하지 않고 있지만 수 많은 라이브러리들을 알아서 가져온다.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
이것이 가능한 이유는 스프링 부트가 제공하는 의존성 관리 기능 때문이다.
기본 스프링 부트 프로젝트는 spring-boot-starter-parent가 parent pom으로 설정되어 있다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
이 parent pom을 확인해보면 spring-boot-dependencies를 다시 parent로 설정하고 있다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
즉 maven pom 상속 구조가 [기본 스프링 부트 프로젝트] - [spring-boot-starter-parent] - [spring-boot-dependencies] 순으로 되어있는 것이다.
이 스프링 부트 프로젝트의 최상단에 있는 spring-boot-dependencies pom의 <properties>와 <dependencyManagement>에 가져올 의존성과 버전이 명시되어있다.
그렇기 때문에 스프링 부트 프로젝트의 pom.xml에 직접 버전을 명시하지 않아도 spring-boot-dependencies에서 관리해주는 버전을 알아서 가져오게 된다.
참고로 IntelliJ에서는 pom.xml의 왼쪽에 표시되는 아이콘에 마우스를 올려보면 무슨 버전을 사용하는지 알려준다.
스프링 부트가 제공해주는 의존성 관리 기능의 장점은 다음과 같다.
- 직접 관리해야하는 의존성의 수가 줄어든다.
- 의존성 라이브러리들의 버전 충돌 이슈가 해결된다.
References
'Spring Framework > Spring boot #3' 카테고리의 다른 글
[Spring Boot] 문자인증 구현 coolSMS (0) | 2022.05.24 |
---|---|
[스프링 부트/MVC] 정적 리소스(Static Resources) 기본 설정과 커스텀 방법 (0) | 2021.04.22 |
스프링 부트에서 즉시 웹 개발을 시작할 수 있는 이유 - AutoConfiguration (0) | 2021.04.22 |
Spring Boot + MyBatis 설정 방법(HikariCP, H2) (0) | 2021.04.22 |
[Spring Boot/Spring Web MVC] ViewController를 이용해서 뷰 매핑하기 (0) | 2021.04.22 |
[Spring Boot] ApplicationRunner 등록 방법 정리 (0) | 2021.04.22 |
스프링 부트 테스트 - 내장 서버 랜덤 포트로 띄우기 (0) | 2021.04.22 |
스프링 부트 프로젝트 만들기 - Spring Initializr 웹 도구 사용 (0) | 2021.04.22 |