피드로 돌아가기
Dev.toBackend
원문 읽기
DDD, EDA, CQRS 기반의 동시성 제어 및 무손실 티켓팅 시스템 설계
Building a Cloud-Native Event Ticketing System with DDD, Event-Driven Architecture & CQRS in .NET 8
AI 요약
Context
동시 좌석 예약 시 발생하는 Race Condition 및 결제 실패 시의 데이터 정합성 보장이 핵심 난제인 도메인. 서비스 간 강결합으로 인한 확장성 저하와 분산 트랜잭션 관리의 복잡성을 해결해야 하는 상황.
Technical Solution
- Redis Distributed Lock(SET NX) 도입을 통한 동시 좌석 예약 충돌 방지 및 오버셀링 원천 차단
- Saga Pattern 기반의 보상 트랜잭션을 설계하여 결제 실패 시 예약 좌석을 자동 해제하는 분산 워크플로우 구현
- Outbox Pattern 적용으로 DB 업데이트와 메시지 발행을 원자적으로 처리하여 메시지 유실 제로화 달성
- CQRS 패턴을 통한 Command(쓰기)와 Query(읽기) 경로 분리로 읽기 트래픽 최적화 및 독립적 확장 구조 확보
- RabbitMQ 기반의 Event-Driven Architecture를 구축하여 서비스 간 HTTP 직접 호출을 배제한 느슨한 결합 구현
- DDD Aggregate 설계를 통해 비즈니스 불변식을 도메인 계층에서 강제하여 로직 파편화 방지
실천 포인트
1. 분산 락 도입 시 SET NX와 TTL 설정을 통해 데드락 가능성을 제거했는가
2. 메시지 발행과 DB 저장을 하나의 트랜잭션으로 묶는 Outbox 패턴을 검토했는가
3. 서비스 간 직접 API 호출 대신 Event-Driven 방식을 통해 런타임 의존성을 제거했는가
4. 읽기/쓰기 모델의 부하 특성이 다를 경우 CQRS 도입을 고려했는가