-
Spring Boot - 유효성 검사Framework & Library/Spring Boot 2022. 2. 10. 12:23
유효성 검사
유효성 검사란?
ㆍ 서비스의 비즈니스 로직이 올바르게 동작하기 위해서는 사용되는 데이터에 대한 사전 검증하는 작업이 필요하다. 이러한 작업은 유효성 검사 또는 데이터 검증이라고 부르는데, 흔히 Validation이라고 한다.
ㆍ 데이터의 검증은 Controller, Serivce와 같이 여러 계층에서 발생하는 흔한 작업이다.
ㆍ Validation은 들어오는 데이터에 대해 의도한 형식의 값이 제대로 들어오는지 체크하는 과정을 뜻한다.
일반적인 유효성 검사의 문제점
ㆍ 일반적인 애플리케이션에서 사용되는 Validation 방식은 몇 가지 문제가 존재한다.
ㆍ 단지, 다른 메서드에 위치해 있다는 이유만으로 유효성을 검사하는 코드들이 중복되게 작성되는 것이다. 따라서, 코드가 복잡해진다는 단점이 있다.
ㆍ 또한, 이러한 코드들이 비즈니스 로직에 섞여 있기 때문에 검사 로직에 대한 추적이 어렵다는 단점이 있다.
Bean Validation / Hibernate Validator
ㆍ 위 문제들을 해결하기 위해 Java에서 2009년부터 Bean Validation이라는 데이터 유효성 검사 프레임워크를 제공해준다.
ㆍ Bean Validation은 애너테이션을 통해 다양한 데이터를 검증할 수 있게 도와주는 기능을 제공해준다.
ㆍ Hibernate Validator는 Bean Validation 명세에 대한 구현체이며, Spring Boot의 유효성 검사는 Hibernate Validator를 채택한다.
ㆍ 이전 버전의 Spring Boot에서는 starter-web dependecy에 validation이 포함되어 있지만, 2.3 버전부터는 start-validation을 추가해야 한다.
Validation 적용
dependency 추가
ㆍ Validation을 적용하기 위해 pom.xml 파일에 위 사진과 같은 dependency를 추가해준다.
ProductDTO 클래스 변경
ㆍ 비즈니스 로직에 사용되는 데이터인 ProductDTO의 유효성을 검증하기 위해 위 사진과 같은 애너테이션을 추가한다.
ㆍ 각 애너테이션은 ProductDTO가 가지는 속성들에 대해 개발자가 정의한 유효성 검증에 대한 조건을 표현한다.
ㆍ Spring Boot의 Validation은 유효성 검증을 위한 여러 가지 애너테이션들을 제공한다.
ProductController 클래스 변경
ㆍ 상품에 대한 정보를 입력받아 DB에 저장하는 메서드인 createProduct() 메서드를 위 사진과 같이 변경한다.
ㆍ ProductDTO 클래스에서 설정한 유효성 검증에 대한 조건들이 동작하기 위해서는 빨간색 영역과 같이 "@Valid" 애너테이션을 사용해야 한다.
ㆍ 파란색 영역은 데이터의 유효성을 검증하기 위한 순수 코드이다. 이러한 코드들이 Controller, Service 영역의 각 계층에서 반복적으로 작성됨으로써 코드의 복잡함이 증가하는 것은 물론이고, 생산성의 하락을 유발한다.
테스트
ㆍ 상품에 대한 정보 중 productPrice 속성을 허용범위(500~3000000)를 벗어나게 설정한 후 요청을 한다.
ㆍ 허용범위를 벗어난 속성에 대한 유효성을 검증한 후, 해당 요청이 수행되지 않았음을 확인할 수 있다.
ㆍ 이번에는 productPrice 속성을 허용범위(500~3000000) 내로 설정한 후 요청을 한다.
ㆍ 데이터에 대한 유효성을 검증한 후, 해당 요청이 수행되지 정확하게 수행되고 있음을 확인할 수 있다.
728x90'Framework & Library > Spring Boot' 카테고리의 다른 글
Spring Boot - Custom Exception (0) 2022.02.14 Spring Boot - @ControllerAdvice, @ExceptionHandler를 활용한 전역 예외 처리 (0) 2022.02.11 Spring Boot - Logback 적용하기 (0) 2022.02.09 Spring Boot - ORM이란? (0) 2022.02.03 Spring Boot - 서비스 구조 살펴보기 (0) 2022.02.03