0. 문제 설명
a) 오류 소개
- Entity에 새로운 속성을 부여하기 위해서 코드 수정을 진행하고 있었다.
- 새로운 속성을 이용한 쿼리를 테스트하는 과정에서 다음 오류가 발생했다.
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["PUBLIC.UK_MBMCQELTY0FBRVXP1Q58DN57T_INDEX_8 ON PUBLIC.MEMBER(EMAIL) VALUES 5"; SQL statement:
insert into member (email, member_name, password, sign_up_date, visibility, member_id) values (?, ?, ?, ?, ?, ?) [23505-214]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
- 오류를 읽어보면 Constraint 관련 내용 이라는 것을 확인할 수 있다.
- 그러나 더이상 뭐가 문제인지는 모르겠다.
1. 문제 원인
a) 오류 원인
- 위의 오류는 제약조건을 어기는 경우 발생하는 오류다.
- 이번 케이스의 경우, 오류의 원인은 중복에 있다.
- @BeforeEach를 통해서 매번 새로운 테스트 메서드를 실행할 때마다 Entity를 생성하여 DB에 입력한다.
- 매번 테스트 메서드가 실행될 때마다 기존의 입력 데이터는 삭제되고 데이터가 새로 입력된다.
- 테스트가 올바로 동작하는지 확인하기 위하여 @Rollback(false)를 통해 데이터가 DB에 잔류하도록 하였다.
- 그러므로 @Rollback(false)이 걸려있는 테스트가 끝나고, 다음 테스트 메서드를 실행할 때 중복 오류가 발생한다.
b) 오류 발생의 경위
- 오류가 발생하는 과정은 다음과 같다.
- @Rollback(false)가 걸려있는 테스트 메서드는 실행이 종료되어도 사용한 데이터가 DB에 잔류한다.
- 새로운 테스트 메서드가 실행될 때 @BeforeEach로 인해 데이터가 다시 DB에 입력된다.
- DB에 잔류한 데이터와 새롭게 입력되는 데이터는 동일한 데이터 값을 사용한다.
- 개체 무결성을 위배하므로 오류가 발생한다.
'Side Projects > 프로젝트 사이' 카테고리의 다른 글
9. 개선사항(비즈니스 로직 제거, Exception Handler 적용, DataIntegrityViolationException 처리 방법) (0) | 2022.09.12 |
---|---|
8. 백엔드 개발 완료(OpenAPI 소개 및 문제해결 회고록) (2) | 2022.09.06 |
6. 오류 해결 스토리 - Update/delete queries cannot be typed (0) | 2022.07.30 |
5. 오류 해결 스토리 - Join Table 접근과 영속 상태 (0) | 2022.07.27 |
4. DB 구조 설계 - ERD (0) | 2022.06.29 |
댓글