ticket-seller
인터파크 같은 온라인 대용량 티켓팅 서버
요약
- 선택한 공연과 좌석에 대한 예약 및 결제 서비스를 제공합니다.
- 공연을 선택하면 해당 공연 전체 좌석에 대한 예약 완료 여부, 잔여 좌석 수를 표시합니다.
- 이때, 동시 접속자가 임계치를 넘어가면 대기 순번을 제공해 대기가 완료되는 순서대로 예약할 좌석 선택 및 결제를 진행할 수 있도록 합니다.
- 결제가 완료되면 선택한 공연과 좌석이 예약 완료되고, 유저는 해당 내역을 확인 및 취소할 수 있습니다.
목표
- 특정 시각 예약 동시 오픈 등 데이터의 변경이 급증하는 대용량 트래픽 상황에서 유저가 안정적으로 서비스를 사용할 수 있게 한다.
- 예약 완료&취소 발생 시 좌석 예약 상태를 빠르게 반영해 과거 상태가 표시되거나, 잘못 표시하여 불필요하게 유저가 결제 페이지로 이동하거나 예약에 실패하지 않도록 한다.
목표가 아닌 것
- 카드 결제 이외 결제 방법(가상 결제, 무통장 입금 등)
- 디테일한 프론트 구현
중점사항
Common
- Git Flow 브랜치 전략
- 문서화
Performance
- 예상되는 문제 상황(특정 시각에 시작하는 공연 예매에 따른 대용량 트래픽 등)에 대한 안정적인 처리
- 동일한 좌석에 대한 예약 상태 동기화 문제 처리
계획
DDD 설계
서비스 구성도
빠른 좌석 상태 반영을 위한 이벤트 기반 데이터 처리 (Kafka, Kafka Connect)
- 배치 기반 데이터 처리 방식은 처리 단위의 앞쪽에 있는 데이터가 뒤쪽에 있는 데이터가 처리될 때까지 대기해야 한다는 특징을 가짐
- 따라서, 좌석 상태의 변화를 조금이라도 빠르게 유저에게 전달하기에는 부적합하기때문에 메시지 브로커 Kafka를 이용한 이벤트 기반 아키텍처 도입
- 해당 시스템에서 발생하는 이벤트들은 모두 DB 데이터 변경을 수반하기 때문에, DB에 쌓이는 로그를 Kafka Connect를 이용해 Kafka로 전달하는 CDC 플랫폼 도입, DB의 변경 데이터를 Kafka의 CDC 토픽에 쌓음