Programming-[Backend]/SpringBoot

@SpringBootApplication 이해하기

컴퓨터 탐험가 찰리 2022. 6. 2. 09:52
728x90
반응형

1. @SpringBootApplication 소개

 

IntelliJ IDE에서 Spring Initializr를 통해 프로젝트를 새로 생성하면, 따로 Spring 관련 라이브러리들(ex. Spring Web 등)을 추가해주지 않더라도 java/main 메서드의 최상위 클래스 위에 @SpringBootApplication 어노테이션이 설정된다. 이 글에서는 해당 어노테이션의 기능에 대해서 정리해보고자 한다.

 

IntelliJ에서 Spring Initializr로 프로젝트 생성하기

 

프로젝트 생성 후 main 메서드 위에 기본적으로 추가된 @SpringBootApplication 어노테이션

 


 

 

 

2. @SpringBootApplication의 기능

 

 

@SpringBootApplication은 Spring Bean 설정 기능과 라이브러리들의 의존성 추가 작업을 해준다. 즉 @EnableAutoConfiguration, @Configuration, @ComponentScan 어노테이션이 주 기능이라고 보면된다.  차례대로 기능을 살펴보자.

 

 

2-1. @EnableAutoConfiguration

 

@EnableAutoConfiguration은 스프링에서 필요로 하는 기본적인 라이브러리들의 의존성을 자동으로 추가해주는 어노테이션이다. 즉 ApplicationContext의 설정을 자동으로 수행해준다. ApplicationContext에 대해서는 이전에 스프링 기본을 공부했었다. 여기서는 그림만 한번 다시 떠올려보자.

[스프링 기초] 10. Bean Factory와 BeanDefinition

 

 

 

스프링 기본에서 공부했었던 ApplicationContext와 BeanFactory 개념

 

 

 

 

@EnableAutoConfiguration은 org.springframwork.boot:spring-boot-autoconfigure:{version} 라이브러리의 META-INF를 참고한다. 여기서 spring.factories에 기술되어있는 메타데이터(= 설정 정보)를 참조하여 설정해주는 것이다.

 

Maven - spring-boot-autoconfigure 내부 spring.factories
spring.factories에 기술된 설정 정보들. ApplicationContextInitializer, 각종 Listener, EnableAutoConfiguration 등의 참조 정보가 있는 것을 볼 수 있다.

 

 

다만 참조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/

 

 

 

 

 

 

728x90
반응형