피드로 돌아가기
Building a Cloud-Native Event Ticketing System with DDD, Event-Driven Architecture & CQRS in .NET 8
Dev.toDev.to
Backend

DDD, EDA, CQRS 기반의 동시성 제어 및 무손실 티켓팅 시스템 설계

Building a Cloud-Native Event Ticketing System with DDD, Event-Driven Architecture & CQRS in .NET 8

Naimul Karim2026년 5월 7일63advanced

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 도입을 고려했는가

원문 읽기