SpringBoot #3.5 AutoConfiguration

텐저린티·2023년 7월 7일
0

데브코스

목록 보기
29/41
post-thumbnail

직접 ServletInitializer를 생성해서 만드는 방식은 old fashion.

우리는 SpringBootApplication (메인 클래스)를 이용해서 서블릿을 띄울 수 있다.

그간 오지게 헤매게 하던 Spring MVC 설정을 SpringBoot 가 제공하는 AutoConfiguration 을 이용해서 아주 단순하게 구현 가능해진다.

  • SpringBootApplication
@SpringBootApplication
@ComponentScan(basePackages = "com.devcourse.springorder.customer")
public class SpringOrderApplication {

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

}
  • yaml 파일
    • ServletInitializer 클래스에서 설정한 설정 클래스 속성을 yaml으로 옮겨서 적용할 수 있음
    • DataSource 설정도 마찬가지
spring:
  datasource:
    url: jdbc:mysql://localhost/order_mgmt
    username: root
    password: root1234!
  thymeleaf:
    view-names: "views/*"
    prefix: "/WEB-INF/"

server:
  servlet:
    context-path: /springorder
  • MvcConfig 클래스
@Configuration
public class MvcConfig implements WebMvcConfigurer {

    // CORS (preflight) 설정
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedOrigins("*");
    }

    // http 응답을 xml 형식으로 받게 해주는 메시지 컨버터
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        var messageConverter = new MarshallingHttpMessageConverter();
        var xStreamMarshaller = new XStreamMarshaller();
        messageConverter.setMarshaller(xStreamMarshaller);
        messageConverter.setUnmarshaller(xStreamMarshaller);
        converters.add(0, messageConverter);
    }

}

AutoConfiguration Filter와 Condition

  • AutoConfiguration 을 제공하는 설정들은 spring.factories 파일에 미리 저장되어 있음
  • 필터를 통해 사전 정의된 설정들을 걸러서 원하는 설정만 자동으로 연결해주는 방식
  • 필터에 걸러지지 않기 위해서는 SpringFramework가 제공하는 Condition 류 어노테이션 이용
    • AutoConfiguration은 Springboot 가 아니라 SpringFramework 가 제공
  • 필터로 특정 설정을 거르기 위해서는 AutoConfiguration 대상이 되는 클래스 (SpringBootApplication 에서 exclude 필터를 걸어주면 됨.

Condition 문서

Conditional Beans with Spring Boot

💡 참고
  • AutoConfigruation을 해준다고 해도, 설정한 것이 없으면 아무것도 뜨지 않는다.
  • 여기서는 이미 yaml 속성을 가져올 수 있도록 Configuration을 등록해주고, ComponentScan으로 빈까지 생성할 수 있으므로, yaml 속성에 MVC 관련 프로퍼티를 등록해서 해결했다.
  • 만약에 yaml 프로퍼티 속성을 지정해주지 않으면 white label page가 뜨거나 페이지 에러가 발생한다.
profile
개발하고 말테야

0개의 댓글

관련 채용 정보