CS

[DB] Transactional 전파단계

KJihun 2023. 12. 4. 16:21
728x90

 

 

 

 

트랜잭션 전파(Transaction propagation)

 

상위 메서드의 트랜잭션이 동작중인 과정에서 트랜잭션이 적용된 하위 메서드를 실행할 경우 어떻게 처리하는 가에 대한 개념이다.

주로 사용되는 값은 default값인 REQUIRED 이며, 이외에도 여러 전파단계가 존재한다.

 

REQUIRED

따로 지정해주지 않으면 사용되는 기본값.

진행중인 Transaction이 있으면 해당 Transaction을 사용, 없다면 새로운 Transaction을 생성한다.


MANDATORY

진행중인 Transaction이 없을경우 exception 발생


REQUIRES_NEW

항상 새로운 Transaction을 생성 한다.
진행중인 Transaction이 있다면 중지하고 새로운 Transaction를 시작한다.
새로운 Transaction이 종료되면 기존의 Transaction이 다시 동작 한다.


SUPPORTS

진행중인 Transaction이 있다면 사용하며, 없다면 Transaction을 사용하지 않는다.


NOT_SUPPORTS

Transaction을 사용하지 않는다.
사용중인 Transaction이 있다면 중지하고 메서드가 종료된 후, Transaction을 다시 시작한다.


NEVER

Transaction이 존재한다면 exception 발생


NESTED

상위 메서드와 하위 메서드 둘 다 트랜잭션이 선언되어 있다면, 각각의 메서드에 선언된 트랜잭션이 독립적으로 실행된다.

예를들어 하위 메서드에서 예외가 발생하여 rollBack 될 때, 발생하는 예외는 다른 트랜잭션에 전파되지 않고

해당 트랜잭션 내에서 처리된다. 즉, 하위 트랜잭션이 rollBack되어도 상위 트랜잭션에 영향을 미치지 않는다.
따라서, 하위 메서드에서 예외가 발생하고 해당 트랜잭션이 롤백되더라도, 상위 트랜잭션은 계속 진행된다. 

 

 

'CS' 카테고리의 다른 글

메시지 큐(MQ; Message Queue)  (0) 2024.01.30
[Spring] Batch  (0) 2023.12.07
[Java] 강한 결합과 느슨한 결합  (0) 2023.11.29
[java] Error, Checked Exception, Unchecked Exception  (0) 2023.11.24
[java] String, StringBuilder, StringBuffer  (0) 2023.11.24