jakarta.validation과 org.springframework.validation은 두 가지 다른 패키지에서 제공되는 유효성 검사(Validation) 관련 기능 및 API입니다. 이 두 패키지는 다른 목적과 컨텍스트에서 사용됩니다.
jakarta.validation
이 패키지는 자바 표준 유효성 검사 스펙(Jakarta Bean Validation)에 따른 API를 제공합니다. 이 스펙은 JSR-380 (Java Specification Request 380)으로 정의되며 자바 기반 애플리케이션에서 데이터 모델의 유효성을 검사하는 데 사용됩니다.
주로 어노테이션을 사용하여 데이터 모델의 필드에 제약 조건을 정의하고, javax.validation.Validator 인터페이스를 통해 유효성 검사를 수행합니다.
jakarta.validation은 웹 애플리케이션과 상관없이 자바 애플리케이션 전반에 사용될 수 있으며, 여러 자바 프레임워크와 라이브러리에서 지원합니다.
org.springframework.validation
이 패키지는 스프링 프레임워크 내에서 제공하는 유효성 검사 및 데이터 바인딩 관련 기능을 포함합니다. 스프링 프레임워크는 자바 애플리케이션의 다양한 측면을 다루며, 데이터 검증 및 바인딩 역시 그 중 하나입니다.
스프링은 org.springframework.validation.Validator 인터페이스와 org.springframework.validation.Errors 인터페이스를 사용하여 커스텀 유효성 검사를 정의하고 데이터 바인딩 오류를 처리합니다.
org.springframework.validation은 스프링 프레임워크에서 웹 애플리케이션과 관련된 유효성 검사 및 데이터 바인딩에 사용됩니다.
두 패키지의 API는 다르지만, 스프링 부트 프레임워크는 jakarta.validation을 사용하여 데이터 모델의 유효성 검사를 지원하고, org.springframework.validation을 사용하여 스프링 애플리케이션 내에서 데이터 바인딩 및 유효성 검사를 수행합니다. 이들을 통합하여 스프링 부트 애플리케이션에서 데이터 유효성 검사를 구현하고 처리할 수 있습니다.
import jakarta.validation.Valid;
import org.springframework.validation.BindingResult;
(... 생략 ...)
public class QuestionController {
(... 생략 ...)
@PostMapping("/create")
public String questionCreate(@Valid QuestionForm questionForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "question_form";
}
this.questionService.create(questionForm.getSubject(), questionForm.getContent());
return "redirect:/question/list";
}
}
@Valid는 jakarta의 메서드고, BindingResult는 스프링부트 validation의 메서드인지?
@Valid와 BindingResult는 서로 다른 유효성 검사 관련 기능을 제공하는 두 가지 서로 다른 패키지의 클래스와 어노테이션입니다.
@Valid
@Valid 어노테이션은 jakarta.validation 패키지의 일부로, 자바 Bean Validation 스펙(Jakarta Bean Validation)에 따라 데이터 모델의 유효성 검사를 활성화하는 데 사용됩니다.
이 어노테이션을 사용하면 데이터 모델 객체에 적용된 유효성 검사 어노테이션을 검사합니다. 데이터 모델 객체가 제약 조건을 위반하는 경우, 해당 검사 오류는 BindingResult에 기록됩니다.
BindingResult
BindingResult 클래스는 org.springframework.validation 패키지의 일부로, 스프링 프레임워크에서 유효성 검사 결과 및 데이터 바인딩 오류를 저장하고 관리하는 데 사용됩니다.
BindingResult 객체는 스프링 MVC 컨트롤러 메서드에서 @Valid 어노테이션과 함께 사용되며, 데이터 모델 객체의 유효성 검사를 수행한 후 발생한 오류를 수집하고 제어합니다. 오류가 발생한 경우, 해당 오류 정보를 처리하고 적절한 응답을 생성하거나 리디렉션할 수 있습니다.
따라서 @Valid 어노테이션은 데이터 모델 객체의 유효성 검사를 활성화하고, BindingResult는 검사 결과를 수집하고 처리하는 데 사용됩니다. 이들은 다른 패키지에 속하고 서로 다른 역할을 하지만 함께 사용하여 데이터 유효성 검사를 스프링 애플리케이션에서 구현할 수 있습니다.
유효성 검사는 @Valid이 하고 그 유효성 검사의 결과를 저장하고 적절한 조취를 취하는 게 BindingResult