스프링 트랜잭션 전파3 - 전파 기본

학습 페이지

전에 살펴본 예제와 다르게 트랜잭션이 중첩된다면 트랜잭션을 어떻게 처리해야할까?

이 경우 트랜잭션이 어떻게 동작할지를 결정하는 옵션을 트랜잭션 전파(propagation)이라고 한다.

💡 이 강의에서는 스프링 AOP 트랜잭션의 전파 옵션, 그 중에서도 기본값인 REQUIRED 를 기준으로 설명한다.

외부 트랜잭션과 내부 트랜잭션

image.png

이런 상황을 가정해보자. 어떤 트랜잭션이 수행중인데, 그 트랜잭션이 끝나기 전에 추가로 다른 트랜잭션이 시작했다고 해보자. 이때 먼저 시작된 트랜잭션을 외부 트랜잭션, 이후에 시작된 추가적인 트랜잭션을 내부 트랜잭션이라고 한다.

스프링은 이 경우 다음과같은 기본정책을 시행한다.

image.png

스프링은 외부 트랜잭션과 내부 트랜잭션을 묶어서 하나의 새로운 트랜잭션을 만든다.(커넥션도 하나 가져온다) 어떻게 보면 내부 트랜잭션이 외부 트랜잭션에 참여하도록 한다. 이것이 스프링의 기본 정책이다.

물리 트랜잭션과 논리 트랜잭션

위의 도식을 더 쉽게 이해하기 위해 위의 두 개념을 도입해보자.

image.png

물리 트랜잭션은 실제의 DB에 적용되는 트랜잭션, 실제 커넥션을 통해 트랜잭션을 시작하고 커밋, 롤백하는 단위이다.

논리 트랜잭션은 트랜잭션 매니저를 통해 트랜잭션을 시작하는 단위이다.