Spring boot에서 검증 기능을 매번 작성하는 것은 번거롭다.
검증 로직의 대부분은 빈 값인지, 특정 크기를 넘는지 아닌지와 같은 매우 일반적인 로직이다.
이런 로직을 모든 프로젝트에 적용하도록 공통화하고, 표준화한 것이 Bean Validation이다.
의존성 주입
Bean Validation을 사용하기 위해서는 gradle에 의존성을 추가해야 한다.
implementation 'org.springframework.boot:spring-boot-starter-validation'
✅ DTO
@Data
public class ItemSaveForm {
@NotBlank(message = "상품명을 입력해주세요.")
private String itemName;
@NotNull(message = "가격을 입력해주세요.")
@Range(min = 1000, max = 1000000)
private Integer price;
@NotNull(message = "수량을 입력해주세요.")
@Max(9999)
private Integer quantity;
}
위와 같이 각 Field에 검증 어노테이션을 붙인다.
참고로 검증 어노테이션 모음에서 더 많은 어노테이션을 확인 할 수 있다.
✅ Controller
@PostMapping("/add")
public String addItem(@Validated @ModelAttribute("item") ItemSaveForm form, BindingResult bindingResult) {
// ....
}
DTO를 전달 받고, @Validated로 검증을 수행하고, BindingResult로 검증 결과를 받는다.
참고로 BindingResult는 반드시 DTO, 즉, 객체 뒤에 선언해야 한다.
✅ 결과
이전 포스팅에서 작성했던 Thymeleaf 폼의 th:errors를 이용하면 특별한 로직 없이 자동으로 검증 결과를 출력한다.
2024.02.15 - [Java/spring] - Thymeleaf 스프링 통합과 폼
✅ 마무리
Bean Validation과 Thymeleaf 폼 등을 더 다채롭게 활용하기 위해서 message 기능을 활용하는 것이 좋은데
개인적으로 message 기능을 활용하는 것이 내키지 않아서 정리하지는 않았다.
위와 같이 Form에서 데이터를 전송받을 때 클라이언트 부분에서 데이터 검증을 할 수도 있지만,
클라이언트 검증은 충분히 조작이 가능하고 보안적으로 취약하기 때문에 Bean Validation을 이용한
서버 측의 데이터 검증이 반드시 필요하다는 것을 확실히 알았고 메인 비즈니스 로직 구현보다
데이터 검증 로직이 더 중요할 수도 있다는 것을 느낀 것 같다.
'Java > Spring Boot' 카테고리의 다른 글
Spring boot @RestController 유효성 검사 (0) | 2024.09.22 |
---|---|
HttpSessionListener를 이용한 중복 로그인 방지 (0) | 2024.04.30 |
Thymeleaf 스프링 통합과 폼 (0) | 2024.02.15 |
Ajax를 통해 파일과 Json 업로드 후 Controller로 받기 (0) | 2023.05.12 |
Spring boot Interceptor Ajax 체크 (Redirect 이슈) (0) | 2023.04.05 |