목차 열기
티켓팅 플로우
티켓팅은 대기열 진입부터 결제 완료까지 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 ≤ 100 | 1.5초 |
| rank ≤ 1000 | 3초 |
| rank > 1000 | 5초 |
스케줄러가 상위 사용자를 READY로 승격시키면 30초짜리 Admission Token을 발급합니다.
Phase 3 — Seat 진입
Seat 서비스는 Admission Token을 검증하고 즉시 소멸시킵니다. 일회용 토큰으로 재사용 및 대기열 우회를 원천 차단합니다.
Phase 4~5 — 추천 및 배정
추천 블록을 계산하고, 사용자가 블록을 선택하면 분산 락을 걸고 연석 탐색 알고리즘을 실행합니다. 배정된 좌석은 5분간 Hold 됩니다.
Phase 6 — 주문 및 결제
Hold된 좌석을 검증하여 주문을 생성하고 결제를 처리합니다. 결제 수단은 카드, 가상계좌를 지원합니다.