[Spring Boot] Transaction Propagation

이맑음·2021년 10월 27일
0

Spring Boot

목록 보기
19/21
post-thumbnail

Transaction Propagation

REQUIRED

  • @Transaction의 디폴트 설정이다.
  • 기존에 사용하던 트랜잭션이 있다면 재활용 하고, 없다면 새로운 트랜잭션을 만들어 사용한다.
  • 트랜잭션을 재활용(공유)하기 때문에 한 메서드에서 예외가 발생하여 트랜잭션이 롤백된다면 다른 메서드 역시 정상 동작하더라도 함께 롤백되기 때문에 주의해야 한다.
  • JpaRepository에서 제공하는 save()메서드에 적용되어 있다. @Transaction을 사용하지 않은 메서드에서 save()메서드가 동작할 때마다 각각의 트랜잭션을 새로 만들어 처리한다.
  • 대부분 사용하는 옵션이다.

REQUIRES_NEW

  • 이름처럼 기존의 트랜잭션을 재활용하지 않고 무조건 새로운 트랜잭션을 만들어 사용한다.

NESTED

  • 호출하는 메서드에 트랜잭션이 존재한다면 그 트랜잭션을 재활용한다. 한 트랜잭션을 사용하므로 종속적이지만 REQUIRED보다 독립적으로 동작한다.
  • REQUIRED보다 독립적으로 동작할 수 있는 이유는 save()메서드로 중간 저장을 할 수 있기 때문이다. save()메서드가 실행된 부분까지는 다른 부분에서 예외가 발생하더라도 정상 동작을 보장한다.

SUPPORTS

  • REQUIRED와 마찬가지로 호출하는 메서드에 트랜잭션이 존재한다면 그 트랜잭션을 재활용한다.
  • 다른 점은 트랜잭션이 없다면 새로 생성하지 않고, 트랜잭션이 없는 상태로 동작한다.

NOT_SUPPORTED

  • 호출하는 메서드에 트랜잭션이 존재하더라도 이를 멈추고 트랜잭션이 없는 상태로 동작한다.

MANDATORY

  • 필수적으로 트랜잭션이 존재해야 한다. 없으면 오류를 발생시킨다.

NEVER

  • 트랜잭션이 없어야 한다. 트랜잭션이 존재한다면 오류를 발생시킨다.

0개의 댓글