스프링 부트에서 즉시 웹 개발을 시작할 수 있는 이유 - AutoConfiguration

2021. 4. 22. 03:33 Spring Framework/Spring boot #3

 

스프링 부트에서 즉시 웹 개발을 시작할 수 있는 이유 - AutoConfiguration

spring-boot-starter-web 의존성을 추가하여 스프링 부트 프로젝트를 만들기만 하면 즉시 웹 어플리케이션 개발이 가능하다.

 

@RestController
public class UserController {

    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}

아무런 설정 없이 컨트롤러를 만들어 GET /hello 요청에 대한 핸들러를 구현하여 메인 어플리케이션(@SpringBootApplication)을 실행하면 해당 요청을 처리하는 웹 어플리케이션이 동작한다.

 

스프링 부트의 기본 설정

이는 스프링 부트가 제공하는 기본 설정때문에 가능한 것이다.

META-INF/spring.factories

기본 설정은 spring-boot-autoconfigure 모듈의 META-INF/spring.factories에 정의되어 있다.

 

 

그 중에서도 웹 MVC에 대한 기본 설정은 WebMvcAutoConfiguration이다.

 

WebMvcAutoConfiguration

// Defined as a nested config to ensure WebMvcConfigurer is not read when not
	// on the classpath
	@Configuration(proxyBeanMethods = false)
	@Import(EnableWebMvcConfiguration.class)
	@EnableConfigurationProperties({ WebMvcProperties.class, ResourceProperties.class })
	@Order(0)
	public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer {
    ...

이 클래스의 내용을 살펴보면 기존에 스프링 부트를 사용하지 않는, 스프링 MVC 어플리케이션 개발 시 직접 설정해주어야 했던 것들이 스프링 부트의 컨벤션에 의해 미리 설정되어 있음을 알 수 있다.

 

WebMvcProperties

@ConfigurationProperties(prefix = "spring.mvc")
public class WebMvcProperties {

WebMvcProperties는 application.properties에서 사용하여 웹 MVC에 대해 커스터마이징할 수 있는 프로퍼티가 정의되어 있는 클래스이다.

@ConfigurationProperties의 prefix = "spring.mvc"는 application.properties에서 이름이 spring.mvc.*인 프로퍼티에 대해 바인딩한다는 의미이다.

 

웹 MVC 기능 확장

스프링 부트가 제공하는 MVC 기능을 모두 사용하면서 컨버터 추가, 인터셉터 추가와 같은 추가적인 설정을 하고자 할때는 WebMvcConfigurer를 구현하는 설정파일을 만든다.

 

@Configuration
public class WebConfig implements WebMvcConfigurer {

}

 

이 클래스에서 추가하고자 하는 설정에 맞는 WebMvcConfigurer의 메소드를 구현하면 된다.

 

References

인프런 - 백기선님의 스프링 부트 개념과 활용

 

출처 : atoz-develop.tistory.com/entry/How-to-develop-web-app-with-spring-boot-right-away?category=869242