GitHub - ljw1126/springtx at section11
논리 트랜잭션 중 예외가 발생하였고, try catch로 예외 정상처리하게 되면 어떻게 처리 될까?
정상흐름 처리되었기 때문에 커밋이 될거라 생각할 수 있지만 정답은 롤백이 된다
물리 트랜잭션은 여러 개의 논리 트랜잭션으로 구성된 상태이다. LogRepository에서 RuntimeException이 발생하게 되면
신규 트랜잭션이 아니므로 rollbackOnly=true
설정 후 예외를 MemberService에 던지게 된다
MemberService에서는 예외 처리 후 커밋 요청을 하게 되는데, 신규 트랜잭션이기 때문에 실제 물리 커밋을 실행하게 되고 이때 rollbackOnly
설정을 확인하게 된다
결과적으로 정상 흐름 처리를 해서 외부 트랜잭션(MemberService)에서 커밋을 호출해도 물리 트랜잭션은 롤백이 되고, UnexpectedRollbackReception을 반환한다