부트 개념과 활용-02.의존성 관리 이해/응용


의존성 관리 이해

앞서 말했듯 기본적으로 의존성 관리를 부모 프로젝트로 설정해 줌으로써 해 준다. (spring-boot-starter-parent)

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.3.BUILD-SNAPSHOT</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

spring-boot-starter-parent (부모 프로젝트)
공식문서 참고 : https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-dependency-management

공식문서

  • Java 1.8 as the default compiler level.
  • UTF-8 source encoding.
  • A Dependency Management section, inherited from the spring-boot-dependencies pom, that manages the versions of common dependencies. This dependency management lets you omit tags for those dependencies when used in your own pom.
  • An execution of the repackage goal with a repackage execution id.
  • Sensible resource filtering.
  • Sensible plugin configuration (exec plugin, Git commit ID, and shade).
  • Sensible resource filtering for application.properties and application.yml including profile-specific files (for example, application-dev.properties and application-dev.yml)

자바 기본 버전 설정(1.8), UTF-8, 리소스에 스프링 부트가 사용하는 프로퍼티나 yml파일들 포함시켜 준다거나,
플러그인 설정도 마찬가지로 스프링 부트에 최적화된 설정들을 잡아준다.

그런데 만약 우리 프로젝트는 우리만의 상속 구조가 있어서,
우리 프로젝트에 저 parent를 선언 못하는 경우라면?
그렇다면 우리만의 구조로 상속하는 그 프로젝트의 parent에 설정을 해 주면 된다.

그럼 우리 프로젝트
-> 우리가 상속받는 프로젝트
-> (spring-boot-starter-parent) 이렇게 들어가서 동일하게 의존성 관리를 받을 수 있다.

만약 부모가 고정되어 있어서 건드릴 수가 없다. 그렇다면 <dependencyManagement>로 설정을 할 수 있지만,
모든게 다 되는 것은 아니고(parent와 다름) 추천하지는 않는다.

의존성 관리 응용

<!-- spring-boot-getting-started(부모)의 spring-boot-dependencies(부모) 로 들어가면
    properties 설정 참고하여 여기서 재정의할 수 있다.-->
<properties>
    <spring.version>5.0.6.RELEASE</spring.version>
</properties>
...
...
<!-- 스프링 부트가 관리하는 의존성 (버전 쓸 필요 없다)-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 스프링 부트가 관리하지 않는 의존성 -->
<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>2.3.5</version>
</dependency>

인텔리J 옆에 아이콘이 뜨면 버전 관리를 해 주는 것인데, 이럴 경우 버전은 적을 필요 없다.




© 2019. by jaeuk