컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다.
클라이언트 검증? 서버 검증?
클라이언트 검증은 조작할 수 있으므로 보안에 취약하다.
서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다.
둘을 적절히 섞어서 사용하되, 최종적으로 서버 검증은 필수
API일경우 스펙을 잘 정의해서 검증 오류를 API 응답 결과에 잘 남겨주어야 한다.
검증시 @Validated @Valid 둘다 사용가능하다.
javax.validation.@Valid 를 사용하려면 build.gradle 의존관계 추가가 필요하다.
implementation 'org.springframework.boot:spring-boot-starter-validation'
@Validated 는 스프링 전용 검증 애노테이션이고, @Valid 는 자바 표준 검증 애노테이션이다. 둘중 아무거나 사용해도 동일하게 작동하지만, @Validated 는 내부에 groups 라는 기능을 포함하고 있다.
모든 입력 폼으로 부터 받는 데이터는 @Vaild 와 bindingResult 를 사용하여 입력받은 데이터를 검증 했다.
예외로 List 타입인 상품 이미지는 @Vaild가 적용되지 않아
직접 List의 갯수를 체크하여 bindingResult.rejectValue로 ImgFileMin으로 에러코드를 정의하고 message를 작성하였다.
(더 자세한 Validation 정보는 아래 링크클릭)
Validation