매일 매일, 차곡 차곡 쌓기



완벽하지 않은 것을 두려워 말며,
완성도를 높히는데 집중하자.

Spring/JPA

트랜잭셔널 전파

blockbuddy93 2024. 3. 12. 02:19

트랜잭션 전파란?

트랜잭셔널 전파(Transaction Propagation)는 트랜잭션의 범위를 결정하고 해당 트랜잭션이 다른 메서드나 컴포넌트로 전파되는 방식을 제어하는 메커니즘입니다. 트랜잭셔널 전파는 주로 분산 환경에서 여러 개의 서비스나 메서드 간에 트랜잭션을 관리할 때 사용됩니다.

 

트랜잭션 전파옵션 사용방법

import org.springframework.transaction.annotation.Transactional;

@Service
public class MyService {

    @Autowired
    private MyRepository repository;

    @Transactional(propagation = Propagation.REQUIRED,
                   isolation = Isolation.READ_COMMITTED,
                   timeout = 30,
                   readOnly = false)
    public void myTransactionalMethod() {
        // 트랜잭션 범위 내에서 수행되어야 하는 작업
        repository.save(entity1);
        repository.save(entity2);
    }
}

 

트랜잭션 전파옵션

  1. REQUIRED: 메서드가 실행될 때 현재 실행 중인 트랜잭션이 이미 있으면 해당 트랜잭션에 참여하고, 그렇지 않으면 새로운 트랜잭션을 시작합니다. 이 옵션은 대부분의 상황에서 기본값으로 사용됩니다.
  2. REQUIRES_NEW: 메서드가 실행될 때 항상 새로운 트랜잭션을 시작하고, 현재 실행 중인 트랜잭션이 있으면 일시 중단시킵니다.
  3. SUPPORTS: 메서드가 실행될 때 현재 실행 중인 트랜잭션이 있으면 해당 트랜잭션에 참여하고, 그렇지 않으면 트랜잭션 없이 실행됩니다.
  4. NOT_SUPPORTED: 메서드가 실행될 때 현재 실행 중인 트랜잭션이 있으면 일시 중단시키고, 트랜잭션 없이 실행됩니다.
  5. MANDATORY: 메서드가 실행될 때 현재 실행 중인 트랜잭션이 있으면 해당 트랜잭션에 참여하고, 그렇지 않으면 예외를 발생시킵니다.
  6. NEVER: 메서드가 실행될 때 트랜잭션이 없어야 하며, 트랜잭션이 존재하면 예외를 발생시킵니다.

트랜잭셔널 전파를 사용하여 트랜잭션의 범위를 명확하게 정의하고 관리함으로써 데이터 일관성과 견고성을 유지할 수 있습니다. 그러나 잘못된 전파 설정은 의도치 않은 결과를 초래할 수 있으므로 신중하게 결정해야 합니다.

 

'Spring > JPA' 카테고리의 다른 글

JpaRepsotiroy 상속을 꺼리는 이유  (0) 2024.07.05
성능 향상을 위한 1차 캐시와 2차 캐시  (0) 2023.12.31
JPA 비관적 락  (1) 2023.12.08
JPA 낙관적 락  (1) 2023.12.07
영속성 컨텍스트란?  (0) 2023.12.03