[Spring] @Valid 유효성 검사하기

이수민·2023년 1월 21일
1

spring

목록 보기
4/12

스프링에서 데이터 유효성 검사를 하는 방식에 대해 알아보자.

@Valid

  • 자바 표준 검증 애노테이션이다.
  • 스프링 표준 검증 애노테이션인 @Validated는 외부 계층에서 검증할 때 사용하는 것이라 여기선 언급하지 않겠다.

Bean Validation

  • 유효성을 검증하는 기술 표준이다.

  • 동작 원리

    • 디스패처 서블릿 동작 중, 컨트롤러 메소드를 호출하는 과정에서 메소드의 값을 처리해주는 ArgumentResolver가 동작하는데, 이때 @Valid 역시 ArgumentResolver에 의해 처리된다고 한다.
    • 이 때문에 @Valid 어노테이션은 컨트롤러에서만 동작하며, 다른 계층에서 파라미터를 검증하기 위해서는 앞서 언급한 @Validated와 결합되어야 한다고 한다.

적용 방법

dependencies 설정

dependencies {
	...
	implementation 'org.springframework.boot:spring-boot-starter-validation'
    ...
}
  • spring boot 2.3 버전 이후로는 위 의존성을 따로 추가해주어야 한다.

Controller에서 @Valid 추가

@PostMapping()
public FirstDTO insertUser(@RequestBody @Valid FirstDTO userDto){
    firstService.insertUser(userDto);
    return userDto;
}
  • 그럼 해당 요청바디 객체는 유효성 검증이 진행된다.
  • 검증 애노테이션은 DTO 파일 내에서 정의한다.

DTO에서 검증 애노테이션 추가

@Data
@NoArgsConstructor
@AllArgsConstructor
public class FirstDTO {

    private Integer id;

    @NotBlank
    private String name;
}
  • @NotBlank : name 필드는 필수이며 null이나 빈 값은 허용하지 않는다.
  • 비슷한 애노테이션으로 @NotNull, @NotEmpty, @NotBlank가 있는데, 셋의 차이점은 이렇다.
    • @NotNull : Null만 허용 X
    • @NotEmpty : Null, "" 허용 X
    • @NotBlank : Null, "", " " 허용 X
    • 즉 강도로 비교하면 @NotNull < @NotEmpty < @NotBlank 이다.

더 자세한 검증 애노테이션은 이곳 에서 확인할 수 있다.

레퍼런스

스프링에서 데이터를 검증하는 방법

profile
BE 개발자를 꿈꾸는 학생입니다🐣

0개의 댓글