728x90
트랜잭셔널 메시징은 마이크로서비스 아키텍처에서 데이터 일관성과 메시지 전달의 신뢰성을 유지하기 위해 사용되는 기법이다. 이 개념은 데이터베이스 트랜잭션과 메시징 시스템 간의 연계를 통해 데이터 상태와 메시지 전달이 항상 일치하도록 보장하고자 한다. 이를 통해 시스템 간의 분산 트랜잭션 문제를 해결할 수 있다.
트랜잭셔널 메시징의 핵심 개념
- 데이터 일관성 보장
- 데이터 상태가 변경될 때 반드시 관련 메시지도 전달되어야 함
- 메시지가 전달되지 않으면 데이터 변경이 롤백되어야 함
- 단일 트랜잭션 원칙
- 데이터베이스 업데이트와 메시지 브로커에 메시지 발행이 하나의 트랜잭션처럼 작동해야 함
- 중복 메시지 처리
- 메시지가 중복 전달될 가능성이 있으므로 멱등성(idempotency)을 고려한 메시지 처리 설계가 필요
728x90
트랜잭셔널 메시징 구현 방법
- Outbox 패턴
- 데이터베이스에 Outbox 테이블을 생성하여 트랜잭션 내에서 비즈니스 데이터와 메시지를 함께 저장
- 별도의 프로세스(예: 이벤트 퍼블리셔)가 Outbox 테이블에서 메시지를 읽어 메시징 시스템(예: Kafka, RabbitMQ)에 전달
- 비동기적으로 메시지를 처리하여 데이터 일관성을 유지
- 트랜잭션 내에서 비즈니스 데이터를 저장 및 갱신
- 동일한 트랜잭션에서 Outbox 테이블에 메시지 기록
- 별도의 워커(Worker)가 Outbox 테이블에서 메시지를 읽고 메시지 브로커로 전송
- 데이터베이스 트랜잭션 내에서 메시지 기록을 처리하므로 높은 일관성 보장
- 비교적 단순한 구현
- Outbox 테이블 관리 및 추가 작업 필요
- 데이터베이스 성능 부하 가능성
- Transaction Log Tailing
- 데이터베이스의 트랜잭션 로그를 직접 읽어서 메시지를 생성
- 데이터베이스의 변경사항을 캡처하는 CDC(Change Data Capture) 도구(예: Debezium)를 활용
- 애플리케이션 코드 변경 없이 메시지 생성 가능
- 고성능 시스템에 적합
- 추가적인 CDC 도구 및 운영 관리 필요
- 데이터베이스 로그 포맷 의존성 존재
- 2단계 커밋(2PC, Two-Phase Commit):
- 데이터베이스와 메시징 시스템 모두를 분산 트랜잭션 관리자로 묶어서 처리
- 두 단계(prepare, commit)로 트랜잭션을 관리하여 일관성을 보장
- 강력한 데이터 일관성 보장
- 성능 저하 및 복잡성 증가
- 대부분의 분산 시스템에서 비선호됨
- 이벤트 기반 보상 패턴(Saga Pattern)
- 트랜잭션을 분산 시스템에 맞게 분할하여 실패 시 보상 작업을 수행
- 트랜잭셔널 메시징과 함께 사용되며 보상 워크플로우를 정의하여 데이터 일관성을 유지
- 분산 환경에 적합하며 고성능 유지
- 롤백 대신 보상으로 트랜잭션을 대체
- 설계 및 구현 복잡성 증가
- 모든 보상 로직을 명시적으로 정의해야 함
구현 시 고려 사항
- 메시지 중복 처리
- 메시지 전달 시 중복이 발생할 수 있으므로 메시지 소비자는 멱등성을 보장해야 함
- 비동기 메시징의 타이밍 문제
- 메시지가 브로커로 전달되기 전에 시스템 장애가 발생할 수 있으므로 메시지 전달 실패 처리 방안을 설계해야 함
- 감사 로그
- 데이터와 메시지 상태를 추적할 수 있도록 로그를 기록하여 디버깅 및 모니터링 가능하도록 설정
- 적합한 메시지 브로커 선택
- Kafka, RabbitMQ, ActiveMQ 등 요구사항에 맞는 브로커 선택 필요.
결론적으로 트랜잭셔널 메시징은 데이터와 메시지의 일관성을 보장하기 위한 다양한 패턴과 기법을 활용하며 시스템의 요구사항에 맞는 적절한 구현 방식을 선택하는 것이 중요하다. Outbox 패턴은 단순하고 효과적인 방법으로 자주 사용되며 대규모 트래픽에서는 CDC 또는 Saga와 같은 패턴도 고려될 수 있다.
반응형
'Architecture' 카테고리의 다른 글
API 게이트웨이 패턴이란? (2) | 2024.12.20 |
---|---|
Service Discovery (1) | 2024.12.06 |
캐시 스탬피드(Cache Stampede) 개념과 해결 방법 (1) | 2024.11.28 |
Layered Architecture (계층형 아키텍처) (0) | 2024.06.20 |
스트랭글러 패턴 이란 (0) | 2023.11.05 |