서론
Spring Boot 애플리케이션을 생성하면 아래와 같은 클래스가 생성된다.
public static void main()은 C언어 같은거 배울때나 콘솔 애플리케이션 만들때 맨날 봤던 프로그램의 시작점이다.
package com.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TestRestWebApplication {
public static void main(String[] args) {
SpringApplication.run(TestWebApplication.class, args);
}
}
어노테이션에 대한 JavaDoc 설명을 보면
여러개의 빈을 선언하는 설정 클래스를 가리킨다. 또한 Auto Configuration과 Component Scan을 수행한다.
편의성 어노테이션으로 @Configuration, @EnableAutoConfiguration, @ComponentScan 어노테이션을 적은것과 동일하다.
이번 문서에서 중요한 부분은 @EnableAutoConfiguration 어노테이션이 포함되어있다는 부분이다.
@EnableAutoConfiguration 어노테이션은
- 필요할거같은 Configuration 들을 알아서 만들어준다.
- 직접 Configuration 빈들을 만들어갈수록 알아서 조금씩 물러난다.
- 사용자가 만들어 논 빈이 있으면 그걸 쓰고 없으면 알아서 만들어준다.
문제
스프링 프로젝트를 생성하고 초반에는 application.properties 에 auto config가 읽을 수 있는 프로퍼티들을 잔뜩 등록해줬다.
두가지만 적어보자면
- spring.jackson.property-naming-strategy=UPPER_CAMEL_CASE
- mybatis.configuration.jdbcTypeForNull=NULL
근데 어느순간부터 이게 동작을 안하기 시작했다.
왜 그런가? 정답은 내가 저 프로퍼티의 구현체를 직접 만들어버려서 Auto Config가 꺼졌기 때문이다.
각자 다른이유로 꺼졌는데 먼저 첫번째 프로퍼티는 아래 글을 보고 알았다.
베댓의 설명에 따르면
- @EnableWebMvc 어노테이션을 쓰면 Spring MVC의 auto-configuration 기능이 꺼진다. (이건 위에서 말했다.)
- Spring MVC 설정은 HTTP 메시지 변환(JSON)을 포함하고 있다.
- 나는 Swagger 설정할때 WebMvcConfigurationSupport를 extends 한 것 때문이었다.
- @EnableWebMvc를 하면 WebMvcConfiguartionSupport를 임포트 하는거라 같은 행위라고 보면 된다.
그래서 설정이 안먹혔던 것이다.
Auto Config 계속 하고 싶으면
- @EnableWebMvc
- extends WebMvcConfigurationSupport
등등 WebMvc 관련 설정 구현체를 만들면 안된다.
대신에
- implements WebMvcConfigurer
를 많이 쓴다고 한다.
JavaDoc에도 나와있는데 Auto Config는 살리면서도 각 메서드별로 오버라이드해서 커스터마이즈 할 수 있어서 좋다.
https://atoz-develop.tistory.com/entry/How-to-develop-web-app-with-spring-boot-right-away
두번째 설정은 굳이 검색하지 않고도 문제는 알아챘다.
- 맨 처음에 CUD 동작 확인한 다음에 CUD 테스트를 안해봤다.
- 멀티 디비를 써야되는 환경이 되었고 멀티 디비 Auto Configuration이 되는지 확인했더니 안되길래 클래스 하나 만들어서 처리했다.
- 그럼으로써 Auto Configuration은 꺼졌고 JdbcTypeForNull 프로퍼티 설정이 동작안하게 된것이다.
- 한참 뒤에 CUD 돌려보니까 되던게 안되는 상황 발생
결론은 Configuration 만들때 properties에 관련 Auto Config 설정이 있는지 잘 확인해봐야 한다.
추가
아래는 .properties 파일에서 사용하는 스프링과 마이바티스 프로퍼티 목록 링크
https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html
https://mybatis.org/mybatis-3/configuration.html#properties
'백엔드 > SpringBoot' 카테고리의 다른 글
Thymeleaf 템플릿 적용하기 (0) | 2020.12.20 |
---|---|
프로퍼티 클래스 만들기 (0) | 2020.12.19 |
Spring Boot에 Swagger 적용하기 (0) | 2020.12.10 |
DTO 따로 만들기(Param, VO) (0) | 2020.08.02 |
Rest Controller 매개변수 어노테이션 (0) | 2020.08.02 |
댓글