Spring Test에서 @Transactional 롤백의 장단점
@Transactional 롤백의 장단점 비교DB에 대한 처리는 모두 깔끔하게 롤백해줌 (이게 정말정말 크다)커밋이 아예 안되므로 병렬테스트시 유리함. 성능도 조금 빠를듯?단점은 @Transactional 의 경계가 생기는 문제가 대부분이고 크리티컬한 편이다.flush
2023년 11월 2일
@Transactional 롤백의 장단점 비교
장점
- DB에 대한 처리는 모두 깔끔하게 롤백해줌 (이게 정말정말 크다)
- 커밋이 아예 안되므로 병렬테스트시 유리함. 성능도 조금 빠를듯?
단점
단점은 @Transactional 의 경계가 생기는 문제가 대부분이고 크리티컬한 편이다.
- flush 되어야 처리되는 Audit 정보가 끝까지 처리되지 않음 (updatedAt, version이 올라가질 않음)
- 레이지로딩이 안될 곳에서도 됨
- 커밋이 안됐으니 after commit 관련은 동작하지 않음
- DB 테스트 이외에는 롤백을 못함. (몽고디비, 레디스, 캐시, 로컬정적변수 변경 등..) 장점 1번이 정말 큰건데, 완벽하지 못해서 결국 손을 타야함
결론
개인적으로 단점1은 너무 치명적이라고 생각한다. em.flush() 를 써주면 되긴 한데, 매번 해주는것도 좀 구차스럽고.. 아니 단점들이 애초에 프로덕션코드와 동작이 너무 다르다는건 양보하기 어려운 단점이긴 하다.
하지만 장점1(클린업)이 반쪽짜리긴 하지만 너무 매력적이다. 나는 항상 실수를 안한다고 가정하더라도, 코드가 리팩토링 되다보면 언젠가 고장이 나더라.