본문 바로가기
개발/Spring

@Transactional에 대한 정리[3] - rollback()에 관하여

by 설이주인 2023. 9. 11.

보오오오통  @Transactional의  rollback이 UncheckedException에 반응한다는 부분은 모두가 아는 사실이다.

그럼 rollback()은 어떻게 진행되는가?

@Transactional에서 rollback()이 어떻게 동작하는가?

 

@Transactional의  docs를 따라가보면 TransactionAttribute, DefaultTransactionAttribute, RuleBasedTransactionAttribute를 확인할 수 있다.

 

TransactionAttribute (TranscationalDefinition)

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/TransactionDefinition.html

 

TransactionDefinition (Spring Framework 6.0.11 API)

Support a current transaction; execute non-transactionally if none exists. Analogous to the EJB transaction attribute of the same name. NOTE: For transaction managers with transaction synchronization, PROPAGATION_SUPPORTS is slightly different from no tran

docs.spring.io

 

아무래도 관심은 rollback이니까  rollbackOn(Throwable ex)를 중점으로 보자.

 

해당 rollbackOn()은 RuleBasedTransactionAttribute안의  rollbackOn()으로 실행된다.

RuleBasedTransactionAttribute.rollbackOn()을 확인해보면 안의  super.rollbackOn(ex);가 실행된다. 이때 불려지는 메소드가  DefaultTransactionAttribute의  rollbackOn()을 실행하게 된다.

위의 메소드를 확인하면 rollback on unchecked exception을 진행한다는 것을 확인 할 수 있다.

 

물론 try-catch로 unchecked exception을 잡아버리면 rollback이 이뤄지지 않고  commit을 진행해버린다.

이 부분은 주의가 필요할 듯하다.