[자바 스프링 트랜잭션] 전파방식 7개 설명

[자바 스프링 트랜잭션] 전파방식 7개 설명


자바 스프링 1. PROPAGATION_MANDATORY

해당 메소드 호출 전에 반드시 진행 중인 트랜잭션이 존재해야 한다. 진행 중인 트랜잭션이 존재하지 않을 경우에는 예외가 발생한다.


자바 스프링 2. PROPAGATION_NESTED

이미 진행 중인 트랜잭션이 존재하면 해당 메소드는 중첩된 트랜잭션(NESTED TRANSACTION)에서 실행돼야 함을 나타낸다. 중첩된 트랜잭션은 둘러싼 트랜잭션(ENCLOSING TRANSACTION)독립적으로 커밋되거나 롤백될 수 있다.


자바 스프링 트랜잭션


만약 둘러싼 트랜잭션이 없는 상황이라면 이는 PROPAGATION_REQUIRED와 동일하게 작동한다. 그러나 이 전파방식은 벤더 의존적이며 지원이 안 되는 경우도 많다. 관련 문서 등을 통해 중첩된 트랜잭션이 지원되는지 확인하라.


자바 스프링 3. PROPAGATION_NEVER

해당 메소드는 트랜잭션 진행상황에서 실행될 수 없다. 만약 이미 진행중인 트랜잭션이 존재하면 예외가 발생한다.


자바 스프링 4. PROPAGATION_NOT_SUPPORTED

해당 메소드는 트랜잭션이 없는 상황에서 실행된다. 만약 진행 중인 트랜잭션이 있다면 해당 메소드가 반환되기 전까지 잠시 중단된다. JTATransactionManager를 사용하는 경우에는 javax.transaction.TransactionManager에 대한 액세스가 요구된다.


자바 스프링 트랜잭션 전파방식


자바 스프링 5. PROPAGATION_REQUIRED

해당 메소드는 트랜잭션 상황에서 실행돼야 한다. 진행 중인 트랜잭션이 있으면 이 트랜잭션 상황에서 실행된다. 없는 경우에는 트랜잭션이 새로 시작된다.


자바 스프링 6. PROPAGATION_REQUIRES_NEW

해당 메소드는 자신만의 트랜잭션 상황에서 실행돼야 한다. 이미 진행중인 트랜잭션이 있으면 그 트랜잭션은 해당 메소드가 반환되기 전까지 잠시 중단된다.


만약 JTATransactionManager를 사용하는 경우에는 javax.transaction.TransactionManager에 대한 액세스가 요구된다.


Java Spring 트랜잭션 전파


자바 스프링 7. PROPAGATION_SUPPORTS

해당 메소드는 진행 중인 트랜잭션이 없더라도 실행 가능하고, 트랜잭션이 있는 경우에는 이 트랜잭션 상황에서 실행된다. 예를 들어, 어떤 메소드가 PROPAGATION_REQUIRES_NEW로 선언되어 있다면 이는 메소드와 트랜잭션 경계가 일치함을 의미한다.


즉, 이 메소드가 시작할 때마다 새로운 트랜잭션이 시작되고, 메소드가 반환되거나 예외가 발생하면 트랜잭션이 종료된다.


만약 메소드가 PROPAGATION_REQUIRED로 선언되어 있다면, 실질적인 트랜잭션 경계는 이미 진행 중인 트랜잭션의 존재 여부에 따라 달라진다.


출처 : 스프링 인 액션 3판, 크레이그 월즈, 홍영표역

이 글을 공유하기

댓글(0)

Designed by JB FACTORY