스프링/6. 스프링 DB-2

53. 트랜잭션 전파 6

sdafdq 2023. 10. 16. 19:21

다양한 전파 옵션에 대해 알아보겠다.

보통 REQUIRED를 기본으로 쓰고, 아주 가끔 REQUIRES_NEW를 쓴다.

 

REQUIRED

기존 트랜잭션에 참여

없으면 새로 생성

 

REQUIRES_NEW

항상 새 트랜잭션을 생성.

 

SUPPORT

기존 트랜잭션 있으면 참여

없으면 아예 트랜잭션 없이 진행

말 그대로 지원 정도

 

NOT_SUPPORT

기존 트랜잭션 있을 시에도 트랜잭션 없이 진행하되, 기존 트랜잭션은 보류시킴. suspend 그거 인 듯

없을 시 그냥 트랜잭션 없이 진행

 

MANDATORY

기존 트랜잭션에 참여한다.

없으면 예외 발생. IllegalTransactionStateException

의무적인, 이란 뜻으로 반드시 트랜잭션이 있어야 한다.

 

NEVER

기존 트랜잭션 있으면 예외 발생

없을 시 그냥 트랜잭션 없이 진행

이름 그대로 절대 트랜잭션이 있어선 안됨.

 

NESTED

기존 트랜잭션 있을 시 중첩 트랜잭션을 만듦.

없을 시 새 트랜잭션을 생성.

중첩 트랜잭션은 REQUIRED랑 약간 다른 게, 얘는 rollback되어도 외부  트랜잭션은 Commit 가능 함.

이건 DB드라이버에서 JDBC 세이브 포인트 기능을 지원해야 하며, 현재 JPA에서는 지원 안한다.

 

 

isolation, timeout, readOnly 등의 옵션은 처음의 트랜잭션만, 그러니까 외부트랜잭션이거나 REQUIRES_NEW인 것들만 적용이 된다.

 

 

 

 

 

 

 

 

'스프링 > 6. 스프링 DB-2' 카테고리의 다른 글

55. 트랜잭션 전파 활용 2  (0) 2023.10.17
54. 트랜잭션 전파 활용 1  (0) 2023.10.17
52. 트랜잭션 전파 5  (0) 2023.10.16
51. 트랜잭션 전파 4  (0) 2023.10.16
50. 트랜잭션 전파 3  (0) 2023.10.16