본문 바로가기
스파르타 내배캠

[TIL] #38. Validation

by saemsaem 2024. 6. 18.


 

 [ Validation ] 

: HTTP 요청이 정상인지 검증

Front 검증

- 유저가 조작할 수 있기 때문에 보안에 취약
- 그럼에도 필요하다

 

Server 검증

- front 없이 서버에서만 검증 = 유저 사용성이 떨어짐.
- API Spec을 정의해서 validation 오류를 response 예시에 남겨줘야 한다.
- 서버 검증은 필수

 

Database 검증

- Default, Not Null ,,,

 


 

 [ BindingResult 

: validation 오류를 보관하는 객체
  @ModelAttribute를 이용해 매개변수를 바인딩할 때 발생한 오류를 보관하는 객체이다.

- BindingResult 파라미터는 @ModelAttribute 파라미터 뒤에 와야 한다. 

 


 

 [ Bean Validation 

: 기술 표준 인터페이스
   - 다양한 validation annotation들과 여러가지 interface로 구성되어있다.
   - JPA의 구현체로 하이버네이트가 존재하고, 대부분 Bean Validation 구현체인 하이버네이트 Validator를 사용한다. 

- BindingResult, FieldError, ObjectError를 통해 Controller에서 값을 검증할 수 있지만, 이 경우 Controller의 크기가 너무 커지고 단일 책임 원칙에 위배된다.

 

사용

@NotBlack
  - null을 허용하지 않음
  - 공백(" ")을 허용하지 않음 (하나 이상의 문자를 포함해야 한다)
  - 빈값("")을 허용하지 않음
  - CharSequence 타입을 허용함

@NotNull
  - null을 허용하지 않음
  - 모든 타입을 허용함

@NotEmpty
  - null을 허용하지 않음
  - 빈값("")을 허용하지 않음
  - CharSequence, Collection, Map, Array 타입을 허용함

 

동작 순서

1. @ModelAttribute 각각의 필드 타입에 맞춰 바인딩 시도
  - 성공 > 다음 동작
  - 실패 > typeMismatch FiledError 발생

2. validation 적용
  - @ModelAttribute > 각 필드 바인딩 > 성공한 필드만 Bean Validation 적용
  - Bean Validator는 바인딩에 실패한 필드를 적용하지 않는다
  - 타입 바인딩에 성공한 필드만 Bean Validation을 적용하는 의미가 있다 (Integer 타입 필드에 문자가 오면 애초에 검증의 의미 없음)
  - 성공 예시) String 필드에 문자 입력 > 바인딩 성공 > String 필드에 Bean Validation 적용
  - 실패 예시) Integer 필드에 문자 입력 > 바인딩 실패 > typeMismatch FiledError 추가 > 바인딩에 실패한 필드는 null임 > Bean Validation 적용하지 않음

'스파르타 내배캠' 카테고리의 다른 글

[TIL] #40. AccessToken vs. RefreshToken  (0) 2024.06.20
[TIL] #39. 회원가입 구현  (0) 2024.06.20
[TIL] #37. MockMvc  (0) 2024.06.18
[TIL] #36. AOP  (0) 2024.06.13
[TIL] #35. Test Code - 단위테스트  (0) 2024.06.12