728x90
스프링에서 유효성 검사는 javax.vaildation 패키지의 어노테이션을 활용해서 간편하게 적용할 수 있다.
회원가입, 게시글 작성 등에서 입력값이 올바른지 확인하는 과정에서 Validation을 통해 유효성 검사를 한다.
Validation 적용 방법
@Valid 사용
@Valid 어노테이션을 이용해 컨트롤러에서 DTO의 유효성을 검사한다.
DTO에 선언된 검증 조건을 자동으로 확인한다.
만약 유효성 검사에 실패하면 자동으로 400 Bad Request 에러가 발생한다.
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/signup")
public void signup(@Valid @RequestBody UserDto.SignupReq dto) {
System.out.println(dto.getEmail());
System.out.println(dto.getPassword());
System.out.println(dto.getName());
}
}
Validation 어노테이션 정리
✅ 문자열 관련 유효성 검사
@NotNull | null만 허용하지 않음 ("", " " 가능) |
@NotEmpty | null과 ""(빈 문자열) 허용 안 함 (" " 가능) |
@NotBlack | null과 ""(빈 문자열), " "(공백) 모두 허용 안 함 |
@Size(min=5, max=10) | 문자열의 길이를 5~10 사이로 제한 |
@Size(min=8, max=20, message = "비밀번호는 8글자 이상 20글자 이하로 입력해주세요.")
private String password;
✅ 숫자 관련 유효성 검사
@Min(10) | 최소 10 이상의 값만 허용 |
@Max(100) | 최대 100 이하의 값만 허용 |
@Positive | 0을 제외한 양수만 가능 |
@PositiveOrZero | 0과 양수 가능 |
@Negative | 0을 제외한 음수만 가능 |
@NegativeOrZero | 0과 음수 가능 |
@Min(18) @Max(99)
private int age;
✅ 날짜 관련 유효성 검사
@Future | 현재 시간보다 미래만 허용 |
@FutureOrPresent | 현재 또는 미래만 허용 |
@Past | 현재 시간보다 과거만 허용 |
@PastOrPresent | 현재 또는 과거만 허 |
@Future(message = "예약 날짜는 미래여야 합니다.")
private LocalDate reservationDate;
✅ 이메일 형식 검사
이메일 형식만 허용 (test@example.com) |
✅ 정규식 검사
@Pattern(regexp = "정규표현식") | 특정 형식의 문자열만 허용 |
@Pattern(regexp = "^[ㄱ-ㅎ가-힣]+$", message = "이름은 한글만 입력 가능합니다.")
private String name;
예제: 회원가입 DTO 유효성 검사
@Getter
public static class SignupReq {
@Email(message = "올바른 이메일 형식을 입력해주세요.")
@NotBlank(message = "이메일은 필수 입력 사항입니다.")
private String email;
@Size(min = 8, max = 20, message = "비밀번호는 8~20자 사이여야 합니다.")
private String password;
@Pattern(regexp = "^[ㄱ-ㅎ가-힣]+$", message = "이름은 한글만 입력 가능합니다.")
private String name;
@Min(18) @Max(99)
private int age;
@Future(message = "예약 날짜는 미래여야 합니다.")
private LocalDate reservationDate;
}
728x90
'BE > Spring Boot' 카테고리의 다른 글
[Spring Boot] 로컬 환경에 파일 업로드 (multipart) (0) | 2025.03.03 |
---|---|
[Spring Boot] OAuth2 소셜 로그인 (카카오, 구글) (0) | 2025.03.01 |
[Spring Boot] 환경변수 설정 (IntelliJ에서 설정) (0) | 2025.02.25 |
[Spring Boot] 페이지네이션(Pagination) 적용 (0) | 2025.02.25 |
[Spring Boot] DataSource로 DB 이중화 (Master - Slave) (1) | 2025.02.20 |