HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
✍🏻
Learnary (learn - diary)
/
[AOP] - Transaction Propagation Level

[AOP] - Transaction Propagation Level

progress
Done
Tags
Spring
Build UpWhatWhyHow요약 테이블 REFER

Build Up


  • 트랜잭션이란 DBMS 상태를 변경할 수 있는 작업의 단위이다.
  • 기본적으로 원자성, 일관성, 고립성, 지속성 이라는 4가지의 특징을 가지고 있다.
  • 트랜잭션이 필요한 이유는 일련의 행위들을 그룹으로 묶어 커밋 및 롤백을 하기 위함이다.
 

What


트랜잭션 전파 속성이란
한 트랜잭션의 경계에서 이미 진행중인 트랜잭션이 존재할 때, 혹은 존재하지 않을 때 동작방식을 결정하는 설정이다.
 
REQUIRES (DEFAULT)
  • 이미 진행중인 트랜잭션이 존재한다면, 기존 트랜잭션에 참여한다.
  • 진행중인 트랜잭션이 없다면, 새로운 트랜잭션을 새로 시작한다.
REQUIRES_NEW
  • 트랜잭션의 유무의 상관없이 새로운 트랜잭션을 시작한다.
MANDATORY
  • 이미 진행중인 트랜잭션이 존재한다면, 기존 트랜잭션에 참여한다.
  • 진행중인 트랜잭션이 없다면, 예외를 발생시킨다.
NESTED
  • 이미 실행 중인 트랜잭션이 존재한다면, 중첩 트랜잭션을 만든다.
    • 부모 트랜잭션에서 자식 트랜잭션을 생성한다고 보면 된다.
    • 중첩 트랜잭션은 커밋과 롤백 부분에서의 차이가 있다.
      • 부모 트랜잭션에서 롤백되면 자식도 롤백이 된다.
      • 자식 트랜잭션에서 롤백되면 자식만 롤백이 된다.
  • 진행중인 트랜잭션이 없다면 (= 부모 트랜잭션) 이 없다면 독립적으로 트랜잭션으로 시작한다.
NEVER
  • 트랜잭션을 사용하지 않도록 강제하는 속성이다.
  • 진행중인 트랜잭션이 존재한다면, 예외를 발생시킨다.
  • 진행중인 트랜잭션이 존재하지 않는다면, 그냥 진행한다.
SUPPORT
  • 이미 진행 중인 트랜잭션이 있다면 해당 트랜잭션에 합류한다.
  • 이미 진행 중인 트랜잭션이 없다면 그냥 진행한다.
NOT_SUPPORT
  • 트랜잭션 자체를 무시하는 전략 속성이다.
 

Why


  • 일려의 행위들을 하나의 트랜잭션으로 묶어 원자성을 유지할 때 필요로 하다.
  • 또한 일련의 행위들을 부분적으로 쪼개어 커밋, 롤백을 진행하기 위해 사용한다.
  • 애플리케이션 영역에서의 수행하는 일을 DB와 혼연 일체라고 생각하면 안된다.
  • 그 사이에 발생할 수 있는 엣지 케이스가 존재할 수 있음을 염두해야 한다.

How


notion image
속성에 @Transaction(propagation = “${사용할 속성}”)을 입력하면 된다.
 

요약 테이블


notion image

 REFER