스프링 부트의 의존성 관리(Dependency Management)

2021. 4. 22. 03:19 Spring Framework/Spring boot3

스프링 부트의 의존성 관리(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

인프런 - 백기선님의 스프링 부트 개념과 활용

 

 

출처 : atoz-develop.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8%EC%9D%98-%EC%9D%98%EC%A1%B4%EC%84%B1-%EA%B4%80%EB%A6%ACDependency-Management?category=869242