f-lab-edu / ticket-seller

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ticket-seller

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

요약

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

목표

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

목표가 아닌 것

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

중점사항

Common

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

Performance

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

계획

DDD 설계

image

서비스 구성도

image

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

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

image

About


Languages

Language:Java 81.7%Language:HTML 13.0%Language:CSS 5.3%