유효성 검사 ((@NotEmpty, @Email) 등등) , @Vaild

조성현·2023년 3월 14일
0

Spring

목록 보기
3/4

서론

프로젝트를 진행할 때, 클라이언트에서 입력한 값을 받아올 때가 많습니다. 하지만 만약에 전화번호를 입력받아야 할 때, 이름을 입력한다든지, 이메일을 입력해야하는데 이상한 형태로 입력을 하는 등 입력한 형태가 의도한 대로 오지 않을 수도 있습니다.

따라서 서버에서는 클라이언트에서 입력한 값이 정확한 지 검증을 할 필요가 있는데, Spring에서는 어떻게 유효성 검사를 진행하는 지 알아보았습니다.


의존성 주입

Spring 에서는 유효성 검사를 하기 위해서 의존성을 추가해야합니다.

implementation 'org.springframework.boot:spring-boot-starter-validation'

@Vaild 실제로 사용

예시를 들 DTO와 Controller 를 먼저 만들어 보겠습니다.

MemberDto.java

public class MemberDto {
	
    @NotEmpty
    @Email(regexp = "정규식")
	private int email;
    
    @NotEmpty
    private String nickname;
}

MemberController.java

@PostMapping("api/v1/member")
public Member save (@Valid @RequestBody MemberDto memberdto) {
    	~~~~
}

단순히 Dto에 @NotEmpty만 붙여서 검증을 하는 것이 아니라 save 메서드에서 받는 파라미터 앞에 @Vaild 어노테이션을 붙여야만 유효성 검증을 해줍니다.

값이 올바르게 들어오지 않았다면 MethodArgumentNotValidException 예외와 400 Bad Request 상태코드를 반환하게 됩니다.

따라서 예외코드에 따른 예외처리도 따로 해주어야 합니다.


검증 어노테이션 종류

문자열 검증

  • @NotBlank
    • null이 아닌 값
    • 공백이 아닌 문자를 하나 이상 포함해야 한다
    • 즉, 반드시 값이 존재하고 공백 문자를 제외한 길이가 0보다 커야한다.
  • @NotEmpty
    • null 이거나 empty(빈 문자열)이 아니어야 한다.
    • 반드시 값이 존재하고 길이가 0보다 커야한다.
    • @NotBlank 와 다르게 공백이 가능하다.
  • @NotNull
    • null이 아닌 값은 어떤 타입이든 상관 없다.
    • 값이 존재하지 않는 경우가 아닌 "", " " 이 가능하다.
  • @Null
    • 타입은 상관 없으며, null값 허용

최대/최소 검증

  • @DecimalMax
    • value 옵션으로 값을 지정가능
    • 지정된 최댓값보다 작거나 같아야함
  • @DecimalMin
    • value 옵션으로 값을 지정가능
    • 지정된 최댓값보다 크거나 같아야함
  • @Max
    • value 옵션으로 값을 지정가능
    • 지정된 최댓값보다 작거나 같아야함
  • @Min
    • value 옵션으로 값을 지정가능
    • 지정된 최댓값보다 크거나 같아야함

Decimal과 기본 Max/Min의 차이는 범위 값의 차이입니다. String을 사용하는지 Integer를 사용하는지에 따라 범위가 달라지기 때문입니다.

범위 검증

  • @Positive
    • 양수
  • @PositiveOrZero
    • 0이거나 양수
  • @Negative
    • 음수
  • @NegativeOrZero
    • 0이거나 음수

시간 값 검증

  • @Future
    • Now 보다 미래의 날짜, 시간이어야 함
  • @FutureOrPresent
    • Now 거나 미래의 날짜, 시간이어야 함
  • @Past
    • Now 보다 과거의 날짜, 시간이어야 함
  • @PastOrPresent
    • Now 거나 과거의 날짜, 시간이어야 함

Boolean 검증

  • @AssertTrue
    • 항상 true
  • @AssertFalse
    • 항상 false

문자열 크기 검증

  • @Size
    • max(옵션) : 값의 크기가 max보다 작거나 같아야 함
    • min(옵션) : 값의 크기가 min보다 크거나 같아야 함

그 외 검증

  • @Pattern
    • regexp 옵션을 사용가능하며 이 옵션에 정규식을 넣는다.
    • 해당 정규식을 만족하는 지 검증
  • @Email
    • regexp 옵션을 사용가능하며 이 옵션에 정규식을 넣는다.
    • 이메일 형식만 가능
  • @Digits(integer= , fraction = )
    • 대상 수가 지정된 정수와 소수 자리 수 보다 작은가?

@Vaild 가 제공하지 않는 것

@Vaild는 그룹 유효성 검사를 지원하지 않습니다.

따라서 그룹 유효성 검사를 진행하고 싶다면 @Vaild의 확장한 @Vaildated 를 사용하면 되겠습니다.

참조

[Spring] @Valid, @Validated 사용법
Spring Boot에서 DTO 검증하기
@Valid 정리해보기

profile
평범한 개발자의 글

0개의 댓글

관련 채용 정보