에플리케이션의 비즈니스 로직이 올바르게 동작하려면 데이터를 사전 검증하는 작업이 필요합니다. 이것을 유효성 검사 또는 데이터 검증이라 부릅니다.
유효성 검사의 예로는 여러 계층에서 들어오는 데이터에 대해 의도한 형식대로 값이 들어오는지 체크하는 과정이 있습니다. 이 같은 유효성 검사(validation)는 프로그래밍에서 매우 중요한 부분이며, 자바에서 가장 신경 써야 하는 것 중 하나로 NULLPointException 예외가 있습니다.
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserRequestDto {
@NotBlank(message = "아이디는 필수 입력 값입니다.")
private String username;
@NotBlank(message = "비밀번호는 필수 입력 값입니다.")
@Pattern(regexp = "(?=.*[0-9])(?=.*[a-zA-Z])(?=.*\\W)(?=\\S+$).{8,16}",
message = "비밀번호는 8~16자 영문 대 소문자, 숫자, 특수문자를 사용하세요.")
private String password;
@Pattern(regexp = "^[ㄱ-ㅎ가-힣a-z0-9-_]{2,10}$",
message = "닉네임은 특수문자를 제외한 2~10자리여야 합니다.")
private String nickname;
@Pattern(regexp = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}$",
message = "이메일 형식이 올바르지 않습니다.")
@NotBlank(message = "이메일은 필수 입력 값입니다.")
private String email;
...
}
어노테이션 | 설명 |
---|---|
@Null | null만 허용한다. |
@NotNull | 빈 문자열(""), 공백(" ")은 허용하되, Null은 허용하지 않음 |
@NotEmpty | 공백(" ")은 허용하되, Null과 빈 문자열("")은 허용하지 않음 |
@NotBlank | null, 빈 문자열(""), 공백(" ") 모두 허용하지 않는다. |
이메일 형식을 검사한다. 단, 빈 문자열("")의 경우엔 통과 시킨다. ( @Pattern을 통한 정규식 검사를 더 많이 사용) | |
@Pattern(regexp = ) | 정규식 검사할 때 사용한다. |
@Size(min=, max=) | 길이를 제한할 때 사용한다. |
@Max(value = ) | value 이하의 값만 허용한다. |
@Min(value = ) | value 이상의 값만 허용한다. |
@Positive | 값을 양수로 제한한다. |
@PositiveOrZero | 값을 양수와 0만 가능하도록 제한한다. |
@Negative | 값을 음수로 제한한다. |
@NegativeOrZero | 값을 음수와 0만 가능하도록 제한한다. |
@Future | Now 보다 미래의 날짜, 시간이어야 한다. |
@FutureOrPresent | Now 거나 미래의 날짜, 시간이어야 한다. |
@Past | Now 보다 과거의 날짜, 시간이어야 한다. |
@PastFutureOrPresent | Now 거나 과거의 날짜, 시간이어야 한다. |