[SpringBoot] @Transactional 설정 - 전파 수준

해니·2024년 10월 29일
0

SpringBoot

목록 보기
24/24
post-thumbnail

전파 속성(Propagation)

@Transactional(propagation=Propagation.NESTED)
  • 트랜잭션 동작 도중 다른 트랜잭션을 호출하는 상황에 선택할 수 있는 옵션이다.
  • Spring이 지원하는 전파 속성은 아래 7가지가 있다.
    • REQUIRED, SUPPORTS, MANDATORY, REQUIRES_NEW, NOT_SUPPORTED, NEVER, NESTED

🌱 스프링에서는 트랜잭션 처리를 지원하는데, 그 중 한 방법으로 @Transactional 어노테이션을 클래스 혹은 메서드 위에 추가할 수 있다.
이를 선언적 트랜잭션이라고 부른다.


REQUIRED (기본 값)

  • 이미 시작된 트랜잭션이 있으면 참여하고, 없으면 새로 시작한다.
  • 하나의 트랜잭션이 시작된 후 다른 트랜잭션 경계가 설정된 메소드를 호출하면 같은 트랜잭션으로 묶인다.

SUPPORTS

  • 이미 시작된 트랜잭션이 있으면 참여하고, 그렇지 않으면 트랜잭션 없이 진행한다.
  • 트랜잭션이 없어도 해당 경계 안에서 Connection 객체나 하이버네이트의 Session 등은 공유 할 수 있다.

MANDATORY

  • 이미 시작된 트랜잭션이 있으면 참여하고, 없으면 새로 시작하는 대신 없으면 예외를 발생시킨다.
  • 독립적으로 트랜잭션을 진행하면 안되는 경우에 사용한다.

REQUIRES_NEW

  • 이미 진행중인 트랜잭션이 있으면 이를 보류시키고 새로운 트랜잭션을 만들어 시작한다.
  • 항상 새로운 트랜잭션을 시작해야 하는 경우에 사용한다.

NOT_SUPPORTED

  • 이미 진행중인 트랜잭션이 있으면 이를 보류시키고, 트랜잭션을 사용하지 않도록 한다.

NEVER

  • 이미 진행중인 트랜잭션이 있으면 예외를 발생시키며, 트랜잭션을 사용하지 않도록 강제한다.

NESTED

  • 이미 진행중인 트랜잭션이 있으면 중첩(자식) 트랜잭션을 시작한다.
  • NESTED에 의한 중첩 트랜잭션은 먼저 시작된 부모 트랜잭션의 커밋과 롤백에는 영향을 받지만, 자신의 커밋과 롤백은 부모 트랜잭션에게 영향을 주지 않음






출처
[DB / Spring ] @Transactional 세부 설정 - 격리 수준 / 전파 수준 설정
[Spring] Spring 트랜잭션의 세부 설정(전파 속성, 격리수준, 읽기전용, 롤백/커밋 예외 등) - (2/3)
트랜잭션과 Spring의 선언적 트랜잭션에 대하여

profile
💻 ⚾️ 🐻

0개의 댓글