match authority만 score event를 제출하고, client 누적 점수는 최종 정본이 아닙니다.
실시간 게임
리더보드 설계
현재 순위만 맞는 것으로는 부족합니다. 동점·점수 정정·시즌 마감 뒤에도 같은 board version을 재현할 수 있도록 점수 원장과 읽기 모델을 나눕니다.
검증된 score event를 멱등 원장에 기록하고 동점은 점수→도달 시각→player ID로 결정합니다. 시즌 보상은 correction과 projection 대사가 끝난 board version snapshot으로 확정합니다.
빠른 순위와 재현 가능한 경쟁 결과를 함께 만든다
검색 캐시가 최종 예약 권한이 아니듯, rank cache도 보상·분쟁의 정본이 아닙니다. 실시간 화면의 freshness와 시즌 보상의 정확성을 다른 경로와 상태로 설계합니다.
Top N, 내 rank, 내 주변 K명을 board version과 freshness로 반환합니다.
score 뒤 first-reached time과 player id로 재현 가능한 tie-breaker를 둡니다.
reset pointer, immutable snapshot, correction을 분리해 winner를 재현합니다.
이벤트 원장과 빠른 rank 모델의 책임을 분리한다
board_version, computed_at, freshness_seconds를 반환합니다. Top N cache와 글로벌 merge가 늦으면 last-known-good 여부를 표시하고, reward는 승인된 snapshot 밖의 잠정 rank로 지급하지 않습니다.동점·시즌 마감·점수 정정 뒤에도 같은 순위를 어떻게 재현할 것인가?
score ledger + deterministic tie key + versioned reward snapshot
검증된 경기 점수를 immutable event와 adjustment로 기록하고 score·reached_at·player_id 순서로 tie를 고정합니다. 시즌 보상은 correction cutoff와 projection 대사 뒤의 board version snapshot으로 확정합니다.
선택 이유
- 같은 원장을 replay하면 shard와 무관하게 같은 동점 순서를 만듭니다.
- 부정 점수 정정을 과거 overwrite 없이 설명할 수 있습니다.
- 시즌 reset과 보상 지급을 명시적 version 경계로 운영합니다.
현재 score row와 단일 sorted set을 직접 수정
중복·역순·correction 근거가 사라지고 시즌 보상 시점의 순위를 다시 재현할 수 없습니다.
감수한 단점
- tie key와 board version을 모든 projection에 동일하게 적용해야 합니다.
- hot board shard merge는 신선도와 global rank 비용을 만듭니다.
- 지급 뒤 correction은 보상·회수 운영 case가 필요합니다.
점수를 한 번 적용하고, 순위는 버전과 함께 읽는다
match authority가 event id·sequence·ruleset을 만들고 workload identity로 제출합니다.
gateway가 hash·season·match를 검사한 뒤 durable event log에 수락합니다.
state가 duplicate·stale sequence를 판별하고 score와 tie key를 원자 전진합니다.
유효 score를 shard rank revision으로 반영하고 local Top M을 냅니다.
merge/cache가 Top N과 around-me를 제공하고 snapshot job이 winner를 대조합니다.
실시간 rank의 단순함과 hot board 확장성을 비교한다
단일 sorted set은 읽기가 단순하지만 hot board에서 한계가 옵니다. 점수 원장과 tie-break는 유지하고 Top N·around-me projection만 규모에 맞게 shard합니다.
| 선택 | 강점 | 주의점 | 적합한 경우 |
|---|---|---|---|
| 단일 sorted set | Top N·rank·around-me가 단순 | hot key와 memory/CPU 한계 | 작은 board·낮은 update |
| player-hash shard | write 분산과 격리 | global rank·Top N merge 필요 | 대형 이벤트·다지역 |
| local Top M merge | global Top N read fan-out 절감 | M 경계·shard 누락·staleness 운영 | Top N 화면 중심 |
| rank-on-read | 최신 rank를 계산 가능 | hot player 조회 비용 증가 | 낮은 read 또는 admin 조사 |
| materialized around-me | 모바일 화면이 빠름 | score 변동 invalidation 비용 | refresh 주기가 고정된 UX |
| async fraud adjustment | 수집 경로 지연·조사 격리 | 잠정 rank·correction을 설명해야 함 | 복잡한 anti-cheat |
점수, shard, cache, 시즌의 실패를 따로 복구한다
network 재전송이 같은 점수를 여러 번 올려 rank를 왜곡합니다.
늦은 이벤트가 이미 반영된 최신 score를 되돌리려 합니다.
이벤트 종료·influencer stream이 한 board shard의 P99와 lag를 올립니다.
global Top N이 한 shard의 revision을 빼고 계산됩니다.
종료된 시즌 또는 오래된 rank가 화면에 남습니다.
freshness_seconds와 mismatch를 봅니다.정상 유저가 제외되거나 cheater가 대량 노출됩니다.
화면 보드와 보상 cutoff가 서로 다른 version을 가리킵니다.
친구 보드에 비공개 프로필이 cache된 채 남습니다.
순위의 신선도, 공정성, 비용을 한 화면에서 본다
game server identity, match ownership, nonce·sequence 검증을 적용합니다. public profile projection만 rank model에 두고 IP·fingerprint·support note를 trace와 cache에서 배제합니다.
accepted/rejected, duplicate/stale sequence, shard queue age, revision gap, Top N freshness, tie diff, pending invalid rate, snapshot hash를 version별로 봅니다.
active member·tie key·replica·mutation rate, merge fan-out, friend join, event/archive, anti-cheat inference, season rebuild·support를 따로 계산합니다.
답변 구조 보기 5단계
- 시즌 점수 산식과 동점 순서를 하나의 결정적 규칙으로 고정한다.
- server-authoritative event ID와 player sequence로 중복·역순 입력을 차단한다.
- 원장을 정본, sorted set과 shard Top M을 versioned 읽기 모델로 둔다.
- correction은 immutable adjustment로 반영하고 시즌 reset은 새 board pointer로 전환한다.
- reward snapshot은 correction cutoff·watermark·projection 대사가 끝난 뒤 확정한다. 이번 선택: 멱등 점수 원장과 결정적 tie key를 사용하고 hot board는 versioned shard projection으로 제공한다. 깨지는 신호: 같은 원장에서 재구축한 순위가 다르거나 지급 snapshot 뒤 근거 없는 score overwrite가 발생한다. 다음 검증: 동점 burst·역순 event·시즌 전환·late correction을 replay해 Top N과 reward snapshot hash를 비교한다.
한 게임의 순위 규칙을 설명하고 시즌 correction·보상을 운영하기
점수 산식과 동점 규칙을 먼저 고정한 뒤 저장 구조를 답합니다.
- event ID·player sequence·tie key를 설명합니다.
- ledger와 sorted projection을 구분합니다.
- season pointer·correction cutoff·reward snapshot을 말합니다.
동점과 late correction을 replay해 board와 보상 hash를 비교합니다.
- event lag·rank p99·shard skew를 관측합니다.
- ledger와 projection의 Top N을 주기적으로 대사합니다.
- 시즌 전환과 지급 뒤 adjustment의 감사 경로를 검증합니다.
순위 자료구조와 서비스 계약은 공식 문서에서 확인한다
- Redis — Sorted sets: member/score와 rank·range 조회를 제공하는 sorted set 공식 문서.
- Redis — ZADD: member score 추가·갱신 옵션의 공식 명령 참조.
- Redis — ZRANK: sorted set member rank 조회 공식 명령 참조.
- Amazon DynamoDB — Condition expressions: 조건부 write의 공식 예시.
- Microsoft PlayFab — Leaderboards: leaderboard 정의·버전 기능 공식 문서.
- RFC 4122 — UUID URN Namespace: event identifier 형식 논의에 참고할 표준 문서.
늦은 이벤트와 정정 규칙을 비교합니다.
문의·정정
사실 오류·출처 정정은 문의·정정 페이지로 알려 주세요.