๐Ÿ˜€
Hyune's Wiki
  • Welcome
  • Article
    • Link
  • Mentor & Code Reviewer
    • ์ง„ํ–‰ํ•˜๊ธฐ์— ์•ž์„œ..
    • Code Review History
      • ํ•œ๋ฐฉ ์ฟผ๋ฆฌ vs ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์กฐ๋ฆฝ
      • DB์—์„œ TIMESTAMP์™€ DATETIME ํƒ€์ž…์˜ ์ฐจ์ด
      • Service๋Š” ์–ด๋–ค dto๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ• ๊นŒ?
        • ํ™•์žฅ ์งˆ๋ฌธ
  • Legacy
    • ์‹ค๋ฌด ๊ฒฝํ—˜ & ํŒ
      • Kotlin
        • ํŒŒ์ผ ์กฐ์ž‘ํ•˜๊ธฐ
      • Infra
        • Lightsail
          • ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ ์˜ˆ์ œ
        • ๊ณต์ธ ip ํ™•์ธํ•˜๊ธฐ
      • Database
        • INSERT INTO SELECT SHARED LOCK(row LOCK)
      • API Document
        • OpenAPI (Swagger 3.0)
          • ์ •์  ๋ฌธ์„œ ๋‚ด๋ณด๋‚ด๊ธฐ
      • Side Project
        • Codesquad
      • ETC
        • HTTP Request ์ถ”์ ํ•˜๊ธฐ with HAR File
    • Study
      • Language
        • Java
          • Copy
          • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
          • Garbage Collection
          • ์ž๋ฃŒ๊ตฌ์กฐ
          • Java 17
        • Kotlin
          • Coroutine
      • Framework & Library
        • Spring
          • Spring Security
          • @Component vs @Configuration
        • JPA
          • show-sql ์„ค์ •์˜ ๋‹จ์ 
          • @GeneratedValue strategy
          • Entity์˜ field type
        • Logback
          • ๊ธฐ๋ณธ ์„ค์ •
        • Monitoring
          • VisualVM
            • ์„ค์น˜
            • ๋ฌธ์ž์—ด ์ƒ์„ฑ์œผ๋กœ ํ…Œ์ŠคํŠธ
          • nGrinder
      • Database
        • MySQL
          • SQL ๋ฌธ ์ˆ˜ํ–‰ ์ ˆ์ฐจ
          • ํŠธ๋žœ์žญ์…˜๊ณผ ์ž ๊ธˆ
          • ์ธ๋ฑ์Šค
      • Infra
        • AWS
          • S3
            • ์šฉ์–ด
            • Amazon SDK 1.x with Spring
          • DynamoDB
            • Get vs Query vs Scan
        • Docker & Kubernetes
      • Computer Science
        • OS
          • Process vs Thread
          • Process
        • Web
          • HTTP
            • HTTP vs HTTPS
            • HTTP ๊ตฌ์„ฑ
            • HTTP ๊ทธ์™ธ
          • REST API
            • GET ๋ฉ”์„œ๋“œ์— payload๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”๊ฐ€?
            • ํŠน์ • ๋ชฉ์ ์˜ API๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ• ๊นŒ?
          • TCP / UDP
          • ์ธํ„ฐ๋„ท์˜ ์ž‘๋™ ์›๋ฆฌ
          • OAuth 2.0
        • Design Pattern
          • Builder Pattern
        • MSA
        • DDD
      • Test
        • Test Doule
      • Book & Online Class
        • ํ•œ ๋ฒˆ์— ๋๋‚ด๋Š” Spring ์™„.์ „.ํŒ ์ดˆ๊ฒฉ์ฐจ ํŒจํ‚ค์ง€ Online
          • AOP, Aspect Oriented Programming
          • Data Binding
          • IoC(Inversion of Control), DI(Dependency Injection)
          • Null Safety
          • Spring Resource
          • Spring Boot ๋ฒ„์ „๋ณ„ ๋ณ€ํ™”
          • SpEL, Spring Expression Language
          • Validation
        • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3ํŒ
          • 2์žฅ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด
            • ์•„์ดํ…œ 1. ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ
            • ์•„์ดํ…œ 2. ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋นŒ๋”๋ฅผ ๊ณ ๋ คํ•˜๋ผ
            • ์•„์ดํ…œ 3. private ์ƒ์„ฑ์ž๋‚˜ ์—ด๊ฑฐ ํƒ€์ž…์œผ๋กœ ์‹ฑ๊ธ€ํ„ด์ž„์„ ๋ณด์ฆํ•˜๋ผ
            • ์•„์ดํ…œ 4. ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋ง‰์œผ๋ ค๊ฑฐ๋“  private ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
            • ์•„์ดํ…œ 5. ์ž์›์„ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ๋ง๊ณ  ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ผ
            • ์•„์ดํ…œ 7. ๋‹ค ์“ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜๋ผ
          • 3์žฅ ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ
            • ์•„์ดํ…œ 11. equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ
            • ์•„์ดํ…œ 12. toString์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ
            • ์•„์ดํ…œ 14. Comparable์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ คํ•˜๋ผ
          • 4์žฅ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค
      • Webinar
        • ์š”์ฆ˜ ํž™ํ•œ ์Šคํƒ€ํŠธ์—…์˜ DBDB DEEPํ•œ ์ด์•ผ๊ธฐ
Powered by GitBook
On this page
  • Validation์˜ ์ข…๋ฅ˜
  • ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
  • ๋น„์ฆˆ๋‹ˆ์Šค ๊ฒ€์ฆ
  • Spring Validation
  • Java Bean Validation
  • Spring Validator Interface
  • ์‹ค๋ฌด ํ™œ์šฉ

Was this helpful?

Edit on GitHub
  1. Legacy
  2. Study
  3. Book & Online Class
  4. ํ•œ ๋ฒˆ์— ๋๋‚ด๋Š” Spring ์™„.์ „.ํŒ ์ดˆ๊ฒฉ์ฐจ ํŒจํ‚ค์ง€ Online

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 ๋ฐœ์ƒ

@PostMapping(value = "/member")
public MemeberCreationResponse createMember(
	@Valid @RequestBody final MemeberCreationRequest memeberCreationRequest) {
	// member creation logics here...
}

Spring Validator Interface

public class Person {

    private String name;
    private int age;

    // the usual getters and setters...
}
public class PersonValidator implements Validator {

    /**
     * This Validator validates only Person instances
     */
    public boolean supports(Class clazz) {
        return Person.class.equals(clazz);
    }

    public void validate(Object obj, Errors e) {
        ValidationUtils.rejectIfEmpty(e, "name", "name.empty");
        Person p = (Person) obj;
        if (p.getAge() < 0) {
            e.rejectValue("age", "negativevalue");
        } else if (p.getAge() > 110) {
            e.rejectValue("age", "too.darn.old");
        }
    }
}

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 ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. (์ƒ๋Œ€์ ์œผ๋กœ)

      • ๋น„์ฆˆ๋‹ˆ์Šค ๊ฒ€์ฆ ๋กœ์ง์˜ ํŒŒํŽธํ™” ์œ„ํ—˜.

PreviousSpEL, Spring Expression LanguageNext์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3ํŒ

Last updated 3 years ago

Was this helpful?