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 에서 어떻게 적용되는지 확인할 수 있다.

댓글

이 블로그의 인기 게시물

About JVM Warm up

About idempotent

About Kafka Basic

About ZGC

sneak peek jitpack

Spring Boot Actuator readiness, liveness probes on k8s

About Websocket minimize data size and data transfer cost on cloud

About G1 GC

대학생 코딩 과제 대행 java, python, oracle 네 번째