본문 바로가기

Java/SpringBoot

[SpringBoot] Springboot의 자동설정

스프링 MVC를 이용하여 웹 애플리케이션을 개발한다면 간단한 웹 애플리케이션이라도 기본적으로 여러 가지 설정이 필요하지만 스프링부트에서는 자동설정 기능이 동작하면서 수많은 bean들이 자동으로 등록되고 동작한다.

 

 

- 메인 클래스 위에 선언된 @SpringBootApplication 어노테이션 하나만으로 복잡한 설정들을 대신할 수 있다.

 

@SpringBootApplication을 자세히 살펴보자

- @SpringBootApplication은 다양한 어노테이션을 포함하고 있는데, 중요한 한 어노테이션은 @SpringBootConfiguration, @ComponentScan, @EnableAutoConfiguration 3개다.

 

@SpringBootConfiguration

 -환경설정 bean 클래스를 표현하기 위해 사용했던 @Configuration과 동일하다

@ComponentScan

 - @Configuration, @Service, @Controller, @RestControlller, @Repository 어노테이션이 붙은 객체를 메모리에 올리는 역할을 한다. 

 - 위에 클래스에서 설정된 @ComponentScan은 TypeExcludeFilter와 AutoConfigurationExcludeFilter를 제외하고 나머지 객체들을 스캔해서 초기화하도록 설정한 것이다.

@EnableAutoConfiguration 

 - 스프링 부트는 스프링 컨테이너를 구동할 때 2단계로 나누어 객체들을 생성한다. 스프링부트가 이렇게 두 단계로 나누어 bean들을 초기화하는 이유는 애플리케이션을 운영하기 위해서는 두 종류의 bean들이 필요하기 때문이다.

 - 예를 들어, 웹 애플리케이션에서 파일 업로드 기능을 추가한다고 가정하면 파일 업로드를 추가하기 위해서 먼저 컨트롤러를 MultipartFile객체를 이용해서 업로드 기능한 컨트롤러를 구현해야 한다. 그런데 실제로 파일 업로드 기능이 동작하기 위해서는 반드시 사용자가 업로드한 파일 정보가 MultipartFile 객체에 설정되어야 하며, 이를 위해서 멀티파트 리졸버 객체가 반드시 필요하다. 즉, 파일 업로드가 정상적으로 동작하기 위해서는 컨트롤러뿐만 아니라 이를 위해 멀티파트 리졸버 객체를 메모리에 올리는 두 개의 객체 생성 과정이 필요하다.

 정리하면 @ComponentScan은 컨트롤러 객체를 메모리에 올리는 작업을 처리하고 @EnableAutoConfiguration은 멀티파트 리졸버 같은 객체들을 메모리에 올리는 작업을 한다.