트랜잭션 전파란?
트랜잭셔널 전파(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);
}
}
트랜잭션 전파옵션
- REQUIRED: 메서드가 실행될 때 현재 실행 중인 트랜잭션이 이미 있으면 해당 트랜잭션에 참여하고, 그렇지 않으면 새로운 트랜잭션을 시작합니다. 이 옵션은 대부분의 상황에서 기본값으로 사용됩니다.
- REQUIRES_NEW: 메서드가 실행될 때 항상 새로운 트랜잭션을 시작하고, 현재 실행 중인 트랜잭션이 있으면 일시 중단시킵니다.
- SUPPORTS: 메서드가 실행될 때 현재 실행 중인 트랜잭션이 있으면 해당 트랜잭션에 참여하고, 그렇지 않으면 트랜잭션 없이 실행됩니다.
- NOT_SUPPORTED: 메서드가 실행될 때 현재 실행 중인 트랜잭션이 있으면 일시 중단시키고, 트랜잭션 없이 실행됩니다.
- MANDATORY: 메서드가 실행될 때 현재 실행 중인 트랜잭션이 있으면 해당 트랜잭션에 참여하고, 그렇지 않으면 예외를 발생시킵니다.
- 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 |