제리의 배움 기록

[스프링] Spring Boot - AutoConfiguration 본문

자바

[스프링] Spring Boot - AutoConfiguration

제리92 2021. 11. 12. 13:55

Auto Configuration?

Spring Boot의 "auto configuration"은 프로젝트 클래스 패스에 위치한 의존 관계에 있는 jar들의 기본 설정과 빈 생성을 자동으로 도와줍니다.

auto configuration을 활성화 하기 위해서는 @EnableAutoConfiguration 혹은 @SpringBootApplication 어노테이션을 사용합니다.

@SpringBootApplication 어노테이션은 @EnableAutoConfiguration을 포함하고 있습니다.

Spring.factories

Spring Boot는 Spring으로 개발 시에 자주 사용하는 라이브러리들을 편리하게 사용하기 위해 자동설정 파일을 만들어 놓았습니다.

Spring Boot(Spring Boot 2.5.5 기준)의 의존 라이브러리 중 spring-boot-autoconfigure-2.5.5.jarspring.factories 파일을 열어 보시면 다음과 같은 설정을 확인하실수 있는데,

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
...

 

각각의 의존 라이브러리에 대한 설정파일을 나타냅니다.

위 설정들은 @EnableAutoConfiguration이 true로 활성화할때 동작합니다.
클래스 패스에 존재하는 라이브러리인 경우 자동설정 정보에 따라 관련 빈들을 초기화하고 스프링 컨테이너에 빈을 등록해줍니다.

@Configuration 어노테이션을 이용하면 Spring Boot에서 미리 정해놓은 설정 외에 직접 설정파일을 만들어서   AutoConfiguration과 연동할 수도 있습니다.

@Conditional

Spring 4에서는 @Conditional을 도입하였습니다.

@Conditional은 특정 조건에 따라 bean의 생성을 다르게 컨트롤 할 수 있어 보다 유연하게 bean을 생성 합니다.

Conditional 종류

  • 클래스 패스에 특정 클래스가 있는지 체크
  • ApplicationContext에 생성되지 않은 bean인지 체크
  • 특정 위치에 특정 파일이 없는지 체크
  • 설정파일에 특정 property 값이 있는지 체크
  • 특정 시스템 property가 있는지 체크

 

[참고]

dzone - How Spring Boot Auto-Configuration Works

javadevjournal - How Spring Boot auto-configuration works

javadevjournal - Spring Boot Auto Configuration

Comments