전에 살펴본 예제와 다르게 트랜잭션이 중첩된다면 트랜잭션을 어떻게 처리해야할까?
이 경우 트랜잭션이 어떻게 동작할지를 결정하는 옵션을 트랜잭션 전파(propagation)이라고 한다.
💡 이 강의에서는 스프링 AOP 트랜잭션의 전파 옵션, 그 중에서도 기본값인
REQUIRED
를 기준으로 설명한다.
이런 상황을 가정해보자. 어떤 트랜잭션이 수행중인데, 그 트랜잭션이 끝나기 전에 추가로 다른 트랜잭션이 시작했다고 해보자. 이때 먼저 시작된 트랜잭션을 외부 트랜잭션, 이후에 시작된 추가적인 트랜잭션을 내부 트랜잭션이라고 한다.
스프링은 이 경우 다음과같은 기본정책을 시행한다.
스프링은 외부 트랜잭션과 내부 트랜잭션을 묶어서 하나의 새로운 트랜잭션을 만든다.(커넥션도 하나 가져온다) 어떻게 보면 내부 트랜잭션이 외부 트랜잭션에 참여하도록 한다. 이것이 스프링의 기본 정책이다.
위의 도식을 더 쉽게 이해하기 위해 위의 두 개념을 도입해보자.
물리 트랜잭션은 실제의 DB에 적용되는 트랜잭션, 실제 커넥션을 통해 트랜잭션을 시작하고 커밋, 롤백하는 단위이다.
논리 트랜잭션은 트랜잭션 매니저를 통해 트랜잭션을 시작하는 단위이다.