Transaction propagations
출처 : 인프런 김영한님의 강의 “스프링 DB 2편 - 데이터 접근 활용 기술” 중 일부
🚫 아래 내용은 주관적인 생각이므로 사실과 다를 수 있습니다.
개요
Spring의 Transation Propagation(전파) 전략에 대한 내용
내용
요약
주로 쓰이는 전파 전략으로는
기본값인 REQUIRED와 REQUIRES_NEW가 있다.
REQUIRED는 기존 트랜잭션이 없으면 새로 생성하고,
기존 트랜잭션이 있다면 참여하는 옵션이다.
REQUIRES_NEW는 기존 트랜잭션의 유무와는 무관하게
항상 새로운 트랙잭션을 생성하는 옵션이다.
설명
스프링에서 제공하는 트랜잭션 전파 옵션들은 아래와 같다.
- REQUIRED
- 기존 트랜잭션이 없으면 새로 생성하고,
기존 트랜잭션이 있다면 참여하는 옵션이다.
- 기존 트랜잭션이 없으면 새로 생성하고,
- REQUIRES_NEW
- 기존 트랜잭션이 없으면 새로 생성하고,
기존 트랜잭션이 있어도 새로 생성하는 옵션이다.
- 기존 트랜잭션이 없으면 새로 생성하고,
- SUPPORT
- 기존 트랜잭션이 없으면 트랜잭션이 없는 채로 진행하고,
기존 트랜잭션이 있다면 참여하는 옵션이다.
- 기존 트랜잭션이 없으면 트랜잭션이 없는 채로 진행하고,
- NOT_SUPPORT
- 기존 트랜잭션이 없으면 트랜잭션이 없는 채로 진행하고,
기존 트랜잭션이 있다면 보류해두고 트랜잭션이 없는 채로 진행하는 옵션이다.
- 기존 트랜잭션이 없으면 트랜잭션이 없는 채로 진행하고,
- MANDATORY
- 기존 트랜잭션이 없으면 IllegalTransactionStateException 예외가 발생하고,
기존 트랜잭션이 있다면 참여하는 옵션이다.
- 기존 트랜잭션이 없으면 IllegalTransactionStateException 예외가 발생하고,
- NEVER
- 기존 트랜잭션이 없으면 트랜잭션이 없는 채로 진행하고,
기존 트랜잭션이 있다면 IllegalTransactionStateException 예외가 발생하는 옵션이다.
- 기존 트랜잭션이 없으면 트랜잭션이 없는 채로 진행하고,
- NESTED
- 기존 트랜잭션이 없으면 새로 생성하고,
기존 트랜잭션이 있다면 중첩 트랜잭션을 생성하는 옵션이다.- 중첩 트랜잭션
- 외부 트랜잭션의 영향을 받는다.
- 외부 트랜잭션이 롤백 되면, 중첩 트랜잭션도 롤백된다.
- 외부 트랜잭션에는 영향을 주지 못한다.
- 중첩 트랜잭션이 롤백 되어도 외부 트랜잭션은 커밋할 수 있다.
- 외부 트랜잭션의 영향을 받는다.
- 중첩 트랜잭션
- JDBC savepoint 기능을 사용하기 때문에 DB Driver가 해당 기능을 지원하는지 확인 필요
- 중첩 트랜잭션은 JPA에서는 사용할 수 없다.
- 기존 트랜잭션이 없으면 새로 생성하고,
주의사항
‘isolation’, ‘timeout’, readOnly’
상기 옵션들은 트랜잭션이 시작 될 때만 적용되고,
기존 트랜잭션에 참여하는 경우에는 적용되지 않는다.
그러므로 SUPPORT 같은 경우에는 참여만 하기 때문에 적용 받을 일이 없고,
REQUIRES_NEW 같은 경우에는 반대로 매번 새로 생성하기 때문에 항상 적용을 받는다.
댓글남기기