-
[SpringBoot] 유효성 검사 기능(MethodValidator)카테고리 없음 2024. 7. 21. 23:00
스프링은 요청이 오면, RequestMappingHandlerAdapter를 통해 요청을 위임할 컨트롤러와 메서드를 탐색한다. 그리고 컨트롤러 메서드 호출을 위해 필요한 정보들을 감싸서 실제 호출을 위임한다.
이러한 상황에서 스프링은 유효성 검사 기능을 고도화하기 위해 RequestMappingHandlerAdapter에 유효성 검사를 위한 Validator를 등록해두고, 컨트롤러 메서드 호출 시에 유효성 검사를 진행하도록 개선하였다. 보다 자세히 설명하면, 컨트롤러를 위한 파라미터를 생성하는 ArgumentResolver들이 모두 동작하고, 컨트롤러의 메서드 호출이 준비되었을 때 유효성 검사가 진행된다. 스프링은 이를 MethodValidator라고 부른다.
사용법
스프링의 MethodValidator 관련 기능을 활용하기 위해서는 다음의 조건들이 충족되면 된다.
- 컨트롤러에 @Validated를 통한 AOP 기반 검증이 존재하지 않음
- LocalValidatorFactoryBean와 같은 jakarta.validation.Validator 타입의 빈이 등록됨
- 메서드 파라미터에 유효성 검증 애노테이션이 붙어있음
akarta.validation.Validator 타입의 빈 등록을 위해서는 다음의 의존성만 추가해주면 자동 구성(AutoConfiguration)되므로, 다음의 의존성을 추가해준다.
implementation("org.springframework.boot:spring-boot-starter-validation")
이를 통해 기존에는 불가능했던 다음과 같은 방식으로도 동작이 가능해진다. 대표적으로 @RequestParam에도 바로 유효성 검증을 적용할 수 있는 것이다. 왜냐하면 파라미터가 모두 준비된 이후에, 파라미터에 붙어 있는 유효성 검사 애노테이션을 파싱하여 유효성 검사를 진행하기 때문이다.
@RestController class HelloController { @GetMapping("/hello") public String hello(@RequestParam @Length(min = 10) String name){ return name; } }