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