본문 바로가기
관리자

Programming-[Backend]/Spring

[TIL][링크] 트랜잭션의 전파, Spring @Transactional 중첩

728x90
반응형

 

참조 링크의 블로그에 너무 잘 정리되어 있어서 읽어보면 될 것 같다. 요약하자면 다음과 같다.

 

스프링에서는,

@Transactional의 propagation 설정을 통해 트랜잭션의 전파를 설정할 수 있다.

 

 

1. REQUIRED

기본 설정은 REQUIRED이다. 트랜잭션A(부모) 내부에 트랜잭션B(자식)가 실행되는 경우, 트랜잭션A에 트랜잭션 B가 합류한다. 다시말해 커밋이나 롤백의 기준이 트랜잭션 A만 존재하는 경우와 같다.

 

아래는 자식 트랜잭션에 주는 속성을 소제목과 같이 바꿨을 때의 동작 방식을 설명한다.

 


2. REQUIRES_NEW

A, B 개별 트랜잭션으로 취급한다. 각각 커밋과 롤백이 이루어진다.

 

3. MANDATORY

부모에 자식이 합류한다. 다만, 부모 트랜잭션이 없으면 에러가 발생한다.

 

4. NESTED

부모에 자식이 nested 된다. 부모 내부에서 롤백 시, 자식의 시작지점까지만 롤백되는 방식이다. 커밋은 부모 트랜잭션이 커밋될때 함께 커밋된다. 부모 트랜잭션이 없다면 새로운 트랜잭션을 생성한다.

 

5. NEVER

트랜잭션을 생성하지 않는다. 만약 부모 트랜잭션이 존재하면 예외를 발생시킨다.

 

6. SUPPORTS

부모가 있다면 합류하고, 부모가 없다면 트랜잭션을 생성하지 않는다.

 

7. NOT_SUPPORTED

부모 트랜잭션이 있다면 보류시킨다. 부모 트랜잭션이 없으면 트랜잭션을 생성하지 않는다.

 

 

 

다음은 REQUIRES_NEW의 참조 블로그 예시 그림이다.


 

참조

 

1. 개발자 EricJoeng님의 블로그

https://deveric.tistory.com/86

728x90
반응형