728x90
반응형
문제
- User update 로직 내 원하는 필드만 업데이트 시도 시, 제약조건 걸린 컬럼의 에러 발생
상황
- 클래스 상단에 @DynamicUpdate 어노테이션이 붙여진 상태이다.
@DynamicUpdate 어노테이션
: 전체 컬럼이 아닌 바뀐 값만 Update 한다.
- id를 키값으로 갖고, name, password만 수정될 값으로 매핑하여 받았다.
- Service의 update 로직 내에서 정상 업데이트 진행 시(save) Id값을 기준으로 수정 컬럼만 업데이트 할 거라고 예상했다.
- ConstraintViolationException: Validation faild for classes ~ 에러 발생
- 엔티티에 제약사항이 걸려있는 Email, Role 이 비어있고, Null이어서 익셉션 에러가 났다.
원인 분석
- 현재 Entity 에 걸려있는 @NotEmpty, @NotNull 은 Bean Validation 체크 이다. 즉 엔티티 컬럼 제약조건이 아닌 "Bean 유효값 검사" 용도이다.
- user 객체를 업데이트 시도 시 null,빈 값이 들어갔기 때문에 유효값 체크에서 걸려서 에러가 난 것이다.
해결 방안
- create, update 별 DTO를 생성한다.
- Bean 유효값 검사 필요 시 DTO 별 필요 항목에 각각 추가한다.
Invalid Create Test
- Create 시 필요한 필드를 제대로 입력하지 않은 경우, @Valid 유효성 검사를 통해 컨트롤러 단에서 판단하여 에러 처리를 진행한다.
- 성공 시 정상 Create 동작
마무리
개발 진행중에 정리하는 내용이라 완전한 코드는 아니지만 Entity와 DTO 분리의 이점을 한 가지 더 알아간 것 같다.
추가적으로 리팩토링할 부분은
- User Request Update DTO 생성, 테스트 (예정)
- 에러 처리 모듈 공통화 (추후 진행)
- Response 객체 공통화 (추후 진행)
정도가 될 것 같다.
728x90
반응형
'Spring' 카테고리의 다른 글
[SpringBoot] @ExceptionHandler 적용 시 HttpMediaTypeNotAcceptableException 에러 해결 (8) | 2021.03.16 |
---|---|
[SpringBoot] h2-console 웹 접근안될 때 해결 방법 (0) | 2021.03.08 |
[Lombok] @Builder 사용 시 @NoArgsConstructor 관련 에러 해결 (7) | 2020.09.07 |
[Spring-Error] org.apache.maven.plugin.war.WarMojo 에러 해결 (mac) (0) | 2018.04.15 |
[Spring/Error] 500 에러 Communications link failure 해결 방법 (0) | 2018.04.12 |