Spring Boot 의존성 설정 (spring-boot-starter, spring-boot-starter-parent)

2020. 5. 21. 15:44Computer Science/Backend

(Maven 기준)

파이썬에 pip이 있다면 자바 스프링에는 maven, gradle같은 빌드 툴이 있다. 스프링은 빌드 툴로 부터 어플리케이션에 필요한 라이브러리를 다운로드 받아 사용한다. 자바 라이브러리간의 관계를 의존성이라고 부르는 것 같다. 스프링의 의존성은 버전 영향을 많이 받는다. 

 

스프링 부트 의존성(spring boot dependencies)은 org.springframework.boot라는 groupId를 사용한다. 전형적으로 메이븐 pom 파일이 spring-boot-starter-parent 프로젝트로부터 상속받고, 하나 혹은 두 개 이상의 Starters를 선언한다. 또한, 스프링 부트는 실행가능한 jar를 만들기 위해 선택적으로 Maven plugin을 제공한다. 

 

개발 분야에 따라 필요한 라이브러리를 주입하기 때문에 자세한 건 생략하고, 뼈대가 되는 spring-boot-starter-parent와 spring-boot-starter 위주로 정리하겠다.

spring-boot-starter-parent

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.12.RELEASE</version>
</parent>

pom.xml에 위 코드를 추가해주면 아래로 따라오는 spring boot 의존성들에 대해, 검증된 버전 조합을 제공한다. 보통 <dependencies> ... </dependencies>가 들어가기 전에 선언해준다. 이 의존성은 특별한 스타터로, 유용한 메이븐 디폴트를 제공한다. 이것은 또한 dependency-management 라는 것을 제공하는데, 이는 당신이 굳이 의존성의 버전태그를 하지 않아도 되게끔 해준다. 

 

spring-boot-starter-?

<dependencies>

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  
  <dependency>
  	  <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  
  ...
  
</dependencies>

starter는 당신의 어플리케이션에 포함시킬 의존성 디스크립터들의 집합이라고 보면 된다. 위에서도 언급했지만 spring-boot-starter-parent를 설정해 두었다면 버전 태그는 필요 없다. 예를 들어, 스프링과 JPA를 활용해 데이터베이스에 접근하고 싶다면 spring-boot-starter-data-jpa를 추가하면 그만이다. starter가 없었다면 우리는 사용하고 싶은 라이브러리 외에 그 라이브러리와 연관 된 추가적인 라이브러리들을 조사하고 적절한 버전 조합으로 직접 구성했어야 할 것이다. 뿐만 아니라 중복되어 문제가 되는 의존성에 대해 exclusion 설정도 되어 있으니 사용하지 않을 이유가 없다.

 

starter에 대한 자세한 설명과 종류는 공식문서를 참고하면 된다.

 

 

Ref. https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-documentation