Java/Spring Boot

[Spring Boot] 자동 설정 (Auto Configuration)

hh_lin 2022. 2. 26. 16:49

1. @EnableAutoConfiguration

@SpringBootApplication만 적어도 Application 실행 시 

여러 설정들이 읽히면서 웹 Application이 뜨게 되는 이유는 EnableAutoConfiguration 때문

 

 

 

 

 

 

 

 

2. @SpringBootApplication

@SpringBootApplication은 다음 세 개의 어노테이션으로 바꿀 수 있음

  • @SpringBootConfiguration : @Configuration과 동일(명칭만 다르다고 봐도 무방)
  • @ComponentScan
  • @EnableAutoConfiguration 으로 바꿀 수 있음

 

 

 

 

 

 

 

3. Spring Boot의 빈을 등록하는 2단계

  • @ComponentScan 으로 등록
  • @EnableAutoConfiguration 으로 추가적인 빈들을 읽어서 등록
    @EnableAutoConfiguration가 없어도 Spring Boot는 사용할 수 있음
    즉, @Configuration과 @ComponentScan만 있어도 Application 사용 가능

 

 

 

 

 

 

 

4. @Configuration과 @ComponentScan만으로 Application 실행하기

@Configuration
@ComponentScan
//@EnableAutoConfiguration 
public class Application {

   public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
   }

}

 

단순히 어노테이션만 바꾸고 실행하게 되면 ServletWebServerFactory 빈이 없어서 에러 발생

해당 빈은 @EnableAutoConfiguration에서 자동으로 만들어주는 빈이기 때문에

@EnableAutoConfiguration을 주석처리해서 빈이 안만들어졌고 따라서, 웹 어플리케이션으로 띄울수 없음

 

 

 

# main 메소드도 추가로 변경해줘야 문제없이 실행 가능함

@Configuration
@ComponentScan
//@EnableAutoConfiguration 
public class Application {

   public static void main(String[] args) {
      SpringApplication application = new SpringApplication(Application.class);
      application.setWebApplicationType(WebApplicationType.NONE);
      application.run(args);
   }
}

WebApplicationType.NONE을 해서 WebApplication 타입이 아닌 Application 타입으로 설정

 

실행시켜보면 @EnableAutoConfiguration

즉, AutoConfiguration으로 읽어들이는 빈들이 없이도 Application이 구동되는 것을 확인할 수 있음

물론, 웹 서버로 동작하지 않음(동작하게 하려면 웹 서버용 자동 설정 필요)

 

 

 

 

 

 

 

 

 

5. @ComponentScan

자기 자신 어노테이션(@ComponentScan)이 붙어있는 클래스의 패키지부터 시작해서

그 하위 패키지까지 전부 훑어서 @Component 뿐만 아니라

@Configuration / @Repository / @Service / @Controller / @RestController 까지 빈으로 등록함

 

 

 

 

 

 

 

 

 

 

6. spring.factories

아래 경로에 있는 spring.factories 내에 선언된

 

org.springframework.boot.autoconfigure.EnableAutoConfiguration 키 값에 해당하는

모든 클래스들을 보고 조건에 맞으면 빈으로 등록함

 

@Configuration 어노테이션이 붙은 것을 확인할 수 있고

@ConditionalOn~은 괄호 안의 조건이 만족되는 경우만 설정파일을 사용하겠다는 의미

ex) @ConditionalOnWebApplication(type = Type.SERVLET) : WebApplication 타입이 SERVLET인 경우만 사용

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

스프링 부트 개념과 활용 - 인프런 | 강의

스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게 이해하고 보다 적극적으로 사용할 수 있는 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com