Search
Duplicate
🏸

AutoConfiguration

AutoConfiguration이란?

스프링부트는 자동 구성 기능을 제공하는데 이는 일반적으로 빈을 자동으로 등록해주는 기능이다.
덕분에 반복적으로 빈을 등록하고 설정하는 부분을 줄여 편리한 개발을 할 수 있게 도와준다.

AutoConfiguration 동작 방식

1.
@SpringBootApplication
@Configuration, @EnableAutoConfiguration, @ComponentScan이 결합된 어노테이션이다.
ApplicationContext를 구성하는데 필요한 메타데이터를 제공한다.
여기서 AutoConfiguration과 관련 있는 것은 @EnableAutoConfiguration이다.
2.
@EnableAutoConfiguration
AutoConfiguration을 활성화하는 기능이다.
해당 어노테이션은 @Import 어노테이션으로 구성되어있다.
@Import
Import할 하나 이상의 대상을 지정하는 경우 사용되는 어노테이션이다.
ImportSelector
등록할 대상을 동적으로 구성할 수 있게 해주는 클래스다.
여기서 AutoConfigurationImportSelector를 사용하는데, 이는 특정 조건에 따라 @AutoConfiguration 클래스를 동적으로 Import하기 위한 Selector 클래스다.
이를 통해 자동 구성 정보를 가져오고 가져온 구성 정보를 필터링하여 유효한 경우 AutoConfiguration으로 등록한다.
@SpringBootAppliction@EnableAutoConfiguration@Import(AutoConfigurationImportSelector.class)resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

동작 구조

@AutoConfiguration
스프링 부트에서 AutoConfiguration으로 처리될 수 있는 후보를 명시하는 역할을 수행한다.
before, after 속성을 사용해 AutoConfiguration 처리 시, 순서를 지정할 수 있다.
AutoConfigurationImportSelector는 해당 어노테이션이 붙은 클래스만 조회를 수행한다.
Condition & @Conditional
해당 빈을 등록할지 하지 않을지 matches 함수를 이용해 판단한다.
@ConditionalOn*
자주 사용되는 Condition 구현체들을 미리 @Conditional{구현체}로 구현해 제공한다.
@ConditionalOnBean, @ConditionalOnMissingBean, @ConditionalOnClass, @ConditionalOnMissingClass, @ConditionalOnProperty, @ConditionalOnSingleCandidate 등이 있다.
@ConfigurationProperties
외부 설정(application.properties, yml 등)을 Java 객체에 바인딩하기 위한 어노테이션이다.
@EnableConfigurationProperties
바인딩한 자바 객체를 주입한다. @ConfigurationProperties를 정상적으로 동작하게 하기 위해서 사용한다.