MethodArgumentNotValidException 발생 조건부터 핸들링까지
·
Spring
방탈출 사용자 예약 미션에서 요청 DTO 검증과 전역 예외 처리를 구현하며 MethodArgumentNotValidException을 @ExceptionHandler로 처리한 경험이 있다. 당시에는 이 예외가 왜 발생하는지, 내부적으로 어떻게 동작하는지 제대로 이해하지 못한 채 구현에 임했다. 미션이 끝난 지금, 동작 원리를 제대로 정리해두고자 한다.MethodArgumentNotValidException이란 무엇인가?BindException to be thrown when validation on an argument annotated with @Valid fails. Spring Docs - MethodArgumentNotValidException @Valid가 붙은 파라미터의 Bean Validat..
@Valid vs @Validate 차이는 무엇인가?
·
Spring
우테코 미션을 진행하면서 Spring Validation에 대해서 학습하면서 @Valid와 @Validated에 대해서 알게 되었는데 이를 상황에 맞게 선택하기 위해, 두 애노테이션이 동작하는 메커니즘의 차이를 정리하고자 한다.@Valid이란 무엇인가?@Valid는 JSR 표준 애노테이션으로, @Constraint 애노테이션이 선언된 DTO를 검증할 때 사용한다. ArgumentResolver가 객체를 바인딩한 뒤, Validator가 @Valid를 트리거로 삼아 객체 내부의 제약 조건들을 검증하는 방식이다.@Validated이란 무엇인가?@Validated는 Spring이 추가한 애노테이션으로, 클래스 위에 선언한다. @RequestParam, @PathVariable 같은 단순 파라미터에도 @NotN..
Bean Validation으로 요청 DTO 검증하기
·
Spring
레벨2 방탈출 미션에서 요청 DTO 검증을 도메인 검증과 동일하게 validate() 메서드로 직접 처리했다. 리뷰어분이 Spring Validation을 키워드로 제시해줬고, 이를 계기로 Bean Validation을 도입하게 됐다.아래는 Bean Validation을 적용하면서 겪은 시행착오와 오해를 솔직하게 정리한 내용이다.Bean Validation이란 무엇인가?Bean Validation은 JavaBean 유효성 검증을 위한 메타데이터 모델과 API에 대한 정의이며 여기서 언급하고 있는 JavaBean은 직렬화 가능하고 매개변수가 없는 생성자를 가지며, Getter 와 Setter Method를 사용하여 프로퍼티에 접근이 가능한 객체를 의미합니다 자바에서 객체의 필드 값이나 상태에 대해서 제약 ..