6.2 기본 애너테이션
스프링 부트(Spring Boot)에서 빌드 도구에 spring-boot-starter-validation 의존성을 추가하면, 다양한 Bean Validation 애너테이션을 즉시 사용할 수 있습니다.
문자열 관련 애너테이션
가장 자주 사용되는 문자열 검증 애너테이션입니다. 이 세 가지의 차이를 명확히 아는 것이 중요합니다.
@NotNull: 필드 값이null이 아니어야 합니다. 빈 문자열("")이나 공백(" ")은 허용됩니다.@NotEmpty:null이 아니며, 길이가 0보다 커야 합니다. 즉,""은 안 되지만" "(공백 덩어리)은 허용됩니다. 컬렉션의 경우 크기가 0보다 커야 함을 의미합니다.@NotBlank:null, 빈 문자열(""), 공백만 있는 문자열(" ")을 모두 허용하지 않습니다. 문자열 검증에서는 가장 강력하고 많이 쓰입니다.
@NotBlank(message = "제목을 입력해주세요.")
private String title;
숫자 관련 애너테이션
@Min(value)/@Max(value): 지정된 최소/최댓값(포함)을 검증합니다.@Positive/@PositiveOrZero: 양수(> 0)인지, 혹은 0을 포함한 양수(>= 0)인지 검증합니다.@Negative/@NegativeOrZero: 음수 여부를 검증합니다.
@Positive(message = "가격은 양수여야 합니다.")
private int price;
형식 및 크기 검증
@Email: 올바른 이메일 주소 형식인지 검사합니다.@Size(min, max): 문자열의 길이, 컬렉션이나 배열의 크기가 지정된 범위 내에 있는지 확인합니다.@Pattern(regexp): 지정된 정규표현식(Regex)과 일치하는지 검증합니다. 주로 비밀번호나 전화번호 형식 검사에 쓰입니다.
@Email(message = "이메일 형식이 올바르지 않습니다.")
private String email;
@Pattern(regexp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$", message = "휴대폰 번호 형식에 맞지 않습니다.")
private String phoneNumber;
DTO 클래스에 위와 같은 제약 조건을 명시한 뒤, Controller의 핸들러 메서드 파라미터로 받을 때 @Valid를 명시하면 동작합니다.
@PostMapping("/signup")
public ResponseEntity<?> signup(@Valid @RequestBody SignupRequest request) {
// 검증을 통과한 유효한 데이터만 이 영역으로 진입함
return ResponseEntity.ok().build();
}