프로젝트를 진행하면서 @Valid를 사용했었다. 잘 모르고 사용했어서 그런지 유효성 검증이 원하는대로 이루어지지 않음을 발견해 이번 기회를 통해 한 번 정리보려고 한다.
@Valid
@Valid는 빈 검증기를 통해 객체의 제약 조건을 검증하도록 하는 어노테이션이다. 프로젝트를 진행할 때 Request DTO를 검증하기 위해 주로 사용한다.
스프링 자체에서 제공하는 건 아니고, 자바 진영 스펙이다 !

사용할 때에는 이런식으로 컨트롤러의 파라미터에 넣어 사용하는 Request DTO 앞에 어노테이션으로 붙여준다. @Valid를 사용하려면 gradle에 의존성을 추가해줘야 한다 !

DTO의 필드에는 @NotBlank, @NotNull, @NotEmpty 등의 어노테이션을 이용해 유효성을 검증한다.
☘️ @NotBlank, @NotNull, @NotEmpty 비교
RequestBody의 null체크를 할 때 사용하는 어노테이션으로, 비슷해보이지만 null 허용의 범위에 차이가 있어 잘 알고 사용해야한다.
@NotNull
- null만 허용하지 않기 때문에 "" 나 " " 는 허용함
- 그래서 String을 받을 때 공백도 허용하지 않아야 한다면 @NotNull을 사용하면 안 됨
- Integer, String, 객체 등 모든 객체 타입에 대해 사용 가능
@NotEmpty
- null과 "" 를 허용하지 않음 즉 @NotNull에서 "" 에 대한 검증이 추가된 것
- 아직 " " 은 허용 됨
- String, Collection, Map, Array 타입에 대해 사용 가능
@NotBlank
- null과 "", " " 모두 허용하지 않음
- 가장 강도 높은 validation 강도를 가짐
- 문자열 타입에 대해 사용 가능
위 세가지 어노테이션에 대한 차이를 모른 채로 사용하다가 String 타입이 아닌 객체타입에 @NotBlank를 사용해 에러가 발생했다. 잘 알아두기 ,, !
이 외에 @Valid에 대한 검증방식은 아래 블로그에 잘 나와있었다. 아직 처리 방식에 대한 내부 로직의 이해가 부족해 블로그로 정리하기에는 한계가 있어서 좀 더 공부한 후에 정리해보려고 한다 !
참고
https://mangkyu.tistory.com/174
[Spring] @Valid와 @Validated를 이용한 유효성 검증의 동작 원리 및 사용법 예시 - (1/2)
Spring으로 개발을 하다 보면 DTO 또는 객체를 검증해야 하는 경우가 있습니다. 이를 별도의 검증 클래스로 만들어 사용할 수 있지만 간단한 검증의 경우에는 JSR 표준을 이용해 간결하게 처리할 수
mangkyu.tistory.com
'백엔드 > 스프링' 카테고리의 다른 글
| [Spring] JAVA 로깅 알아보기 (로그레벨, @Slf4j) (0) | 2024.04.03 |
|---|---|
| [Spring] 용어정리 - DTO, DAO, TDD (0) | 2024.03.29 |
| [Spring] 기초 어노테이션 학습 - @NoArgsContructor, @Data, @Builder (0) | 2024.03.28 |
| [Spring] 5. 빈 생명주기 콜백- 스프링 핵심원리 기본편 (1) | 2024.02.09 |
| [Spring] 4. 자동으로 의존관계 주입하기 - 스프링 핵심원리 기본편 (2) | 2024.02.07 |