Transaction 전파

무지성개발자·2023년 9월 28일
0

Transaction 전파

Spring을 사용해서 개발을 하다보면 @Transactional로 여러작업을 하나로 묶어서 사용할 경우도 있고 @Transactional 메소드가 중첩으로 사용 될 때도 있다. 이때 어떤 방식으로 트랜잭션 처리를 할 건지를 정할 수 있는데 이걸 전파속성이라고 말한다.

전파속성은 총 7가지가 있다.

  • Required
  • Supports
  • Mandatory
  • Requires_New
  • Not_Supported
  • Never
  • Nested

Required

@Transactional의 기본 설정이다.
이 속성은 활성화 된 트랜잭션이 있는지 확인하고 있다면 해당 트랜잭션에 참여 하고, 없다면 새 트랜잭션을 생성하여 사용한다.

@Transactional메서드a가 호출 될 때 활성화된 트랜잭션이 있는지 확인 후 없다면 새로운 트랜잭션을 만들고 있다면 트랜잭션에 참여.

Supports

Supports는 활성화된 트랜잭션이 있는지 확인하여, 있다면 기존 트렌잭션을 사용하고 없다면 비트랜잭션으로 작업을 진행한다.

@Transactional메서드a가 호출 될 때 활성화된 트랜잭션이 있는지 확인 후 있다면 참여하고 없다면 그냥 작업 시작.

Mandatory

활성화 된 트랜잭션이 있다면 참여하지만 없다면 Exception을 호출한다. 이 속성은 혼자서는 실행이 안되며 반드시 활성화된 트랜잭션 작업에서 호출하여 사용해야 한다.

@Transactional메서드a이 호출 될 때 참여할 트랜잭션이 없다면 Exception 호출.

Requires_New

Requires_New는 항상 새로운 트랜잭션을 만들어 작업하는 속성이다. 활성화된 트랜잭션이 있는데 새로운 작업을 한다면 기존 트랜잭션은 일시중지하고 새로운 트랜잭션을 만들어 새 작업을 처리한다.

@Transactional메서드a는 호출 되면 항상 새로운 트랜잭션을 만들어서 작업한다.

Not_Supported

활성화된 트랜잭션이 있는 경우 일시중지 하고 트랜잭션 없이 작업을 진행.

@Transactional메서드a는 호출되면 항상 트랜잭션 없이 작업함. 활성화 된 트랜잭션이 있는경우 잠시 멈추고 다른 커낵션으로 작업함.

Never

활성화된 트랜잭션이 있을 경우 Exception을를 호출함. 항상 비트랜잭션 작업을 함.

트랜잭션 작업 중에 @Transactional메서드a가 호출 되면 Exception을 호출.

Nested

활성화된 트랜잭션이 없으면 일반 트랜잭션 처럼 작동하지만, 활성화 된 트랜잭션이 있다면 호출 된 지점을 기준으로 트랜잭션에 참여하여 동작한다. Required와 비슷해 보이지만 rollback처리를 호출된 지점 기준으로 처리한다.

@Transactional메서드a에서 @Transactional메서드b를 호출 할 때 메서드b의 commit, rollback은 메서드a작업에 영향이 없지만 메서드a의 commit, rollback은 메서드b에게 영향을 미친다.


한 줄평 : 트랜잭션 작업에서 호출되는 메서드를 어떻게 처리 할지 선택할 때 기준이 되는 속성이다.

출처 -
https://www.baeldung.com/spring-transactional-propagation-isolation

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글