사이드 프로젝트에서 코드리뷰를 하면서 아래와 같은 의문점이 생겨났다.
스프링부트를 사용하는 보통의 경우 `spring-boot-starter-validation`을 사용하는데, 팀원이 javax.validation:validation-api` 의존성을 삽입했길래 해당 관련 궁금증이 생겼다.
spring-boot-startger-validation은 평상시에 많이 사용했었기 때문에 javax.validation:validation-api 의존성에 대해서 Maven Repository를 찾아보았다.
우측 하단의 Date에서 알 수 있듯이, javax.validation.validation-api 의존성의 마지막 updated가 2017년이다.
뭔가 deprecated의 냄새가 진동했지만, 해당 PR의 중점 내용이 validation이 아니기도 했고, 생각보다 관련 문서가 많이 나오지 않아 일단 해당 PR을 머지하고 넘어갔다.
문제 발생 상황
그러나 문제는 그 이후에 발생했다!
request DTO에서의 `@Valid` 어노테이션이 아예 먹히지가 않는 것이다!
왼쪽 사진은 회원가입 시에 request로 보내는 DTO에 포함된 @Valid 검증 어노테이션을 포함한 모습이다. email 필드를 보면 알 수 있듯이, 올바르지 않은 이메일 형식이면 예외를 발생시켜야 한다.
오른쪽 사진은 올바르지 않은 이메일 형식으로 보냈음에도 불구하고 200 OK가 뜨면서 성공적으로 회원가입이 완료된 모습을 나타낸다.
분명 의존성 외에는 다른 코드가 아예 없었기 때문에 해당 이슈 관련 구글링을 진행해보았다.
그 결과, 아래 스택오버플로우 글을 찾을 수 있었다.
스프링부트 2.3.0 부터 spring-boot-starter-validation을 추가하지 않고 javax.validation:validation-api만 사용할 경우, @Valid 어노테이션이 작동하지 않는다고 한다. JSR 사양은 제공하지만 구현을 제공하지 않기 때문이라고 한다.
심지어 spring-boot 공식 repository에서도 위와 같이 소개가 되어있다.
그냥 spring-boot-starter-validation 을 쓰는 것이 마음이 편할 듯하다.
'JAVA > JAVA | Spring 학습기록' 카테고리의 다른 글
[Spring] FeignClient를 이용한 Apple OAuth 구현 일지 (1) (5) | 2023.04.11 |
---|---|
[ERROR] 인터셉터 사용 환경에서 Swagger의 Failed to load remote configuration 해결법 (2) | 2023.03.27 |
[Java] PermGen 영역 대신 Metaspace가 도입된 Java 8 이후의 JVM 구조 및 JVM 튜닝 맛보기 (2) | 2023.01.27 |
[Spring Security] MockMvc에서 csrfToken을 이용해 403 Forbidden을 해결해보자 (0) | 2023.01.05 |
[221231] 유스콘 2022 웨비나 컨퍼런스 후기 (8) | 2022.12.31 |