[검증과 검사/검정의 차이가 뭘까❓]
검증은 증명하는 과정이고, 검사/검정은 확인하는 작업을 뜻한다. 유효성 검사는 검사인 만큼 데이터를 확인하는 작업을 말하는 것 같다.
[이미 가입된 id인지 확인하는 작업은 유효성 검사일까❓]
요청한 데이터가 어떤 조건에 충족하는지 확인하는 작업
을 유효성 검사라고 한다. "id자체는 중복되면 안된다" 라는 조건이 있는데 이 조건을 검사하는 작업이기 때문에 유효성 검사라고 생각이 든다. 하지만 스프링에서 제공하는 유효성검사에서는 id중복 처리 작업이 있지는 않다.
[@Valid에 대해 알아보자❗️]
spring-boot-starter-validation
의존성을 추가해야 사용할 수 있다. @Email
, @NotBlank
, @NotNull
등의 어노테이션과 함께 사용 된다.
3) @Valid
는 유효성 검사를 하는 곳에서.
[@Validated vs @Valid⁉️]
Controller단 이외에 유효성 검사를 사용 해 대상 그룹을 지정해줄 때 사용 된다.
[Validation이 없을 때는 어떻게 사용 됐을까❓]
Validator라는 유틸성 클래스를 정의해서 사용됐다고 한다.
[SME 라이브러리가 뭘까❓]
Validation 기능을 제공하지 않았을 때는 Validator라는 유틸성 클래스를 정의해서 사용했다고 한다. 유틸성 편의기능을 제공하는 라이브러리는 뭐가 있을까?
SME 라이브러리는 자바 표준 라이브러리를 확장하여 좀 더 편리한 기능을 제공하는 라이브러리를 칭한다. Apache commons
, Google guava
등이 있다.
implementation `com.google.guava:guava`
Splitter.on("&").trimResults().withKeyValuesSeparator("=").split("name=songa&age=20")
// => { name=songa, age=20 }
[Erros와 BindingResult의 차이가 뭘까❓]
Spring Validator가 유효성을 검사하다가 오류가 발생하면, 오류가 난 특정 필드 or 객체를 Error(BindingResult)에 담아 준다.
Error
BindingResult는 Errors 인터페이스를 확장하여 구체적인 유효성 검사 결과를 다루는 데 특화되어 있다.
AbstractBindingResult에 errors에 담겨서 사용 된다.
ex) Service단에서 Map으로 정리해서 넘겨줌 (클라이언트의 편리를 위해서)
getFieldErrors
getField();
getDefaultMessage();