개발공부

[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에서 이메일 형식을 확인할 수 있게 다시 구현해야겠다.