컨트롤러로부터 값을 받아 하나씩 검증하기 때문에 소스가 길어져 읽을 수 없게 되는 것을 방지하기 위해 @valid를 사용합니다.
1. build.gradle에 유효성 검사 종속성 추가
dependencies {
implementation('org.springframework.boot:spring-boot-starter-validation')
}
2. 요청 클래스에 검증할 주석 추가
@Getter
@FieldDefaults(level = AccessLevel.PRIVATE)
public class CreateUserRequest {
@NotBlank(message = "아이디를 입력해주세요.")
String id;
@Min(value = 8, message = "비밀번호는 8자리 이상 입력해주세요.")
String password;
@Email(message = "이메일 형식을 확인해주세요.")
String email;
@Pattern(regexp = "^(0-9)+$", message = "휴대폰번호는 숫자만 입력해주세요.")
String mobileNumber;
}
>> 주석의 종류
@NotNull: 값이 null이 아닌지 확인합니다.
@NotEmpty: 값이 null이 아니고 빈 문자열(“”)이 아닌지 확인합니다. 공백(” “)이 허용됩니다.
@NotBlank: 값이 null, 빈 문자열(“”) 및 공백(” “)이 아닌지 확인합니다.
@AssertTrue : 값이 True인지 확인합니다.
@Size: 값이 주어진 값 사이에 속하는지 확인합니다.
@Min : @Min(value = 8) 값이 8자리 이상인지 확인합니다.
@Max : @Max(value = 10) 값이 10자리를 초과하는지 확인
@Pattern: regexp를 사용하여 정규식으로 값 유효성 검사
@Email : 이메일 형식이 올바른지 확인
다른 문서 보기 > https://javaee.github.io/javaee-spec/javadocs/javax/validation/constraints/package-summary.html
3. 컨트롤러에서 @Valid 수신
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public String signUp(@RequestBody @Valid CreateUserRequest request) {
return "사용자 생성 완료";
}

* 컨트롤러에 값을 가져올 때 유효성 검사를 위해 @Valid를 사용했는데, DDD를 공부하고 도메인 측 유효성 검사 방법으로 변경하려고 합니다. 정답이 뭔지 모르겠네요…
