1. @SpringBootApplication 소개
IntelliJ IDE에서 Spring Initializr를 통해 프로젝트를 새로 생성하면, 따로 Spring 관련 라이브러리들(ex. Spring Web 등)을 추가해주지 않더라도 java/main 메서드의 최상위 클래스 위에 @SpringBootApplication 어노테이션이 설정된다. 이 글에서는 해당 어노테이션의 기능에 대해서 정리해보고자 한다.
2. @SpringBootApplication의 기능
@SpringBootApplication은 Spring Bean 설정 기능과 라이브러리들의 의존성 추가 작업을 해준다. 즉 @EnableAutoConfiguration, @Configuration, @ComponentScan 어노테이션이 주 기능이라고 보면된다. 차례대로 기능을 살펴보자.
2-1. @EnableAutoConfiguration
@EnableAutoConfiguration은 스프링에서 필요로 하는 기본적인 라이브러리들의 의존성을 자동으로 추가해주는 어노테이션이다. 즉 ApplicationContext의 설정을 자동으로 수행해준다. ApplicationContext에 대해서는 이전에 스프링 기본을 공부했었다. 여기서는 그림만 한번 다시 떠올려보자.
[스프링 기초] 10. Bean Factory와 BeanDefinition
@EnableAutoConfiguration은 org.springframwork.boot:spring-boot-autoconfigure:{version} 라이브러리의 META-INF를 참고한다. 여기서 spring.factories에 기술되어있는 메타데이터(= 설정 정보)를 참조하여 설정해주는 것이다.
다만 참조1에 따르면, 자원 사용을 효율적으로 하기 위해서 spring.factories에 있는 모든 라이브러리들을 참조하는 것은 아니고 @EnableAutoConfiguration 내부의 AutoConfigurationImportSelector.class을 통해 필요한 라이브러리들만 filtering되어 참조된다고 한다.
2-2. @Configuration
@Configuration은 설정 정보임을 Spring에 알려주는 어노테이션이다. Spring 기본에서 공부한 내용이므로 간단하게 요약만 한다.
- Spring의 설정 정보를 담고 있는 class임을 알려주는 어노테이션
- 여기에 @Bean으로 각종 클래스들을 설정하면 다른 클래스에서 @Bean들을 @Autowired 등으로 불러와서 참조할 수 있다.
2-3. @ComponentScan
@ComponentScan도 Spring 기본에서 공부한 내용이다. 다만 여기 @SpringBootApplication에서는 excludeFilters를 사용하여 filter에서 특정 빈들은 걸러준다.
[스프링 기초] 12. 컴포넌트 스캔(Component Scan)
참조
1. jwkim.log - @SpringBootApplication 파헤치기
https://velog.io/@jwkim/spring-boot-springapplication-annotation
2. 고라니의 개발일기 - @SpringBootApplication
https://mand2.github.io/spring/spring-boot/4/