2022. 8. 22. 13:44ㆍJAVA
개인 프로젝트를 진행중입니다.
API를 열심히 만들고, 여러 기능을 적용하면서 프로젝트를 확장중인 그 때였습니다.
성능 테스트를 위해 nGrinder groovy 스크립트를 작성하고 있었는데, 서버에서 LocalDateTime 형식의 변수가 이상한 형태로 반환됩니다.
클라이언트분과 협의해서 잘 파싱하면 작동에 문제는 없겠지만, api 명세서에 써놓아 예상한대로 작동이 되지 않으니 참 답답했습니다.
그러다, 정신적 지주 루이와 쿠킴이 도움의 손길을 내밉니다...
그런데, 제 코드에는 @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
https://gocandoit.tistory.com/m/30
'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 |