Spring Test에서 @Transactional 롤백의 장단점

Bonjugi·2023년 11월 2일

@Transactional 롤백의 장단점 비교

장점

  1. DB에 대한 처리는 모두 깔끔하게 롤백해줌 (이게 정말정말 크다)
  2. 커밋이 아예 안되므로 병렬테스트시 유리함. 성능도 조금 빠를듯?

단점

단점은 @Transactional 의 경계가 생기는 문제가 대부분이고 크리티컬한 편이다.

  1. flush 되어야 처리되는 Audit 정보가 끝까지 처리되지 않음 (updatedAt, version이 올라가질 않음)
  2. 레이지로딩이 안될 곳에서도 됨
  3. 커밋이 안됐으니 after commit 관련은 동작하지 않음
  4. DB 테스트 이외에는 롤백을 못함. (몽고디비, 레디스, 캐시, 로컬정적변수 변경 등..) 장점 1번이 정말 큰건데, 완벽하지 못해서 결국 손을 타야함

결론

개인적으로 단점1은 너무 치명적이라고 생각한다.
em.flush() 를 써주면 되긴 한데, 매번 해주는것도 좀 구차스럽고..
아니 단점들이 애초에 프로덕션코드와 동작이 너무 다르다는건 양보하기 어려운 단점이긴 하다.

하지만 장점1(클린업)이 반쪽짜리긴 하지만 너무 매력적이다.
나는 항상 실수를 안한다고 가정하더라도, 코드가 리팩토링 되다보면 언젠가 고장이 나더라.

0개의 댓글