[Spring, JAVA] ValidationWeb_Backend2023. 6. 20. 17:20
Table of Contents
Validation이란?
📌 [사전] 유효성 검증, 주로 사용자 또는 서버의 요청 내용에서 잘못된 내용이 있는지 확인하는 단계
Validation의 종류
- 데이터 검증
- 필수 데이터의 존재 유무
- 문자열 길이나 숫자형 데이터의 경우 값의 범위
- email, 신용카드 번호 등 특정 형식에 맞춘 데이터
- 비즈니스 검증
- 서지스의 정책에 따라 데이터를 확인하여 검증
- 배달앱의 경우 배달 요청 시, 해당 주문 건이 결제 완료 상태인지 확인 등
- 경우에 따라 외부 API를 호출하거나 DB의 데이터까지 조회하여 검증하는 경우도 존재함
- 서지스의 정책에 따라 데이터를 확인하여 검증
Speing core Tech - Validation란?
📌 Spring 에서는 WEB layer에 종속적이지 않은 Vaildation을 하고자 노력
Spring의 Vaildation( 둘 다 데이터 검증에 가까움)
- Java Bean Vaildation
- dto에 어노테이션으로 명시 후
public class MemberCreationRequest { @NotBlank(message="이름을 입력해주세요.") @Size(max=64, message="이름의 최대 길이는 64자 입니다.") private String name; @Min(0, "나이는 0보다 커야 합니다.") private int age; @Email("이메일 형식이 잘못되었습니다.") private int email; // the usual getters and setters... }
- @Valid 어노테이션을 해당 @RequestBody에 달게 되면, Java Bean Validation을 수행한 후 문제가 없을 때만 메서드 내부로 진입
@PostMapping(value = "/member") public MemeberCreationResponse createMember( @Valid @RequestBody final MemeberCreationRequest memeberCreationRequest) { // member creation logics here... }
- 검증 중 실패 시 : MethodArgumentNotValidException 발생
- JavaBean 내에 어노테이션으로 검증방법 명시하는 방법
- Spring validator 인터페이스 구현을 통한 validation
- 아래의 Person 객체에 대하여
public class Person { private String name; private int age; // the usual getters and setters... }
- validator 인터페이스를 구현한 PersonVaildator 클래스를 통해 validation
- supports : 이 vaildation이 동작할 조건 정의
- 주로, class 의 Type을 비교
- validate : 원하는 검증 수행
- supports : 이 vaildation이 동작할 조건 정의
Validation시 주의사항과 관련 실무 활용 패턴
- validation이 너무 여러 군데에 흩어져있으면 테스트 및 유지보수성이 떨어짐
- 단점
- 중복된 검증 : 정책 변경 시에 모든 중복 코드를 수정해야 함
- 다른 검증 : 여러 군데서 다른 정책을 따르는 검증이 수행될 수 있음
- 즉, validation은 가능한 로직 초기에 수행 수 실패 시에는 exception을 던지는 편이 처리가 편함
- 실무 패턴 :
- 1차 검증 : 요청 dto에서 Java Bean alidation으로 단순 데이터(유무, 범위, 형식) 검증
- 2차 검증 : 로직 초기에 비즈니스 검증 수행 후 실패시 Custom Exception(ErrorCode, ErrorMessage를 입력)해서 예외를 던지도록 하고 예외처리하여 응답 생성
- 단점
- Spring Validator의 장단점
- 장점 : Java Bean Validation에 비해 조금 더 복잡한 검증 가능
- 단점 :
- Validation을 수행하는 코드를 찾기 어려움
- 완전히 데이터만 검증을 하는게 아닌, 비즈니스 검증이 섞이는 수 있음
- 이 경우 비즈니스 검증 로직 또한 흩어져 잘못된 검증의 확률이 높아짐
'Web_Backend' 카테고리의 다른 글
[JAVA] 자바 String 값 비교(==연산자와 equals( )) (2) | 2022.03.23 |
---|
@Yanako :: Yana's coding story였는데요, 우당탕탕 개발일지가 맞는것같
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!