ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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) 내로 설정한 후 요청을 한다.

    ㆍ 데이터에 대한 유효성을 검증한 후, 해당 요청이 수행되지 정확하게 수행되고 있음을 확인할 수 있다.


     

    GitHub - qlsdud0604/spring-boot-study

    Contribute to qlsdud0604/spring-boot-study development by creating an account on GitHub.

    github.com

     

    728x90

    댓글

Designed by Tistory.