2022. 8. 22. 13:44ㆍJAVA
개인 프로젝트를 진행중입니다.
API를 열심히 만들고, 여러 기능을 적용하면서 프로젝트를 확장중인 그 때였습니다.
성능 테스트를 위해 nGrinder groovy 스크립트를 작성하고 있었는데, 서버에서 LocalDateTime 형식의 변수가 이상한 형태로 반환됩니다.
클라이언트분과 협의해서 잘 파싱하면 작동에 문제는 없겠지만, api 명세서에 써놓아 예상한대로 작동이 되지 않으니 참 답답했습니다.
그러다, 정신적 지주 루이와 쿠킴이 도움의 손길을 내밉니다...
[Spring Boot] json에서 LocalDateTime이 Array로 나올 때
210612
velog.io
그런데, 제 코드에는 @EnableWebMvc가 없었습니다...!
DTO에 @JsonFormat으로 강제적용하는 것은 잘 작동합니다,,,만,,,, 하나하나 붙여줘야 하는 것이 마음에 들지 않고
특히, springboot 기본 jackson이 왜 먹지 않을까 하는 의문점이 너무 커졌습니다.
그래서, 같이 프로젝트 코드를 살펴보던 중
인터셉터를 추가하는 설정 클래스를 보게 되었습니다.
@RequiredArgsConstructor
@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {
private final LoginCheckInterceptor loginCheckInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginCheckInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/login","/post/{postId}", "/posts", "/oauth/github_url")
.order(1);
}
}
extends로 받고있는 WebMvcConfigurationSupport 라는 것이 있습니다. 바로 여기에 삽질하던 해답이 있었습니다..!
별 생각 없이 인터넷에서 인터셉터 추가하는 클래스 코드를 따라 쓴 것 같은데, 코드를 타고 들어가보니
잘 모르겠지만, 살펴보니
EnableWebMvc -> DelegatingWebMvcConfiguratiopn -> WebMvcConfigurationSupport 순으로 의존관계가 있는 것으로 보입니다.
WebMvcConfigurationSupport을 상속받는 것은 @EnableWebMvc를 선언한 것과 마찬가지라는 결론에 다다릅니다.
그래서,
WebMvcConfigurationSupport를 지우고 WebMvcConfigurer로 교체합니다.
잘 됩니다.
스프링 설정은 쉬운 듯 하면서도 어딘가 어려운 면이 있는 것 같습니다. 특히 이런 기본설정들이 꼬인 부분들은 문서를 보지 않고는 찾아내기 참 힘드네요
https://xxxelppa.tistory.com/326
2.1 Spring Web MVC 설정 @EnableWebMvc, WebMvcConfigurer
framework 와 library 는 명확한 차이가 있다. library 는 사용자가 능동적으로 어떤 도구를 사용할지 고르고 골라 필요한걸 선택해서 사용한다. framework 는 이미 구조가 짜여져 있고, 고정된 틀과 흐름
xxxelppa.tistory.com
Difference between WebMvcConfigurationSupport and WebMvcConfigurerAdapter
I would like to add resource handlers. In the forum they use WebMvcConfigurationSupport: http://forum.springsource.org/showthread.php?116068-How-to-configure-lt-mvc-resources-gt-mapping-to-take-
stackoverflow.com
https://gocandoit.tistory.com/m/30
[스프링 웹 MVC 설정] 01. @EnableWebMvc와 WebMvcConfigurer
스프링에서 기본적인 전략은 DispatcherServlet.properties에서 제공해주지만, 개발자가 직접 스프링 MVC의 구성요소를 Bean으로 등록할 수 있다. 아래의 예시는 row-level에서 직접 Bean을 등록해주는 방식으
gocandoit.tistory.com
'JAVA' 카테고리의 다른 글
스프링 자동설정과 @Profile (5) | 2022.10.26 |
---|---|
[Spring] 싱글톤 빈이 동시 요청을 처리하는 방법 (0) | 2022.08.11 |
[Spring + Redis] 오류 org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; (0) | 2022.07.29 |
[Spring + Redis] 레디스로 게시글 조회수 중복 카운팅 검증하기 (1) | 2022.07.27 |
ifPresent() 메서드로 Optional 처리하기 (7) | 2022.07.22 |