이전 글로 Bean Validation에 대해 간단히 알아보았습니다.
Validation 검증 - Bean Validation 이란?
이전 글로 Validator를 사용하는 2가지 방법에 대해 알아보았습니다. Validation 검증 - Validator를 사용하는 2가지 방법 이전 글로 Validator로 분리하여 Controller의 로직과 Validation을 분리하는 방법을 알았
hhhhicode.tistory.com
이번 글로 Bean Validation이 MVC에서 어떻게 적용되는가에 대해 알아보겠습니다.
Bean Validation과 Spring MVC
- 스프링 MVC는 어떻게 Bean Validator를 사용하는가?
- 자주 사용되는 Validation 애노테이션 소개
를 다룹니다.
스프링 MVC는 어떻게 Bean Validator를 사용하는가?
Bean Validator
스프링 부트(Spring Boot)는 Spring-boot-starter-validation 라이브러리가 있으면
자동으로 Bean Validator를 인지하고 스프링에 통합합니다.
스프링 부트는 정말 많은 것을 자동화해주고 개발에 집중할 수 있도록 해주는 것 같습니다.
스프링 부트는 Bean Validator를 자동으로 글로벌 Validator로 등록합니다.
이름은 LocalValidatorFactoryBean이며
이 Validator는 @NotNull 같은 Validation 애노테이션 들을 보고 검증을 수행합니다.
이렇게 글로벌 Validator(LocalValidatorFactoryBean)가 적용되기 때문에
@Valid나 @Validated만 대상 객체 앞에 선언하면
검증이 수행됩니다.
Bean Validator 또한 Validation 오류가 발생하면
FieldError와 ObjectError를 생성하여
BindingResult에 담습니다.
@Valid와 @Validated의 차이
@Valid는 자바 표준 검증 애노테이션입니다.
@Validated는 스프링 전용 검증 애노테이션입니다.
둘 중 아무거나 사용해도,
대상 객체에게 Validation을 수행하라는 의미는 같기 때문에
동일하게 동작합니다.
그런데
@Validated는 내부에 groups라는 profile 기능을 포함하고 있습니다.
해당 기능은 한 객체에 다른 Validator를 적용하기 위해 사용됩니다.
그렇지만 groups 기능은 많이 사용되지 않습니다.
다른 Validator를 사용해야 하는 것은
다른 상황인 경우일 것이고,
다른 상황이라면 다루는 정보도 약간씩 다를 수 있습니다.
그렇다면 그냥 Dto 객체로 분리해버리는 것이 좋습니다.
그렇게 되면 Validator는 각각 적용할 수 있습니다.
예를 들면
Item 객체를 사용할 시,
ItemSaveDto, ItemUpdateDto 등이 되겠습니다.
글로벌 Validator
LocalValidatorFactorybean은 스프링 부트에 의해
글로벌 Validator로 등록됩니다.
그러므로
직접 글로벌 Validator를 등록하면
스프링 부트는 Bean Validator를 글로벌 Validator로 등록하지 않습니다.
그렇게 되면 애노테이션 기반의 Bean Validator가 동작하지 않게 됩니다.
직접 글로벌 Validator를 등록하는 예
@SpringBootApplication public class MembersApplication implements WebMvcConfigurer { public static void main(String[] args) { SpringApplication.run(MembersApplication.class, args); } @Override public Validator getValidator() { return new MyValidator(); } }
자주 사용되는 Validation 애노테이션 소개
@NotBlank | 빈 값, 공백만 있는 경우를 허용하지 않는다. |
@NotNull | null을 허용하지 않는다. |
@Range(min=100, max=10000) | 범위 안의 값만 허용된다. |
@Max(9999) | 최대 9999까지만 허용된다. |
Bean Validation이 일반적인 Validation 로직을 사용할 때 주로 사용되는 만큼
주로 사용되는 몇 가지의 Validation 애노테이션이 있습니다.
해당 애노테이션을 기억해두면
대부분의 Validation을 아주 편하게 하실 수 있습니다.
Validation 애노테이션 종류 모음
Hibernate Validator 6.2.5.Final - Jakarta Bean Validation Reference Implementation: Reference Guide
Validating data is a common task that occurs throughout all application layers, from the presentation to the persistence layer. Often the same validation logic is implemented in each layer which is time consuming and error-prone. To avoid duplication of th
docs.jboss.org
다음 글로 Bean Validation의 글로벌 Validation 오류에 대해서 알아보겠습니다.
Validation 검증 - Bean Validation의 글로벌 Validation 오류
이전 글로 Validation을 편하게 할 수 있는 Bean Validation에 대해 알아보았습니다. Validation 검증 - Bean Validation과 Spring MVC 이전 글로 Bean Validation에 대해 간단히 알아보았습니다. Validation 검증 - Bean Valida
hhhhicode.tistory.com
'Spring MVC > Validation' 카테고리의 다른 글
Validation 검증 - BindingResult의 rejectValue와 reject (0) | 2022.12.19 |
---|---|
Validation 검증 - Message 메시지 (1) | 2022.12.09 |
Validation 검증 - 도메인 객체를 하나만 사용할 경우 문제점 해결 (0) | 2022.12.09 |
Validation 검증 - Bean Validation의 글로벌 Validation 오류 (2) | 2022.12.08 |
Validation 검증 - Bean Validation 이란? (1) | 2022.12.06 |
Validation 검증 - Validator를 사용하는 2가지 방법 (2) | 2022.12.05 |
Validation 검증 - Validator 이해와 MyValidator 만들어보기 (1) | 2022.12.04 |
Validation 검증 - 사용자 입력 보존과 오류 메시지 남기기 (1) | 2022.12.03 |
댓글