의존성 관리
이번 시간에는 스프링 부트이 어떻게 의존성을 관리하는 지에 대해서 알아보려고 한다.
◆ 핵심 요소
요소 | 기능 |
Starter | 스프링이 제공하는 특정 모듈을 사용할 수 있도록 관련된 라이브러리 의존성을 해결한다. |
AutoConfiguration | Starter를 통해 추가한 모듈을 사용할 수 있도록 관련된 Bean 설정을 자동으로 처리. |
Actuator | 스프링 부트로 개발된 시스템을 모니터링할 수 있는 다양한 기능을 제공. |
스프링 부트는 프로젝트를 생성할 때(혹은 생성 이후) 사용하고자 하는 모듈을 선택해 의존성을 설정할 수 있다. 기존에 스프링에서는 모듈 하나를 사용하기 위해서 필요한 의존성을 모두 찾아 설정해줘야 했다. 스프링 부트는 starter를 통해 어떤 라이브러리가 필요하고, 어떤 버전을 사용해야 하는지 몰라도 해당 모듈과 관련된 라이브러리 의존성을 설정해준다. (의존성 설정에서 스트레스 받을 일이 줄어든다!!!)
* starter는 [spring-boot-starter-모듈명] 형태의 이름을 갖는다.
[사진 1]처럼 jpa 모듈을 사용하기 위해서 starter를 통해 의존성을 설정해주었다. 기존 스프링에서는 관련 라이브러리의 의존성을 모두 등록해주어야 했지만, 스프링 부트에서는 이렇게 간단하게 설정이 가능하다. 그렇다면 어떻게 이게 가능한 것일까?
[사진 1]에서 등록한 spring-boot-starter-data-jpa를 [Ctrl] 혹은 [Command] 키를 누르고 클릭해보자. 클릭하게 되면, org.springframework.boot:spring-boot-dependencies:x.x.x.pom 파일이 열릴 것이다. (어떤 스타터를 눌러도 동일, x.x.x는 스프링 부트 버전) 이 파일에는 스프링 부트가 제공하는 수많은 스터터들이 등록되어 있다. 그리고 스프링 부트가 지원하는 다양한 의존성들도 등록되어 있다. 이처럼 많은 설정들 중에서 우리가 등록한 스타터가 있고, 이 설정에는 버전 정보까지 명시되어 있기 때문에 우리의 pom.xml에 버전에 대한 명시가 없어도 자동으로 버전 정보가 상속되고 있는 것이다.
◆ pom 상속
앞선 시간에 POM 파일은 클래스와 같이 상속을 통해 복잡한 설정을 재사용할 수 있다고 언급했다. 또한, 이 때 사용하는 엘리먼트가 <parent>라는 것까지 전달했었다. 이제 pom 상속의 구조에 대해서 파악해보자.
우선, pom.xml 파일에서 <parent> 설정을 [Ctrl] 혹은 [Command] 키를 누르고 클릭해보자. 그러면 spring-boot-starter-parent:x.x.x.pom 파일이 열릴 것이다. 하지만 이 파일에서는 의존성을 등록하는 <dependency> 설정은 보이지 않고, <plugin> 설정만 잔뜩 들어있는 것을 확인할 수 있다. 여기서 당황하지말고, 열린 파일의 <parent>를 동일한 방법으로 열람해보자. 그러면 앞서 스타터를 통해서 확인했던 spring-boot-dependencies:x.x.x.pom 파일이 열람된다.
spring-boot-dependencies:x.x.x.pom
↑
spring-boot-starter-parent:x.x.x.pom
↑
나의 프로젝트
즉, spring-boot-dependencies로부터 <property> 와 <dependency> 설정들을 상속받고,
spring-boot-starter-parent로부터 <plugin> 설정들을 상속받게 되는 것이다.