본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/spring

[spring] SpringBootApplication, 스프링 부트 어노테이션 정리

by 미노드 2023. 7. 13.

springboot 관련 클래스 중에 springboot를 실행시키기 위한 main메소드에는 @SpringBootApplication 가 붙는다.

1
2
3
4
5
6
7
@SpringBootApplication
public class SpringBootApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class, args);
    }
}
cs

실행용 클래스 및 메소드와 별개로 SpringBootApplication의 설정파일도 클래스로 구현할 수 있다.

기존 Spring엔 config.xml 파일이나 프로퍼티 파일로 설정하는 경우가 대부분이었으나,
스프링 부트로 넘어가면서 java단에서 bean으로 설정 파일을 등록해 사용하는 경우가 많다.

어느걸 사용해도 상관없긴 하나, class로 만들어야 boot에서 인식되는 설정이 존재해서 이기도 하고
관리가 더 수월해서 이기도 하다.(xml파일 같은경우 여러군데 분산되어있으나, bean으로 만들면 한 패키지에 묶어서 관리 가능)

@SpringBootApplication 어노테이션을 까보면 다음과 같은 어노테이션들을 포함하고 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
      @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
 
    ...
 
}
cs

여러 Annotation이 있으나, 이 중에서 주된 내용은 아래 3가지 이다.

  • @SpringBootConfiguration
  • @ComponentScan
  • @EnableAutoConfiguration

@SpringBootConfiguration

  • 스프링 부트 어플리케이션을 실행하는데 필요한 환경설정 Class다
  • @Configuration을 대체하며 스프링 부트 전용 어노테이션이다.
  • 스트 어노테이션을 사용할 때 계속 이 어노테이션을 찾기 때문에 스프링 부트에서는 필수 어노테이션이다. 

@ComponentScan

  • @Configuration, @Repository, @Controller, @Service, @RestController
  • 위 어노테이션을 포함하는 모든 클래스를 찾아서 Bean으로 등록해준다.
  • 어느 패키지의 Component를 Scan할지 지정해주기도 한다.(직접 선언 안해도 되며, 기본값으로 메인클래스 위의 패키지들이 포함된다.)

xml 설정파일에선 이런구조

@EnableAutoConfiguration

  • 자동 설정의 핵심 어노테이션으로 클래스 경로에 지정된 내용을 기반으로 설정 자동화를 수행한다.
  • Spring의 META-INF 파일을 읽어들인다.
  • META-INF 아래 spring.factories 파일이 존재하는데 org.springframework.boot.autoconfigure.EnableAutoConfiguration 를 키값으로 하는 모든 설정을 가져온다.
  • 실제로 전부 다 가져오는게 아니고 @ConditionalOn~~ 조건에 따라 다르다.

연관성을 생각해보면, ComponentScan은 안에 해당되는 어노테이션에 대한 설정을 Bean으로 등록하여 사용 가능하게 해주고
EnableAutoConfiguration은 환경 설정에 필요한 자동 설정을 Bean으로 등록해준다.
따라서 EnableAutoConfiguration에 있는 설정을 사용하지 않을 것이라면 사용하지 않고 @Configuration, @ComponentScan 만으로도 구동이 가능하다.