개발 일지/Spring

[Spring] 트랜잭션 전파

미숫가루설탕많이 2023. 3. 2. 19:28

 트랜잭션 전파(Transaction Propagation)는 트랜잭션의 경계에서 진행 중인 트랜잭션이 존재하거나 존재하지 않을 때, 어떻게 동작할 것인지 결정하는 방식이다. 즉, 메서드 내에서 실행되는 코드가 이미 다른 트랜잭션 내에서 실행 중일 때, 해당 트랜잭션에서는 어떻게 동작할지를 정하는 것이다.

 

 Spring은 다양한 전파 속성을 제공하며, 이를 설정함으로써 트랜잭션 간의 상호작용 방식을 제어할 수 있다.

 

 적절히 조합하여 데이터의 일관성과 안전한 처리를 보장할 수 있지만, 오용하게 된다면 오히려 복잡도가 증가할 수 있다. 그러므로 각 메서드의 역할과 트랜잭션 처리의 필요성 등을 고려해서 적절하게 전파 방식을 선택해야 한다.

 

 

 

 

트랜잭션 전파 방식

 

  • Propagation.REQUIRED
    : 일반적으로 가장 많이 사용되는 propagation 유형의 기본값으로, 메서드가 실행될 때 현재 트랜잭션이 이미 존재한다면 해당 트랜잭션 내에서 실행된다. 만약 트랜잭션이 존재하지 않으면 새로운 트랜잭션을 생성하고 실행한다.

  • Propagation.REQUIRES_NEW
    : 현재 트랜잭션이 이미 존재하더라도 무시하고 새로운 트랜잭션을 생성하여 실행한다.

  • Propagation.MANDATORY
    : 현재 트랜잭션이 존재할 때만 메서드를 실행한다. 만약 트랜잭션이 존재하지 않으면 예외가 발생한다.

  • Propagation.SUPPORTS
    : 현재 트랜잭션이 존재하면 해당 트랜잭션 내에서 실행되고, 트랜잭션이 존재하지 않으면 트랜잭션 없이 실행된다.

  • Propagation.NOT_SUPPORTED
    : 트랜잭션 없이 실행된다. 만약 진행 중인 트랜잭션이 있으면 메서드 실행이 종료될 때 까지 진행중인 트랜잭션은 중지되고 메서드 실행이 종료된 후에 트랜잭션을 계속 진행한다.

  • Propagation.NEVER
    : 트랜잭션을 필요로 하지 않음을 의미한다. 만약 현재 트랜잭션이 존재하는 상황에서 실행되면 예외가 발생한다.

  • Propagation.NESTED
    : 상위 트랜잭션 내에서 하위 트랜잭션을 생성하여 실행한다. 상위 트랜잭션에서 커밋이나 롤백을 하지 않는 이상, 하위 트랜잭션은 독립적으로 실행되지 않는다.

'개발 일지 > Spring' 카테고리의 다른 글

[Spring Data JPA] Auditing 기능  (0) 2023.03.13
[Spring] 트랜잭션 격리 레벨  (0) 2023.03.02
Failed to configure a DataSource 에러  (0) 2023.03.01
[Spring MVC] 트랜잭션  (0) 2023.02.28
[Spring JPA] CASCADE  (0) 2023.02.27