[MSA] Transactional Outbox Pattern
오늘도 개발중입니다
안녕하세요. MSA프로젝트에서 트랜잭셔널 아웃박스 패턴은 데이터 변경과 메시지 전송을 동시에 안정적으로 처리하기 위해 사용됩니다.
예시를 통해 이해해봅시다.
회원 정보가 수정될 때, 트랜잭션 내에서 먼저 데이터베이스의 회원 정보를 수정하고 스프링 이벤트를 발행합니다.
이벤트를 받게될 스프링 이벤트 리스너는 2개가 필요한데 그중 한개는 phase설정을 before_commit으로 해서 이벤트를 발행한 서비스 로직과 트랜잭션을 유지하도록 합니다.
그리고 이 before_commit 스프링 이벤트 리스너가 동작하면 이벤트 발행 정보를 RDB의 아웃박스 테이블에 기록합니다. 이 아웃박스 테이블은 전송할 메시지와 이벤트의 정보를 임시로 저장하는 곳입니다.
그 다음, phase를 after_commit으로 설정한 다른 스프링 이벤트 리스너가 before_commit 이벤트 리스너가 종료되면 바로 동작해서 메시지를 브로커(예: Kafka, RabbitMQ)로 전달합니다.
이 방법을 통해 회원 정보 수정과 메시지 전송이 모두 성공적으로 처리되며, 시스템은 데이터 일관성을 유지할 수 있습니다.
따라서, 회원 정보 수정 트랜잭션이 성공하면 아웃박스에 기록된 데이터가 메시지로 안전하게 전송되고, 실패하면 아웃박스에 기록되지 않으므로 메시지도 전송되지 않게 됩니다.
이러한 과정이 어떻게 설계되었을까요? 더 자세히 알고 싶으시다면 아래의 글을 통해 확인하실 수 있습니다.
[MSA] Transactional Outbox Pattern - https://curiousjinan.tistory.com/m/entry/transactional-outbox-pattern-microservices-kafka
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 10월 21일 오전 12:18