본문 바로가기
JPA

JPA - 트랜잭션 매니저3 전파 속성

by sinabeuro 2022. 3. 25.
728x90

 

@Transaction 속성

@Transaction 에 설정할 수 있는 속성은 다음과 같습니다.

http://wiki.gurubee.net/pages/viewpage.action?pageId=26741432 참조

@Transaction 속성 중에 이번 포스트에서 Propagation 속성을 살펴보겠습니다.

 

 

 

Propagation 속성

Propagation 은 전달 또는 전파라고 하며, 진행되고 있는 트랜잭션에서 다른 트랜잭션이 호출될 때 어떻게 처리할지 정하는 것을 '트랜잭션의 전파 설정'이라고 부릅니다.

http://wiki.gurubee.net/pages/viewpage.action?pageId=26741432 참조

위와 같이 전파 속성은 총 7가지 설정이 존재합니다.

 

사용 예시는 다음과 같습니다.

@Transactional(propagation = Propagation.REQUIRED)

@Transactional(propagation = Propagation.REQUIRES_NEW)

@Transactional(propagation = Propagation.SUPPORTS)

 

 

REQUIRED

가장 일반적으로 사용하며 기본 설정입니다.

기존에 사용하는 트랜잭션이 있으면 그것을 사용하고 없으면 새로운 트랜잭션 생성합니다.

UnChecked Exception 이 일어나면 전파된 트랜잭션 모두 rollback됩니다.

 

 

REQUIRES_NEW

무조건 새로운 독립적인 트랜잭션을 생성합니다. 각각의 트랜잭션이 롤백되더라도 서로 영향을 주지 않습니다.

예를 들어, 부모 메소드에 REQUIRED 트랜잭션이 걸려있고, 자식 메소드 내에서는 REQUIRED_NEW 트랜잭션이 걸려있습니다.

이 상태에서 부모 메소드에서 UnChecked Exception 이 발생해도, REQUIRED_NEW 트랜잭션이 걸려있는 자식 메소드는 롤백되지 않고 정상적으로 커밋됩니다.

 

 

SUPPORTS

부모 트랜잭션이 있다면 그 트랜잭션을 사용합니다. 

진행중인 부모 트랜잭션이 없다면 트랜잭션을 생성하지 않습니다.

 

 

NESTED

NESTED는 이미 진행중인 트랜잭션이 있으면 중첩 트랜잭션을 시작합니다.

중첩 트랜잭션은 트랜잭션 안에 다시 트랜잭션을 만드는 것으로, 독립적인 트랜잭션을 만드는 REQUIRES_NEW와는 다릅니다.

NESTED에 의한 중첩 트랜잭션은 먼저 시작된 부모 트랜잭션의 커밋과 롤백에는 영향을 받지만, 자신의 커밋과 롤백은 부모 트랜잭션에게 영향을 주지 않습니다.

 

로그를 남기는 작업처럼 부모 트랜잭션이 실패하더라도 자식 트랜잭션에서 로그를 남겨야할 때 NESTED 속성을 사용하면 됩니다.

즉, 자식의 트랜잭션은 부모에 영향을 주지 않아야 할 때 NESTED 전파 속성을 이용할 수 있습니다.

 

 

NEVER

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

(거의 사용하지 않는 속성입니다.)

 

 

 

참고 자료

 

http://wiki.gurubee.net/pages/viewpage.action?pageId=26741432 

 

Transactional 어노테이션을 이용한 선언적 트랜잭션 - [종료]구루비 Dev 스터디 - 개발자, DBA가 함께

 

wiki.gurubee.net

 

https://milenote.tistory.com/108

 

[ JPA ] 6-4. 트랜잭션 매니저 (TransactionManager)

Reference. 한 번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online 이전 글 더보기 더보기 1. Repository interface 메서드 - 1 2. Query Method 정의 및 실습 - 2 3. Entity 기본 속성 - 3 4. Entity..

milenote.tistory.com

 

https://deveric.tistory.com/86

 

[Spring] 트랜잭션의 전파 설정별 동작

트랜잭션의 전파 설정이란 Spring에서 사용하는 어노테이션 '@Transactional'은 해당 메서드를 하나의 트랜잭션 안에서 진행할 수 있도록 만들어주는 역할을 합니다. 이때 트랜잭션 내부에서 트랜잭

deveric.tistory.com

 

https://mangkyu.tistory.com/169

 

[Spring] Spring 트랜잭션의 세부 설정(전파 속성, 격리수준, 읽기전용, 롤백/커밋 예외 등) - (2/3)

아래의 내용은 토비의 스프링의 2권 2장을 참고해서 작성하였습니다. 1. Spring 트랜잭션의 세부 설정(전파 속성, 격리수준, 읽기전용, 롤백/커밋 예외 등) [ 전파 속성(Propagation) ] Spring이 제

mangkyu.tistory.com

 

 

 

 

728x90

'JPA' 카테고리의 다른 글

JPA - 트랜잭션 매니저1 개요  (0) 2022.03.25
JPA - 트랜잭션 매니저2 독립성(격리) 속성  (0) 2022.03.25
JPA - Entity Listener  (0) 2022.03.25
JPA - 연관 관계  (0) 2022.03.25
JPA - Entity의 기본 속성  (0) 2021.12.03

댓글