성장일기

내가 보려고 정리하는 공부기록

백엔드/스프링

[Spring] @Valid를 이용한 유효성 검증 알아보기 (feat. @NotBlank, @NotNull, @NotEmpty)

와나나나 2025. 7. 19. 00:50
728x90

프로젝트를 진행하면서 @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