[Spring] LocalDateTime response가 array 형식으로 반환될 때

2022. 8. 22. 13:44JAVA

개인 프로젝트를 진행중입니다.

 

API를 열심히 만들고, 여러 기능을 적용하면서 프로젝트를 확장중인 그 때였습니다.

 

성능 테스트를 위해 nGrinder groovy 스크립트를 작성하고 있었는데, 서버에서 LocalDateTime 형식의 변수가 이상한 형태로 반환됩니다.

 

참 이상해

 

클라이언트분과 협의해서 잘 파싱하면 작동에 문제는 없겠지만, api 명세서에 써놓아 예상한대로 작동이 되지 않으니 참 답답했습니다.

 

디스코드에 올린 질문

그러다, 정신적 지주 루이와 쿠킴이 도움의 손길을 내밉니다...

https://velog.io/@godkimchichi/Spring-Boot-json%EC%97%90%EC%84%9C-LocalDateTime%EC%9D%B4-Array%EB%A1%9C-%EB%82%98%EC%98%AC-%EB%95%8C

 

[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

https://stackoverflow.com/questions/17898606/difference-between-webmvcconfigurationsupport-and-webmvcconfigureradapter

 

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