배경
배달의민족 회원시스템은 단일 서비스와 단일 DB로 운영되었습니다. 서비스 성장에 따라 회원 관련 로직이 복잡해지면서 다른 도메인(주문, 결제, 리뷰 등)과의 강결합 문제가 발생했습니다.
도전 과제
단일 DB의 트래픽 한계를 극복하면서도 회원 데이터의 일관성을 유지해야 했습니다. 기존 동기 API 호출 방식에서 비동기 이벤트 방식으로 전환할 때, 이벤트 유실 방지와 순서 보장이 핵심 과제였습니다. 또한 기존 시스템과의 하위호환성을 유지하면서 점진적 전환이 필요했습니다.
해결 방안
Kafka 기반 이벤트 버스를 도입하고, Outbox 패턴을 사용하여 DB 트랜잭션과 이벤트 발행의 원자성을 보장했습니다. CDC(Change Data Capture)를 활용하여 Outbox 테이블의 변경을 Kafka로 전달하고, 컨슈머에서 멱등성을 보장하는 처리 로직을 구현했습니다.
결과
회원시스템의 도메인 간 결합도가 크게 감소했고, 각 서비스가 독립적으로 배포 가능해졌습니다. 트래픽 급증 시에도 이벤트 버퍼링으로 안정적인 처리가 가능해졌습니다.
핵심 인사이트
- 1.Outbox 패턴은 이벤트 발행의 신뢰성 보장에 필수
- 2.CDC + Kafka 조합으로 DB와 메시지 큐의 일관성 확보
- 3.멱등성 설계가 이벤트 기반 시스템의 핵심
- 4.점진적 전환을 위한 듀얼 라이트(Dual Write) 기간 관리