개발공부
[Spring Boot] Validation
준서이
2024. 3. 29. 12:15
(1) 유효성 검사(Validation) 란?
- 어떤 데이터의 값이 유효한지, 타당한지 확인하는 것을 의미한다.
- 보안적인 측면에서 올바르지 않는 데이터가 서버로 전송되거나 DB에 전송되지 않도록 하는 것이다.
(2) 관련 어노테이션
- JSR-303 Validator
- @AssertFalse - 거짓인가?
- @AssertTrue - 참인가?
- @Max - 지정 값 이하인가?
- @Min - 지정 값 이상인가?
- @DecimalMax - 지정 값 이하 실수인가?
- @DecimalMin - 지정 값 이상 실수인가?
- @NotNull - Null이 아닌가?
- @Null - Null 인가?
- @Digits (integer=, fraction=) - 대상 수가 지정된 정수, 소수 자리 수 이내인가?
- @Pattern(regex=,flag=) - 정규식을 만족 하는가?
- @Future - 미래날짜인가?
- @Past - 과거 날짜인가?
- @Size(min=, max=) - 문자열, 배열 등의 크기가 지정크기를 만족 하는가?
- Hibernate
- @NotEmpty - Empty 값이 아닌가?
- @Email - 이메일 형식인가?
- @URL - URL 형식인가?
- @Length(min=, max=) - 문자열의 길이가 min과 max 사이인가?
- @Range(min=, max=) - 숫자 범위가 min과 max 사이인가?
(3) 사용법
- build.gradle (의존성 추가)
- DTO
- 요청으로 받을 DTO의 필드 중, 유효성 검사를 할 필드에 해당하는 어노테이션을 추가한다.
- 각 어노테이션의 message 속성은 해당 유효성 검사에 실패했을 때 예외로 던질 메시지를 작성하면 된다.
- 작성하지 않을 경우 기본값으로 지정된 메시지가 전달된다.
- Controller
- 해당 메소드의 파라미터로 지정된 해당 클래스 객체의 앞에 @Valid를 붙여주면 된다.
(4) 사용 이유 및 문제점
프로젝트 구현 시 회원가입 및 로그인 시 이메일 형식, 닉네임 글자 수 제한, 비밀번호 규칙 등 사용자가 입력한 데이터를 DB에 저장하기 전에 데이터에 대한 유효성을 체크하는 작업이 필요하다고 생각했다.
그러나,
@Email은 null을 유효한다고 판단한다고 한다.
@Email로 이메일 형식에 대한 모든 유효성을 체크할 수 없다!
@NotNull 등과 함께 사용해야 완전하게 유효성을 검증할 수 있다.
Controller에서 이메일 형식을 확인할 수 있게 다시 구현해야겠다.