스프링 부트가 제공하는 자동 구성(Auto Configuration)
- 스프링 부트 프로젝트를 사용하면 'spring-boot-autoconfigure' 라이브러리가 기본적으로 사용된다.
- 'spring-boot-autoconfigure' 라이브러리를 통하여 자동 구성 할 라이브러리들을 모아둔다.
자동 설정 - 빈들을 자동으로 등록해서 스프링이 동작하는 환경을 자동으로 설정
자동 구성 - 스프링 실행에 필요한 빈들을 자동으로 배치
외부 라이브러리를 사용할 때, 사용되는 빈들을 하나하나 등록하고, 초기 설정 등을 해야 한다. 이러한 부분을 자동으로 처리해주는 것이 바로 스프링 부트 자동 구성(Auto Configuration)이다.
@Conditional
특정 상황에서 특정 빈들만 사용하고 싶을 때 쓰는 기능
@ConditionalOnXxx
스프링은 @Conditional과 관련해서 개발자가 편리하게 사용할 수 있도록 수 많은 @ConditionalOnXxx를 제공한다.
- @ConditionalOnClass , @ConditionalOnMissingClass
- 클래스가 있는 경우 동작한다. 나머지는 그 반대
- @ConditionalOnBean , @ConditionalOnMissingBean
- 빈이 등록되어 있는 경우 동작한다. 나머지는 그 반대
- @ConditionalOnProperty
자동 구성 이해
스프링 부트의 동작
스프링 부트는 다음 경로에 있는 파일을 읽어서 스프링 부트 자동 구성으로 사용한다.
resources/META-INF/spring/
org.springframework.boot.autoconfigure.AutoConfiguration.imports
설정 정보를 추가하는 방법(@Import)
- 정적인 방법 - @Import (클래스), 설정으로 사용할 대상을 동적으로 변경할 수 없다.
- 동적인 방법 - @Import ( ImportSelector ) 코드로 프로그래밍해서 설정으로 사용할 대상을 동적으로 선택할 수 있다.
스프링 부트 자동 구성이 동작하는 순서
@SpringBootApplication -> @EnableAutoConfiguration ->
@Import(AutoConfigurationImportSelector.class) ->
resources/META-INF/spring/
org.springframework.boot.autoconfigure.AutoConfiguration.imports
파일을 열어서 설정 정보 선택 -> 해당 파일의 설정 정보가 스프링 컨테이너에 등록되고 사용
Tip
- @AutoConfiguration 에 자동 구성의 순서를 지정할 수 있다.
- @AutoConfiguration 도 설정 파일이다. 따라서 내부에 @Configuration 이 있는 것을 확인할 수 있다.
- @AutoConfiguration 은 일반 스프링 설정과 라이프사이클이 다르기 때문에 컴포넌트 스캔의 대상이 되면 안되고, 파일에 지정해서 사용해야 한다.