Web/Spring Boot

Spring Boot 자동 설정

돌건 2021. 8. 18. 22:58

오랜만에 다시 돌아온 주인장이라고 할 수 있겠다. 즈아, 바로 전 시간에는 의존성에 대해서 알아보았다. 오늘은, 스프링 부트의 또 다른 특징 중 하나인 자동설정에 대해서 알아보도록 하겠다.

 

• 자동설정이란?

Spring MVC를 사용해 프로젝트를 개발한 경험이 있다면, 아무리 간단한 웹 어플리케이션이라 하더라도 기본적으로 여러 가지의 설정이 필요하다는 것을 알 것이다. 그러나, Spring Boot가 제공하는 자동설정은 웹 어플리케이션에 사용되는 수많은 Bean들을 등록해준다. 그 비밀은 바로, Spring Boot 프로젝트 생성 시 기본으로 제공되는 메인 클래스의 @SpringBootApplication 덕분이다.
[사진 1. 메인 클래스]


@SpringBootApplication 어노테이션 안에는 다양한 설정 관련 어노테이션이 존재한다. 

[사진 2. @SpringBootApplication 구성]

[사진 2]를 보면, @SpringBootApplication 어노테이션은 다양한 어노테이션들로 구성된 것을 확인할 수 있다. 이 중에서 가장 중요한 친구들은 @SpringBootConfiguration@EnableAutoConfiguration, @ComponentScan이다. 실제로, 메인 클래스에서 @SpringBootApplication 어노테이션 대신에 이 3개의 어노테이션을 작성하더라도 동일하게 동작한다. 

어노테이션명 설명
@SpringBootConfiguration Spring MVC에서 환경설정 Bean 등록을 위해 사용되던 @Configuration과 동일하다.
Spring Boot 환경설정 클래스임을 표현하기 위해 이름에 SpringBoot를 추가해준 것.
@Configuration으로 변경해서 사용해도 동일하게 동작한다.
@EnableAutoConfiguration 자동설정 관련 어노테이션이다. XXXResolver와 같은 객체를 메모리에 올리는 작업을 한다.
@ComponentScan 컨테이너 초기화 시 @Configuration, @Repository, @Service, @Controller, @RestController 등 @Bean 관련 어노테이션이 붙은 객체를 메모리에 올리는 역할을 한다.
Spring Boot는 2단계로 나누어 컨테이너에 객체를 생성한다. 예를 들어, 파일 업로드를 위해서는 MultipartFile 객체를 이용해 업로드를 할 수 있도록 Controller를 구현해야 한다. 그러나 실제로 파일 업로드 기능이 동작하기 위해서는 반드시 사용자가 업로드한 파일 정보가 MultipartFile 객체에 설정되어야 하고, 이를 위해 MultipartResolver가 반드시 필요하게 된다. 따라서, @ComponentScan은 Controller와 같은 객체를, @EnableAutoConfiguration은 MultipartResolver와 같은 객체를 각각 메모리에 올리는 역할을 한다.