Spring Validation (유효성 검증) 사용해보기
Spring 에서 Vaildation 이란, 데이터의 유효성 검증을 뜻합니다. WEB 개발을 하면서 Client 와 주고받을때 사용할 DTO 클래스를 많이 사용하게 되는데, Client 로 부터 DTO 객체를 활용해서 요청을 받는 경우, 해당 값이 유효한 값인지를 검증해주는 작업입니다.
예를들면, 일반 사용자가 특정 웹사이트에 가입을 요청하면서 ID, Passward, Name 등의 Data 객체를 보내왔을 때, ID 는 영문으로 되어있는지, Passward 는 특수문자가 포함되었는지, Name 에 값이 잘들어있는지 등을 확인해주는 작업입니다.
Spring 에서 Validation 을 사용하는 방법에 대해 알아보겠습니다.
1. Validation Dependency 추가
2. DTO 클래스 생성
롬복을 사용해서 간단하게 DTO 클래스를 생성했습니다.
💻 line : 7~9
롬복을 사용하여 "Getter, Setter, Constructor" 등의 자주 사용하는 Method 들을 자동생성해주었습니다.
롬복의 대한 사용법은 아래 링크를 통해서 확인해보도록 하겠습니다.
Spring 롬복(Lombok) 사용해보기
Lombok 이란 JAVA 의 라이브러리로 반복되는 메소드들을 Annotation 하나로 자동으로 생성해주는 기능입니다. 보통 DTO 를 생성시에 Getter, Setter, toString(), 생성자 등 공통적으로 생성해주는 Method 들이
johnconomics.tistory.com
3. Validation 설정
위에서 생성한 DTO 클래스 내에 유효성검증을 위한 Annotation 을 작성해보도록 하겠습니다.
💻 line : 15
name 변수에 이름이 비어있는 경우, "Product Name 누락!" 메세지 출력되도록 설정합니다.
💻 line : 17
price 의 입력범위를 1~10000 사이를 벗어날 경우, "Product Price 범위 초과 (1~10000)" 메세지가 출력되도록 설정합니다.
💻 line : 19
quantity 의 입력범위를 1~100 사이를 벗어날 경우, "Product Quantity 범위 초과 (1~100)" 메세지가 출력되도록 설정합니다.
💻 line : 21
buyerPhone 의 입력 형식을 핸드폰 번호 정규식과 맞지 않으면, "xxx-xxx(x)-xxxx" 형식과 미일치!" 메세지가 출력되도록 설정합니다.
다음은 Validation 과 관련한 몇가지 Annotation을 정리해둔 표입니다.
🔗 Annotation for Validation
4. Controller 내에 Validation 설정
Test 를 위해서 임의로 "/api" URI 를 갖는 ApiController 클래스를 생성했습니다. "POST" 기능을 구현해서 Body 영역으로부터 Product 정보를 받아와 유효성 검증을 하도록하고, Error 가 있는 경우에는 Error Message 를 생성해서 Client 에게 응답하는 예제 입니다.
💻 line : 15
"Lombok" 라이브러리에 포함되어 있는 Annotation 으로, logging 을 더욱 더 간편하게 코딩할 수 있습니다.
💻 line : 16~17
"ApiController" 클래스를 RestController 로 등록하고, URI 는 "/api" 로 맵핑되도록 설정합니다.
💻 line : 19
"test" Method 를 Post Method 로 맵핑하고, URI 는 "/test" 로 맵핑되도록 설정합니다.
💻 line : 20
"@RequestBody" 는 Client의 요청 데이터 내에 body 영역의 데이터를 전달받을 변수로 설정하는 Annotation 이며,
"@Valid" 를 붙여줌으로서, "Product" DTO 객체의 유효성검증을 하도록 설정합니다.
"BindingResult" 타입은 Validation결과를 담는 클래스이며, 해당 변수를 참고해서 어떤 오류가 있는지 볼 수 있습니다.
💻 line : 22~27
"bindingResult" 객체를 통해 Error 가 있는지 확인하고, 각 Error 별 Message 를 출력하고 저장합니다.
💻 line : 30
Error 가 있는 경우에는 Error Message 를 반환합니다.
💻 line : 33
Error 가 없는 경우에는 전달받은 Body 를 그대로 반환합니다.
5. JSON 데이터 생성 및 테스트
Post 요청을 보내기 위해 Data Body 영역을 작성해야하는데, DTO 객체를 기초로 JSON 데이터를 만들어야합니다.
다음은 Product 클래스 내의 멤버변수를 확인해서 JSON 데이터 구조를 작성해보록하겠습니다.
⭐️Product DTO 클래스 내의 변수명과 JSON 데이터의 Key 이름은 동일하게 작성해야합니다.
테스트 환경은 "Talend API Tool" 을 사용했습니다. Tool 의 설치와 사용방법은 다음 링크를 통해서 확인해주세요.
HTTP Protocol Test 프로그램 사용법 "Talend API Tester"
Talend API Tester 라는 프로그램은, WEB Application 을 개발하거나, WEB Server 등을 개발할 때, REST API를 테스트하거나, HTTP Protocol 을 테스트 하기 위한 프로그램이다. 설치방법 "Chrome 웹 스토어" 접속 (Google
johnconomics.tistory.com
💻테스트 할 데이터 입력해서 2 종류 작성합니다.
💻 2종류의 JSON 데이터를 각각 Test Tool 에 입력 후 테스트 결과를 확인해보도록 하겠습니다.
좌측 Case 의 경우는 정상적인 데이터를 작성해서 보냈으므로, 응답 Body 영역에 요청 Body 에 있던 데이터가 에코된 것을 볼 수 있습니다. 반면에, 우측 Case 의 경우는 "price" 와 "buyerPhone" 의 데이터 형식이 맞지 않도록 보낸 결과, 응답 Body 에 Error Message 가 표현된 것을 볼 수 있습니다.