49.5 자신만의 스타터 생성하기 by ks

라이브러리를 위한 풀 스프링 부트 스타터는 다음과 같은 구성 요소를 포함 할 수 있다 :

  1. 자동 구성 코드를 포함하는 autoconfigure 모듈.

  2. 일반적으로 유용한 추가 의존성과 라이브러리 뿐만 아니라 autoconfigure 에 의존성을 제공하는 Starter 모듈. 요컨대, 스타터를 추가하면 해당 라이브러리를 사용하는 데 필요한 모든 것을 제공해야한다.

자동 구성 코드와 종속성 관리를 분리 할 필요가 없는 경우 단일 모듈에 자동 구성 코드와 종속성 관리를 결합 할 수 있다.

49.5.1 이름짓기

스타터에 적절한 네임 스페이스를 제공해야한다. spring-boot와 다른 Maven groupId 를 사용하더라도, spring-boot 이름으로 모듈을 시작하지 마십시오. 앞으로 자동 구성되는 것에 대한 공식적인 지원을 제공 할 수 있다.

경험상, 스타터 후에 결합 된 모듈의 이름을 지정해야한다. 예를 들어, "acme"에 대한 스타터를 만들고 자동 구성 모듈 acme-spring-boot-autoconfigure과 스타터 acme-spring-boot-starter 이름을 지정한다고 가정한다. 두 모듈을 결합한 모듈이 하나뿐이라면 이름을 acme-spring-boot-starter 로 지정하십시오.

또한 스타터가 구성 키를 제공하면, 고유한 네임 스페이스를 사용하십시오. 특히, Spring Boot가 사용하는 네임 스페이스에 키를 (예 : server, management, spring, 등을 포함하지 않는다.) 포함하지 마십시오. 동일한 네임 스페이스를 사용하는 경우 모듈을 손상시키는 방식으로 향후 이러한 네임 스페이스를 수정할 수 있다.

구성 키 (configuration key)는 configuration 할 때 사용되는 key들 (프로퍼티에서 스캔하는 키를 의미하는것같아. 검색하면 자세한 내용은 안나오지만 아래 문맥을 유추해보면..) 은 스프링 부트가 사용하는 키들을 사용하면 안되고(중복되니까!) 문서화할 것!

메타 데이터 생성을 트리거 하여 IDE 보조 기능을 키에 사용할 수 있도록하십시오. 생성된 메타 데이터 ( META-INF/spring-configuration-metadata.json) 를 검토 하여 키가 제대로 문서화되었는지 확인하십시오.

49.5.2 autoconfigure 모듈

autoconfigure 모듈에는 라이브러리를 시작하는 데 필요한 모든 것이 들어 있다. 또한 구성 키 정의 (가령 @ConfigurationProperties) 및 구성 요소 초기화 방법을 사용자 정의하는 데 사용할 수있는 모든 콜백 인터페이스를 포함 할 수 있다.

autoconfigure 모듈을 프로젝트에 보다 쉽게 포함시킬 수 있도록 선택적으로 라이브러리에 대한 dependencies를 표시해야한다. 그렇게하면 라이브러리가 제공되지 않아도, 기본적으로 스프링 부트가 시작된다.

스프링 부트는 annotation 프로세서를 사용하여 메타 데이터 파일 ( META-INF/spring-autoconfigure-metadata.properties)의 자동 구성 조건을 수집한다. 해당 파일이 있으면, 일치하지 않는 자동 구성을 열심히 필터링하여 시작 시간을 향상시킨다. 자동 구성이 포함 된 모듈에 다음 종속성을 추가하는 것이 좋다.



   org.springframework.boot
   spring-boot-autoconfigure-processor
   true

Gradle 4.5 이하 compileOnly 에서는 다음 예와 같이 구성 에서 종속성을 선언해야한다.


dependencies {
   compileOnly "org.springframework.boot:spring-boot-autoconfigure-processor"
}

Gradle 4.6 이상 annotationProcessor 에서는 다음 예와 같이 구성 에서 종속성을 선언해야한다.


dependencies {
   annotationProcessor "org.springframework.boot:spring-boot-autoconfigure-processor"
}

49.5.3 스타터 모듈

스타터는 실제로 빈 jar이다. 유일한 목적은 라이브러리와 작업하기 위해 필요한 종속성을 제공하는 것이다. 시작하는 데 필요한 것을 보는거라고 생각하면 된다.

스타터가 추가된 프로젝트에 대해 가정하지 마십시오. 일반적으로 자동 구성중인 라이브러리에 다른 시작 프로그램이 필요하면 이를 언급하십시오. 선택적 dependencies의 수가 높으면 기본 dependency의 적절한 세트를 제공하는 것이 어려울 수 있다. 이는 라이브러리의 일반적인 사용에 불필요한 dependency를 포함하지 않아야하기 때문이다. 즉, 선택적 종속성을 포함하면 안된다.

어느 쪽이든, 스타터는 핵심 Spring Boot 스타터 ( spring-boot-starter)를 직접 또는 간접적으로 참조해야한다 (즉, 스타터가 다른 스타터에 의존 할 경우 추가 할 필요가 없음). 커스텀 스타터만으로 프로젝트를 만들면 코어 스타터의 존재로 Spring Boot의 핵심 기능을 사용할 수 있습니다.

Last updated