Bean Validation은 모든 프로젝트에 검증 로직을 공통화하고 표준화한 것으로, 다음과 같은 의존관계를 추가함으로 사용할 수 있다.
implementation 'org.springframework.boot:spring-boot-starter-validation'
위 라이브러리를 추가했을 때, 스프링은 자동으로 글로벌 Validator로 등록한다.
이는 검증 애노테이션을 통해 검증을 수행하기에 @Valid
, @Validated
만 적용하면 된다.
오류가 발생하면, FieldError
, ObjectError
를 생성해 BindingResult
에 추가한다.
@ModelAttribute
각각의 필드에 타입 변환 시도
-1 ) 성공 → BeanValidation 적용
-2 ) 실패 → typeMismatch
로 FieldError
추가
@Valid
: 자바 표준 검증 애노테이션 ( build.gradle
의존관계 추가 필요 )
@Validated
: 스프링 전용 검증 애노테이션
@NotBlank
: 빈값 + 공백만 있는 경우, 허용 X
@NotNull
: null
허용 X
@Range(min = 1, max = 999)
: 범위 1 ~ 999 사이의 값만 허용
@Max(...)
: 최대 . . . 까지 허용
데이터의 등록과 데이터의 수정의 요구사항이 다를 경우도 분명히 존재한다.
등록시에는 id
가 필수가 아니지만 수정시에는 id
가 필수로 입력되어야 한다면 어떻게 할까?
바로 groups
를 사용하는 방법 혹은 폼 전송을 위한 별도의 모델 객체를 만드는 방법이 있다.
해당하는 groups
의 각각의 인터페이스를 생성
도메인 객체에 @NotNull(groups = ~ . class)
로 정의
로직에 해당 Groups 적용 - @Validated(groups = ~ . class)
groups
를 사용하려면@Validated
를 사용해야 한다.
별도의 모델 객체를 생성하여 사용하는 것은 변환 과정의 추가되는 단점이 존재하지만, 폼 데이터가 복잡해지더라도 검증이 중복되지 않는다는 장점을 지니고 있다.
별도의 모델 객체의 이름은 일관성을 지녀야 하며, 보통 ~Dto
, ~Form
등으로 생성한다.
보통
groups
보다 별도의 모델 객체를 실무에서 사용한다.
📌 본 포스트는 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술 통해 학습한 내용을 요약 및 정리한 것입니다.