Skip to content

Latest commit

 

History

History
34 lines (28 loc) · 2.8 KB

File metadata and controls

34 lines (28 loc) · 2.8 KB

전파 모드(Propagation)에 대해서 알아보자

중요한 부분

개인적인 경험으로 propagation은 default인 REQUIRED와 REQUIRES_NEW를 가장 많이 사용하게 된다.
REQUIRED는 이미 진행 중인 트랜잭션이 있으면 그 트랜잭션에 참여하고, 없으면 새로운 트랜잭션을 시작한다.
REQUIRES_NEW는 항상 새로운 트랜잭션을 시작한다. 이미 진행 중인 트랜잭션이 있으면 일시 중단시키고 새로운 트랜잭션을 시작한다. REQUIRES_NEW는 기존 트랜잭션과 별도로 사용될 경우 사용한다. 이거를 감싸고 있는 트랜잭션이 실패해도 REQUIRES_NEW는 성공해야 할 때 사용된다.

전파 모드 간단 개념

JPA에서 트랜잭션 전파 모드는 트랜잭션이 이미 존재하는 상황에서 메서드가 호출될 때, 그 메서드가 어떻게 동작할지를 결정하는 방식이다. 즉, 하나의 트랜잭션이 진행 중일 때 새롭게 호출된 메서드가 그 트랜잭션에 참여할지, 아니면 별도의 트랜잭션을 시작할지 등을 정의하는것이다.

전파 모드 종류

  • REQUIRED(기본값)
    • 설명: 이미 진행 중인 트랜잭션이 있으면 그 트랜잭션에 참여하고, 없으면 새로운 트랜잭션을 시작한다.
    • 사용 예시: 일반적으로 트랜잭션이 필요할 때 사용한다. 여러 작업이 하나의 트랜잭션으로 묶여야 할 때 사용한다.
    • 예시: A 계좌에서 출금하고 B 계좌에 입금하는 작업이 하나의 트랜잭션으로 처리되어야 할 때 사용됩니다.
  • REQUIRES_NEW
    • 설명: 항상 새로운 트랜잭션을 시작한다. 이미 진행 중인 트랜잭션이 있으면 일시 중단시키고 새로운 트랜잭션을 시작한다.
    • 사용 예시: 기존 트랜잭션과는 별도로 처리되어야 하는 작업에 사용됩니다. 예를 들어, 로깅 등이 독립적으로 처리되어야 할 때 사용됩니다.
    • 예시: A 계좌에서 출금하는 작업에 실패해도 로깅 작업은 성공해야 할 때 사용됩니다.
  • MANDATORY
    • 설명: 이미 진행 중인 트랜잭션이 있으면 그 트랜잭션에 참여하고, 없으면 예외를 발생시킨다.
  • SUPPORTS
    • 설명: 이미 진행 중인 트랜잭션이 있으면 그 트랜잭션에 참여하고, 없으면 트랜잭션 없이 실행된다.
  • NOT_SUPPORTED
    • 설명: 트랜잭션 없이 실행된다. 이미 진행 중인 트랜잭션이 있으면 일시 중단시키고 트랜잭션 없이 실행된다.
  • NEVER
    • 설명: 트랜잭션 없이 실행된다. 이미 진행 중인 트랜잭션이 있으면 예외를 발생시킨다.
  • NESTED
    • 설명: 이미 진행 중인 트랜잭션이 있으면 중첩 트랜잭션으로 처리되고, 없으면 새로운 트랜잭션을 시작한다.