본문 바로가기

Java/SpringBoot

[SpringBoot] Starter로 의존성 관리하기

- maven project에서는 pom.xml 파일을 통해 프로젝트에 필요한 의존성을 관리할 수 있지만, 예를 들어 프로젝트에 스프링과 JPA를 연동해서 데이터베이스 작업을 처리한다고 가정하면 hibernate-entitymanager.jar 파일을 다운로드하여 클래스 패스에 추가해야 한다. 그러기 위해서는 pom.xml 파일에 하이버네이트 관련된 <dependency> 설정을 가장 먼저 추가해야 한다.

- 하지만 문제는 프로젝트에 하이버네이트 관련 의존성만 추가했다고 해서 스프링과 JPA연동을 바로 처리할 수 없다는 것이다. 즉, 스프링과 JPA를 연동하기 위해서는 하이버네이트 말고도 spring-orm.jar나 spring-data-jpa.jar 같은 다른 라이버러리들이 추가적으로 필요하다. 그런데 어떤 라이브러리가 더 필요하고, 어떤 버전을 사용해야 하는지 미리 알기는 쉽지가 않다. 이런 문제를 효과적으로 해결하기 위해서 제공하는 것이 바로 스프링 부트의 Starter이다.

 

Starter

- Starter는 필요한 라이브러리들을 관련된 것끼리 묶어서 마치 패키지처럼 제공하기 때문에 프로젝트에 사용하고 싶은 모듈이 있으면, 그 모듈에 해당하는 Starter만 의존성으로 추가하면 된다. 그러면 관련된 라이브러리 의존성 문제가 자동으로 해결된다.

- 스프링 부트는 다양한 스타터들을 제공하며 "spring-boot-start-모듈명" 형태의 이름을 갖는 파일들이 바로 스타터다.

 


Starter 설정의 이해

- Starter는 POM 파일의 상속구조를 살펴보면 최소한의 설정만으로 수많은 라이브러리들을 자동으로 관리할 수 있다.

 

- spring-boot-starter-web이 설정된 <dependency> 소스로 마우스를 가져다대면 [Jump to location] 버튼이 보이는데 누르면

여기로 이동한다.

- 여기에는 스프링 부트가 제공하는 수많은 Starter들이 등록되어 있다. 그리고 Starter라는 이름으로 등록되지는 않앗지만 스프링부트가 지원하는 의존성들도 엄청나게 많다.

- 이 수많은 설정 중에 선택한 spring-boot-starter-web starter가 있으며, 이 설정에는 버전 정보까지 명시되어 있다.

- 따라서 우리가 가지고 있는 pom.xml에 버전에 대한 명시가 없어도 자동으로 이 버전 정보가 상속되었던 것이다.

- <Ctrl> 키를 누른 상태에서 마우스를 <dependency> 설정으로 옮기고 클릭하면

여기로 이동한다.

 

이 곳에 스프링 MVC 관련 여러 의존성들이 설정되어 있다.

이렇게 스프링 부트의 Starter를 이용하면 특정 모듈과 관련된 의존성을 패키지처럼 관리하기 때문에 프로젝트에 새로운 모듈을 쉽게 등록하거나 제거할 수 있다.

 


POM 파일 상속 구조 이해하기

- maven은 자바 클래스의 상속과 같이 상속을 통해 복잡한 설정을 재사용할 수 있는데, 이때 사용하는 엘리먼트가 <parent>이다.

- <parent> 엘리먼트는 이름 그대로 다른 POM 설정을 부모로 지정하여 부모로 부터 모든 설정을 상속받을 때 사용한다.

<Ctrl>키를 누르고 클릭하여 이동하면

상위 부모 파일의 <parent>가 또 보인다.

 

다시 또 <Ctrl>키를 누르고 클릭하여 이동하면

- 이곳에 엄청많은 <property>와 <dependency>가 설정되어 있으며, 이 의존성 설정들이 우리가 만든 프로젝트에 상속된 것이다.

- 정리해보면 최상위에 있는 spring-boot-dependencies로 부터 <property>와 <dependency> 설정들을 상속받고, spring-boot-starter-parent로부터는 <plugin>관련 설정들을 상속받는다.

- 이렇게 의존성을 관리하면 개발자는 필요한 라이브러리들을 빠르고 쉽게 추가하여 프로젝트를 생성할 수 있으며, 복잡한 의존성을 숨길 수 있어서 좀 더 쉽게 프로젝트를 관리할 수 있다.