트랜잭션 전파 활용
서비스 계층에 트랜잭션이 없을 때 - 커밋

Member 엔티티
MemberRepository
Log 엔티티
LogRepository
로그예외라고 입력하는 경우 예외를 발생시킨다. 런타임(언체크)예외이므로 롤백된다.
MemberService
joinV1()과 joinV2() 모두 회원과 로그를 저장하는 로직이고 joinV2()는 예외 발생 시 예외를 복구한다.
테스트 코드

서비스 계층에 트랜잭션이 없을 때 - 롤백

테스트 코드
이름에 로그예외가 있으므로 런타임 예외가 발생한다. 트랜잭션 AOP는 해당 예외를 확인하고 롤백처리한다.

이 경우 회원은 저장되지만 로그는 저장되지 않고 롤백되기 때문에 데이터 정합성에 문제가 발생할 수 있다. 둘을 하나 트랜잭션으로 묶어보자.
단일 트랜잭션
서비스에만 트랜잭션을 사용한다.
서비스에만 @Transactional을 적용하고 레포지토리에는 적용하지 않았다.


Last updated