트랜잭셔널 아웃박스 패턴이란?
●트랜잭셔널 아웃박스 패턴이란?
트랜잭셔널 아웃박스 패턴(Transactional Outbox Pattern) 은 분산 시스템에서 단일 작업에 데이터베이스 쓰기 작업과 메시지 혹은 이벤트 발행이 모두 포함된 경우 발생하는 이중 쓰기 문제를 해결하기 위해서 사용할 수 있음
예를 들어서, 다음과 같은 코드가 존재한다고 가정
@Transactional
public void propagateSample() {
Product product = new Product("신규 상품");
productRepository.save(product);
eventPublisher.propagate(new NewProductEvent(product.getId()));
}
public void doInTransaction() {
try {
transaction.begin();
Product product = new Product("신규 상품");
productRepository.save(product);
eventPublisher.propagate(new NewProductEvent(product.getId()));
transaction.commit();
} catch(Exception e) {
transaction.rollback();
}
}
@Transactional
public void propagateSample() {
Product product = new Product("신규 상품");
productRepository.save(product);
productOutboxRepository.save(new ProductEvent(product.getId()));
}