사내 프로젝트를 개발하던 와중에 멀티 모듈로 존재하는 모듈들을 하나의 모듈로 합친 뒤 패키지별로 import하여 사용하는 방식으로 구현하라는 임무가 주어졌다. (뜨든...)
spring에서 제공하는 spring.factories의 org.springframework.boot.autoconfigure.EnableAutoConfiguration에 미리 만들어 놓은 config파일을 로딩하거나 아니면 어노테이션을 직접 만들어서 사용하고자 하는 프로젝트에 enable 시키는 방법 두가지를 생각해냈다. 그 중에서 이번에는 EnableAutoConfiguration을 활용한 방법을 기록하고자 한다.
@Configuration
@ComponentScan(basePackageClasses = {AuthorityApi.class})
public class AuthorityApiAutoConfiguration {
}
@Configuration
@ComponentScan(basePackageClasses = SApi.class)
public class SApiAutoConfiguration {
}
사용할 패키지는 sapi, authority-api 두가지여서 해당 패키지를 나눈 뒤
com.wemakeprice.v.employee.infra.web.sapi
com.wemakeprice.v.employee.infra.web.authority
각각의 패키지 안에 SApiAutoConfiguration, AuthorityApiAutoConfiguration config 클래스를 생성해 놓았다. 그리고 해당 클래스에서 @ComponentScan을 걸어 놓는다.
스프링에서 기본적으로 약속 되어서 구동되는 resources > META-INF > spring.factories를 활용했는데
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.wemakeprice.v.employee.infra.web.sapi.SApiAutoConfiguration,\
com.wemakeprice.v.employee.infra.web.authority.AuthorityApiAutoConfiguration
어려워 보이겠지만 다행하게도 자동완성이 되니 안심해도 좋다.
어려워 보이겠지만 단순하다.
- import 할 패키지를 선정하고 autoconfiguration 파일을 만든다.
- import를 하는 쪽에서 resources > META-INF > spring.factories 파일을 생성해서 위 처럼 넣어주면 어플리케이션이 구동될 때 해당 auto configuration을 참조해서 bean들을 로딩한다!
위의 방법으로 sapi, authority-api 두가지 패키지 중 필요한 부분만 꺼내서 사용할 수 있게 되었다. 모듈들이 늘어나고 서로 필요로 하는 패키지가 상이할 경우 유용할거 같다.