Validation

주둜 μ‚¬μš©μž λ˜λŠ” μ„œλ²„μ˜ μš”μ²­ (http request) λ‚΄μš©μ„ ν™•μΈν•˜λŠ” 단계

Validation의 μ’…λ₯˜

데이터 검증

  • ν•„μˆ˜ λ°μ΄ν„°μ˜ 쑴재 유무

  • λ¬Έμžμ—΄μ˜ κΈΈμ΄λ‚˜ 데이터 κ°’μ˜ λ²”μœ„

  • email, μ‹ μš©μΉ΄λ“œ 번호 λ“± νŠΉμ • ν˜•μ‹μ— 맞좘 데이터

λΉ„μ¦ˆλ‹ˆμŠ€ 검증

  • μ„œλΉ„μŠ€ 정책에 따라 데이터λ₯Ό 검증

  • 예) 배달앱인 경우 배달 μš”μ²­μ„ ν•  λ•Œ ν•΄λ‹Ή μ£Όλ¬Έ 건이 결제 μ™„λ£Œ μƒνƒœμΈμ§€ 확인

  • κ²½μš°μ— 따라 μ™ΈλΆ€ API λ₯Ό ν˜ΈμΆœν•˜κ±°λ‚˜ DB λ₯Ό μ‘°νšŒν•˜μ—¬ κ²€μ¦ν•˜λŠ” κ²½μš°λ„ 쑴재

Spring Validation

Java Bean Validation

public class MemberCreationRequest {
		@NotBlank(message="이름을 μž…λ ₯ν•΄μ£Όμ„Έμš”.")
		@Size(max=64, message="μ΄λ¦„μ˜ μ΅œλŒ€ κΈΈμ΄λŠ” 64자 μž…λ‹ˆλ‹€.")
    private String name;
		@Min(0, "λ‚˜μ΄λŠ” 0보닀 컀야 ν•©λ‹ˆλ‹€.")
    private int age;
		@Email("이메일 ν˜•μ‹μ΄ 잘λͺ»λ˜μ—ˆμŠ΅λ‹ˆλ‹€.")
    private int email;

    // the usual getters and setters...
}
  • μš”μ²­ dto 에 μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ λͺ…μ‹œ ν›„ @RequestBody 에 @Valid μ–΄λ…Έν…Œμ΄μ…˜μ„ λ‹¬κ²Œ 되면, Java Bean Validation 이 μˆ˜ν–‰λ˜κ³  λ¬Έμ œκ°€ 없을 λ•Œλ§Œ λ©”μ„œλ“œ λ‚΄λΆ€λ‘œ μ§„μž… λœλ‹€.

  • 검증 쀑 μ‹€νŒ¨κ°€ λ°œμƒν•˜λ©΄ MethodArgumentNotValidException λ°œμƒ

Spring Validator Interface

Personμ΄λΌλŠ” javaBean 객체가 μžˆμ„ λ•Œ, Validator λ₯Ό κ΅¬ν˜„ν•œ PersonValidator λ₯Ό 톡해 κ²€μ¦ν•œλ‹€.

  • supports validator κ°€ λ™μž‘ν•  쑰건을 μ •μ˜. 주둜 class의 νƒ€μž…μ„ 비ꡐ

  • validate 검증을 μ§„ν–‰

싀무 ν™œμš©

  1. μš”μ²­ dto μ—μ„œ Java Bean Validation 으둜 1μ°¨ 검증

  2. 둜직 μ΄ˆκΈ°μ— λΉ„μ¦ˆλ‹ˆμŠ€ 검증 ν›„ Custom Exception 처리(ErrorCode, ErrorMessage)

  • Spring validator μž₯단점

    • μž₯점: Java Bean Validation 에 λΉ„ν•΄ 쑰금 더 λ³΅μž‘ν•œ 검증이 κ°€λŠ₯

    • 단점

      • Validation 을 μˆ˜ν–‰ν•˜λŠ” μ½”λ“œλ₯Ό μ°ΎκΈ°κ°€ μ–΄λ ΅λ‹€. (μƒλŒ€μ μœΌλ‘œ)

      • λΉ„μ¦ˆλ‹ˆμŠ€ 검증 둜직의 νŒŒνŽΈν™” μœ„ν—˜.

Last updated

Was this helpful?