유효성 검사 / 데이터 검증 (Validation) 이란?
- 서비스의 비즈니스 로직이 올바르게 동작하기 위해 사용되는 데이터에 대한 사전 검증하는 작업이 필요함. 데이터의 검증은 여러 계층에서 발생하는 흔한 작업임. Validation은 들어오는 데이터에 대해 의도한 형식의 값이 제대로 들어오는지 체크하는 과정을 뜻함. Client side 뿐만 아니라 Server side에서도 데이터 유효성을 검사해야 할 필요가 있음.
일반적인 Validation의 문제점
- 일반적인 application에서 사용되던 Validation 방식은 몇가지 문제가 존재함. -> 어플리케이션 전체적으로 분산되어 존재 / 코드의 중복이 심함 / 비즈니스 로직에 섞여있어 검사 로직 추적이 어려움.
ProductController → ProductService → ProductRepositoryImpl
위의 문제를 해결하기 위해 Java에서 2009년부터 Bean Validation이라는 데이터 유효성 검사 프레임워크를 제공. Bean Validation은 annotation을 통해 다양한 데이터를 검증할 수 있게 기능을 제공. Hibernate Validator는 Bean Validator 명세에 대한 구현체. Spring Boot의 유효성 검사 표준은 Hibernate Validator를 채택. 이전 버전의 Spring Boot에서는 starter-web에 validation이 포함되어 있었지만, 2.3 버전부터 starter-validation을 추가해야함.
Bean Validation
- 스프링의 기본적인 validation인 Bean Validation은 클래스 Field에 특정 annotation을 적용하여 필드가 갖는 제약 조건을 정의하는 구조로 이루어진 검사. validator가 어떠한 비즈니스적 로직에 대한 검증이 아닌, 그 클래스로 생성된 객체 자체의 필드에 대한 유효성 여부를 검증함.
Spring Boot Validation 적용하기 :
1. spring boot 2.3 이후 spring-boot-starter-web dependency 내부에 있던 validation이 사라졌기 때문에, dependency를 따로 추가.
2. Controller에서 유효성 검사를 적용할 API의 Request 객체 앞에 @validated 어노테이션 추가
3. Request를 핸들링 할 객체를 정의할 때 Validation 어노테이션을 통해 필요한 유효성 검사를 적용.
Validation 관련 annotation
- @Size : 문자의 길이 조건 / @NotNull : null 값 불가 / @NotEmpty : @NotNull + ""값 불가 / @NotBlank : @NotEmpty + " "값 불가 / @Past : 과거 날짜 / @PastOrPresent : @Past + 오늘 날짜 / @Future : 미래 날짜 / @FutureOrPresent : @Future + 오늘 날짜 / @Pattern : 정규식을 통한 조건 / @Max : 최대값 조건 설정 / @Min : 최소값 조건 설정 / @AssertTrue / AssertFalse : 참/거짓 조건 설정 / @Valid : 해당 객체의 유효성 검사
'Spring' 카테고리의 다른 글
RestTemplate, TDD 노트 (0) | 2022.11.07 |
---|---|
Spring Boot Exception Handling 노트 (0) | 2022.11.06 |
Logback 노트 (0) | 2022.11.04 |
ORM, JPA, Spring Data JPA 노트 (0) | 2022.11.03 |
DTO, DAO, Repository, Entity 노트 (0) | 2022.11.02 |
댓글