1. 개요

  propagation이 뭘까? propagation은 전파옵션이라고 한다고 한다. 

  Spring Transaction 선언 시 propagation mode를 설정할 수 있다고 한다.

  Transaction Propagation 에는 아래와 같이 7가지가 있다.

  REQUIRED, REQUIRESNEW, MADATORY, NOTSUPPORTED, SUPPORTS, NEVER, NESTED

 

2. propagation을 설정하지 않으면?

  propagation을 설정하지 않으면 default 값은 REQUIRED 이다.

 

3. Propagation mode 7가지를 좀 더 살펴 볼까?

  REQUIRED : 부모 트랜잭션 내에서 실행하며 부모 트랜잭션이 없을 경우 새로운 트랜잭션을 생성한다.
  REQUIRES_NEW : 부모 트랜잭션을 무시하고 무조건 새로운 트랜잭션이 생성되도록 한다.
  SUPPORT : 부모 트랜잭션 내에서 실행하며 부모 트랜잭션이 없을 경우 nontransactionally로 실행된다.
  MANDATORY : 부모 트랜잭션 내에서 실행되며 부모 트랜잭션이 없을 경우 예외가 발생된다.
  NOT_SUPPORT : nontransactionally로 실행하며 부모 트랜잭션 내에서 실행될 경우 일시 정지 된다.
  NEVER : nontransactionally로 실행되며 부모 트랜잭션이 존재한다면 예외가 발생한다.
  NESTED : 해당 메서드가 부모 트랜잭션에서 진행될 경우 별개로 커밋되거나 롤백될 수 있다. 둘러싼 트랜잭션이 없을 경우 REQUIRED와 동일하게 작동한다.
 
 
4. 가장 많이 쓰는 건?
  REQUIRES_NEW 와  REQUIRED!
  이 둘의 차이점을 보면?
 
  REQUIRED : 실행 중인 Transaction context 가 있으면 해당 Transaction 내에서 실행하고, 없으면 새로운 Transaction 생성
  REQUIRES_NEW : 기존에 실행 중인 Transaction 유무와 상관 없이 무조건 새로운 Transaction 생성