ticket-seller

인터파크 같은 온라인 대용량 티켓팅 서버

요약

  • 선택한 공연과 좌석에 대한 예약 및 결제 서비스를 제공합니다.
  • 공연을 선택하면 해당 공연 전체 좌석에 대한 예약 완료 여부, 잔여 좌석 수를 표시합니다.
  • 이때, 동시 접속자가 임계치를 넘어가면 대기 순번을 제공해 대기가 완료되는 순서대로 예약할 좌석 선택 및 결제를 진행할 수 있도록 합니다.
  • 결제가 완료되면 선택한 공연과 좌석이 예약 완료되고, 유저는 해당 내역을 확인 및 취소할 수 있습니다.

목표

  • 특정 시각 예약 동시 오픈 등 데이터의 변경이 급증하는 대용량 트래픽 상황에서 유저가 안정적으로 서비스를 사용할 수 있게 한다.
  • 예약 완료&취소 발생 시 좌석 예약 상태를 빠르게 반영해 과거 상태가 표시되거나, 잘못 표시하여 불필요하게 유저가 결제 페이지로 이동하거나 예약에 실패하지 않도록 한다.

목표가 아닌 것

  • 카드 결제 이외 결제 방법(가상 결제, 무통장 입금 등)
  • 디테일한 프론트 구현

중점사항

Common

  • Git Flow 브랜치 전략
  • 문서화

Performance

  • 예상되는 문제 상황(특정 시각에 시작하는 공연 예매에 따른 대용량 트래픽 등)에 대한 안정적인 처리
  • 동일한 좌석에 대한 예약 상태 동기화 문제 처리

계획

DDD 설계

image

서비스 구성도

image

빠른 좌석 상태 반영을 위한 이벤트 기반 데이터 처리 (Kafka, Kafka Connect)

  • 배치 기반 데이터 처리 방식은 처리 단위의 앞쪽에 있는 데이터가 뒤쪽에 있는 데이터가 처리될 때까지 대기해야 한다는 특징을 가짐
  • 따라서, 좌석 상태의 변화를 조금이라도 빠르게 유저에게 전달하기에는 부적합하기때문에 메시지 브로커 Kafka를 이용한 이벤트 기반 아키텍처 도입
  • 해당 시스템에서 발생하는 이벤트들은 모두 DB 데이터 변경을 수반하기 때문에, DB에 쌓이는 로그를 Kafka Connect를 이용해 Kafka로 전달하는 CDC 플랫폼 도입, DB의 변경 데이터를 Kafka의 CDC 토픽에 쌓음

image