Playball Logo

Command Palette

Search for a command to run...

목차 열기

티켓팅 플로우

티켓팅은 대기열 진입부터 결제 완료까지 6개 Phase로 구성됩니다. 각 단계는 보안 토큰과 분산 락으로 보호되어 대기열 우회, 좌석 중복 선점, 미결제 점유를 원천 차단합니다.


단계별 핵심 메커니즘

Phase핵심 기술목적
1. 대기열Redis Sorted Set순서 보장 + 대량 트래픽 흡수
2. 폴링동적 간격 (rank 기반)서버 부하 최소화
3. Seat 진입Admission Token (TTL 30초)대기열 우회 차단
4. 추천선호도 점수 (max 70점)사용자 취향 반영
5. 배정분산 락 + 연석/준연석 알고리즘동시성 제어 + 연석 보장
6. 주문/결제Hold 검증 (TTL 5분)좌석 점유 증명

Phase 1 — 대기열 진입

사용자가 대기열에 진입하면 Redis Sorted Set에 타임스탬프 기반으로 순서가 기록됩니다. 온보딩에서 입력된 좌석 선호도도 함께 seat:preference 키로 저장됩니다 (TTL 900초).

Phase 2 — 동적 폴링

클라이언트는 자신의 순위(rank)에 따라 폴링 간격을 조절합니다.

순위폴링 간격
rank ≤ 1001.5초
rank ≤ 10003초
rank > 10005초

스케줄러가 상위 사용자를 READY로 승격시키면 30초짜리 Admission Token을 발급합니다.

Phase 3 — Seat 진입

Seat 서비스는 Admission Token을 검증하고 즉시 소멸시킵니다. 일회용 토큰으로 재사용 및 대기열 우회를 원천 차단합니다.

Phase 4~5 — 추천 및 배정

추천 블록을 계산하고, 사용자가 블록을 선택하면 분산 락을 걸고 연석 탐색 알고리즘을 실행합니다. 배정된 좌석은 5분간 Hold 됩니다.

Phase 6 — 주문 및 결제

Hold된 좌석을 검증하여 주문을 생성하고 결제를 처리합니다. 결제 수단은 카드, 가상계좌를 지원합니다.