스프링 MVC 2 - Bean Validation - 한계
Bean Validation - 한계
수정시 검증 요구사항
데이터를 등록할 때와 수정할 때는 요구사항이 다를 수 있다.
등록시 기존 요구사항
- 타입 검증
- 가격, 수량에 문자가 들어가면 검증 오류 처리
- 필드 검증
- 상품명: 필수, 공백X
- 가격: 1000원 이상, 1백만원 이하
- 수량: 최대 9999
- 특정 필드의 범위를 넘어서는 검증
- 가격 * 수량의 합은 10,000원 이상
수정시 요구사항
- 등록시에는 quantity 수량을 최대 9999까지 등록할 수 있지만 수정시에는 수량을 무제한으로 변경할 수 있다.
- 등록시에는 id에 값이 없어도 되지만, 수정시에는 id 값이 필수이다.
수정 요구사항 적용
수정시에는 Item에서 id값이 필수이고, quantity도 무제한으로 적용할 수 있다.
수정 요구사항을 적용하기 위해 다음을 적용했다.
id : @NotNull 추가
quantity : @Max(9999) 제거
참고
현재 구조에서는 수정시 item의 id값은 항상 들어있도록 로직이 구성되어 있다. 그래서 검증하지 않아도 된다고 생각할 수 있다.
그런데 HTTP 요청은 언제든지 악의적으로 변경해서 요청할 수 있으므로 서버에서 항상 검증해야 한다.
예를 들어서 HTTP 요청을 변경해서 item의 id 값을 삭제하고 요청할 수도 있다.
따라서 최종 검증은 서버에서 진행하는 것이 안전하다.
수정을 실행해보자.
정상 동작을 확인할 수 있다.
그런데 수정은 잘 동작하지만 등록에서 문제가 발생한다.
등록시에는 id에 값도 없고, quantity 수량 제한 최대 값인 9999도 적용되지 않는 문제가 발생한다.
등록시 화면이 넘어가지 않으면서 다음과 같은 오류를 볼 수 있다.
'id' : rejected value [null];
왜냐하면 등록시에는 id에 값이 없다. 따라서 @NotNull id를 적용한 것 때문에 검증에 실패하고 다시 폼 화면으로 넘어온다.
결국 등록 자체도 불가능하고, 수량 제한도 걸지 못한다.
결과적으로 item은 등록과 수정에서 검증 조건의 충돌이 발생하고, 등록과 수정은 같은 BeanValidation을 적용할 수 없다.
이 문제를 어떻게 해결할 수 있을까?
'Spring' 카테고리의 다른 글
스프링 MVC 2 - Form 전송 객체 분리 - 프로젝트 준비 V4 (0) | 2022.09.09 |
---|---|
스프링 MVC 2 - Bean Validation - groups (0) | 2022.09.08 |
스프링 MVC 2 - Bean Validation - 수정에 적용 (0) | 2022.09.06 |
스프링 MVC 2 - Bean Validation - 오브젝트 오류 (0) | 2022.09.06 |
스프링 MVC 2 - Bean Validation - 에러 코드 (0) | 2022.09.03 |
댓글
이 글 공유하기
다른 글
-
스프링 MVC 2 - Form 전송 객체 분리 - 프로젝트 준비 V4
스프링 MVC 2 - Form 전송 객체 분리 - 프로젝트 준비 V4
2022.09.09 -
스프링 MVC 2 - Bean Validation - groups
스프링 MVC 2 - Bean Validation - groups
2022.09.08 -
스프링 MVC 2 - Bean Validation - 수정에 적용
스프링 MVC 2 - Bean Validation - 수정에 적용
2022.09.06 -
스프링 MVC 2 - Bean Validation - 오브젝트 오류
스프링 MVC 2 - Bean Validation - 오브젝트 오류
2022.09.06