- Spring Transaction 52022년 09월 28일
- starryeye
- 작성자
- 2022.09.28.:30
트랜잭션이 둘 이상 있을 경우 어떻게 동작 할까?
(트랜잭션 내부에서 트랜잭션이 또 적용되면?)
트랜잭션 전파(Transaction Propagation)에 대하여 학습해보자..
기본 대원칙
1. 모든 논리 트랜잭션이 커밋되어야 물리 트랜잭션이 커밋된다.
2. 하나의 논리 트랜잭션이라도 롤백되면 물리 트랜잭션은 롤백된다.
기본 대원칙에 대해 자세히 알아보자.
물리 트랜잭션, 논리 트랜잭션
위 그림 처럼, 클라이언트가 어떤 로직1을 호출 하면 트랜잭션이 수행되고
로직1은 로직2를 호출하여 트랜잭션이 또 한번 수행된다고 생각 해보자.
스프링은 첫번째 두번째 트랜잭션을 논리 트랜잭션, 두개를 묶어 물리 트랜잭션이라 개념을 만들었다.
물리 트랜잭션
물리 트랜잭션은 실제 데이터베이스에 적용되는 트랜잭션을 뜻한다.
실제 커넥션을 통해서 트랜잭션을 시작(setAutoCommit(false)) 한다.
실제 커넥션을 통해 커밋, 롤백하는 단위가 바로 물리 트랜잭션이다.
논리 트랜잭션
논리 트랜잭션들은 하나의 물리 트랜잭션으로 묶인다.
논리 트랜잭션은 트랜잭션 매니저를 통해 트랜잭션을 사용하는 단위이다.
따라서...
논리 트랜잭션은 트랜잭션이 수행되는 도중 내부에서 추가로 트랜잭션을 사용하는 경우에 나타난다.
(REQUIRED 옵션 사용할 경우)
이러한 개념을 바탕으로 기본 대원칙을 다시 한번 상기 해보자.
1. 모든 논리 트랜잭션이 커밋되어야 물리 트랜잭션이 커밋된다.
2. 하나의 논리 트랜잭션이라도 롤백되면 물리 트랜잭션은 롤백된다.
아래 예시 상황에서 내외부 트랜잭션이 커밋 되는 경우와 안되는 경우를 이해 해보자.
외부 트랜잭션 커밋
내부 트랜잭션 커밋
-> 물리 트랜잭션 커밋
외부 트랜잭션 롤백
내부 트랜잭션 커밋
-> 물리 트랜잭션 롤백
외부 트랜잭션 커밋
내부 트랜잭션 롤백
-> 물리 트랜잭션 롤백 + 클라이언트로 UnexpectedRollbackException예외 던짐
트랜잭션 전파 옵션
REQUIRED
기본 옵션이다. (@Transaction 과 동일하다.)
기존 트랜잭션이 없으면 새로운 트랜잭션 생성
기존 트랜잭션이 있으면 기존 트랜잭션에 참여
ex) @Transaction(propagation = Propagation.REQUIRED)
REQUIRED_NEW
기존 트랜잭션이 없으면 새로운 트랜잭션 생성
기존 트랜잭션이 있어도 새로운 트랜잭션 생성
SUPPORT
기존 트랜잭션이 없으면 트랜잭션 없이 진행
기존 트랜잭션이 있으면 기존 트랜잭션에 참여
나머지는 필요하면 찾아보자..
NOT_SUPPORT
MANDATORY
NEVER
NESTED
'Spring > DB, Cache 연동' 카테고리의 다른 글
JPA 핵심 정리 - Table 매핑 (0) 2023.02.22 JPA 핵심 정리 - 정의 (0) 2023.02.22 Spring Transaction 4 (0) 2022.09.28 Spring Transaction 3 (0) 2022.09.22 Spring Transaction 2 (0) 2022.09.22 다음글이전글이전 글이 없습니다.댓글