핵심 요약
RIDI가 Transactional Outbox 패턴을 도입해 메시지 발행의 신뢰성을 확보하고, Polling Publisher 방식의 Message Relay를 구현했습니다.
구현 방법
- Transactional Outbox 패턴 도입으로 DB 트랜잭션과 메시지 발행의 원자성 보장
- Polling Publisher 방식으로 Outbox 메시지를 주기적으로 수집하는 Message Relay 구현
- Outbox 테이블 구성: message와 처리 이력을 위한 processed_message 도입
- LEFT JOIN 기반 조회, Redis 락으로 단일 프로세스에서만 publish 시도
- Kafka 프로듀서/발행 인터페이스 구성 및 실패 시 Dead Letter/스킵 처리
- 삭제 정책: processed_message에 저장 후 일정 간격으로 오래된 메시지 삭제(MAX_ID_MARGIN_TO_DELETE)
- Datadog으로 모니터링: 처리량, 지연, 쿼리 지표 및 Slack 경고
주요 결과
- DB 트랜잭션과 메시지 발행의 원자성 확보 및 신뢰성 향상
- 락 대기 및 지연 감소 및 운영 안정성 강화
- 다중 노드 운영 시 중복 처리 최소화
- 실패 대응 체계(DLQ/스킵) 도입으로 운영성 개선



