Spring Boot AutoConfiguration

Spring과 Spring Boot 의 가장 큰 차이점은 @SpringBootApplication Annotation 의 초기 설정 부트스트래핑이지 않을까 생각한다. 

Spring initializer(https://start.spring.io/) 를 통해서 프로젝트를 생성하면, 아래와 같이 main 메서드를 가진 class 와 @SpringBootApplication Annotation 을 확인할 수 있다.


그렇다면, 정확히 @SprinBootApplication 이 하는일은 무엇일까?

@SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan 3가지 어노테이션들을 확인할 수 있다.

그렇다면 각 3가지 Annotation 역할은 무엇일까?

  • @EnableAutoConfiguration : Spring Boot 의 auto-configuration 메카니즘을 가능하게 한다.
  • @ComponentScan : application 이 위치한 package 에 대하여 @Component scan 을 가능하게 한다.
  • @SpringBootConfiguration : context 에 추가적인 spring beans (@Bean 어노테이션을 통해서 정의된 메서드를 가진 클래스) 등록을 가능하게 하며, 추가적인 configuration class 들을 import 할 수 있다. 

그렇다면 auto-configuration 메카니즘은 무엇일까?

Spring Boot 는 maven 혹은 gradle 에 추가된 jar dependencies 를 바탕으로 자동으로 설정을 시도한다. 예를 들어, HSQLDB 가  classpath 에 있다면, 수동으로 database connection beans 들을 설정할 필요가 없다. Spring Boot 는 자동으로 in-memory database 설정을 해준다.

단지, @EnableAutoConfiguration 이 포함된 @SpringBootApplication 어노테이션 하나만으로 해결된다.
Auto-configuration 은 code 침습적이지 않다. 언제라도 auto-configuration 의 부분을 custom configuration 을 정의해서 대체할 수 있다.
현재 적용되고 있는 auto-configuration 을 파악하고 싶다면, application 을 --debug 모드를 적용하면 된다. debug logs 가 활성화 되며 console 에서 어떻게 적용되는지 확인할 수 있다.

댓글

이 블로그의 인기 게시물

Spring Boot Actuator readiness, liveness probes on k8s

About Kafka Basic

sneak peek jitpack

About idempotent

About G1 GC

About ZGC

About JVM Warm up

I need to know a little JVM

HackerRank Java Between Two Sets

Java - HashMap (feat. LinkedList, Tree.. maybe Later)