프리 정보 컨텐츠

@SpringBootApplication 이란?? 본문

JAVA/SpringBoot Annotation

@SpringBootApplication 이란??

쏜스 2021. 7. 3. 16:21

이동욱 저자님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 따라하며 SpringBoot의 어노테이션을

정리하고자 합니다.

 

Application 은 프로젝트의 메인 클래스로서 SpringApplication.run으로 인해 내장 WAS(Web Application Server)를 실행합니다. 내장 WAS란 별도로 외부에 WAS를 두지않고 내부에서 WAS를 실행하는 것을 말합니다. 

이렇게 하면 항상 서버에 톰캣을 설치할 필요가 없게 되고, 스프링 부트로 만들어진 jar 파일로 실행하면 됩니다.

 

@SpringBootApplication이 하는 기능에 대해서 자세하게 알아보겠습니다.

package com.son.admin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

/*
    SpringBootApplication -> 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정됨
 */
@EnableJpaAuditing      // JPA Auditing 활성화
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);         // 내장 WAS사용으로 언제 어디서나 같은 환경에서 스프링 부트 배포
    }
}

@SpringBootApplicatino 의 주요 3가지 역할

@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 {
	....(생략)
}

@SpringBootApplication을 타고 들어가면 위와 같은 역할을 하는 것을 볼 수 있습니다. 그 중에서 자세하게 알아볼 것은 세 가지 어노테이션입니다.

  • @SpringBootConfiguration
  • @ComponentScan
  • @EnableAutoConfiguration

여기서 스프링 부트를 실행하면 빈은 두 단계로 나눠서 읽습니다. @SpringBootApplication 어노테이션이 위치한 패키지를 기준으로 하위 패키지에 등록되어있는 빈을 모두 수집합니다.

 

첫 번째로 @ComponentScan 어노테이션을 통해 자주 쓰이는 @Controller, @Service, @Repository등 수집합니다.

두 번째로는 @EnableAutoConfiguration이 하는 역할은 spring-boot-autoconfigure안에 META-INF 밑에 있는 

spring.factories안에 들어 있는 자동 설정들을 조건에 따라서 등록시키는 역할을 합니다. 

 

즉, @EnableAutoConfiguration 어노테이션이 읽는 빈은 @ComponentScan이 빈을 다 등록한 다음에 추가적인 빈을 등록해주므로 두 단계에 걸쳐서 읽는다고 한 것입니다.

Comments