Quick Reference
backfill은 비어 있는 seat를 match rule에 맞는 새 player로 채우는 매치메이킹 절차이고, late join은 이미 진행 중인 match에 player를 입장시키는 gameplay 정책입니다. 둘은 함께 쓰일 수 있지만 같은 말이 아닙니다. 먼저 현재 phase에 합류를 허용하는지 결정한 뒤, backfill로 player를 찾고, 승인된 player에게 현재 world의 join snapshot을 보냅니다.
| 판단 | backfill | late join |
|---|---|---|
| 핵심 질문 | 누구를 빈 seat에 배정할까 | 지금 들어와도 게임 규칙이 성립하는가 |
| 기준 data | skill, region, party, team balance | match phase, 남은 시간, 관전·부활 규칙 |
| 성공 결과 | reservation 또는 admission grant | spawn 위치와 현재 state를 가진 active player |
| 막아야 할 일 | 같은 seat에 두 명 배정 | 과거 packet만 보고 현재를 추측 |
round가 시작된 직후, 마지막 round, 랭크전처럼 중도 합류가 공정성을 깨는 구간은 backfill을 시작하지 않거나 spectator만 허용합니다. 빈 자리라는 사실만으로 합류 가능하다고 판단하지 않습니다.
입장시키는 흐름
seat open
-> phase와 team-balance 정책 확인
-> backfill ticket에 현재 player·region·role 조건 기록
-> 후보에게 짧은 admission reservation 발급
-> server가 reservation을 한 번만 소비
-> join snapshot + match phase + entity revision 전송
-> client 준비 확인 뒤 active 전환join snapshot에는 현재 match phase, 남은 시간, score, team 구성, 새 player가 볼 entity, 각 entity의 state revision이 들어갑니다. 이전 packet stream을 처음부터 재생하는 방식은 network 순서와 오래된 state에 의존하게 됩니다. 새 client는 하나의 일관된 baseline을 받은 뒤 delta snapshot을 이어받아야 합니다.
reservation에는 match ID, seat 또는 team, 만료 시각, player ID를 묶습니다. client가 connect했다고 바로 seat를 소비하지 말고 server가 인증한 admission request에서 원자적으로 소비합니다. 그래야 retry, 두 기기 연결, 늦은 connect가 같은 seat를 차지하지 않습니다.
현재 match 조건을 반영하기
backfill ticket에는 시작 당시 조건만 넣지 않습니다. 이미 있는 player의 team, 남은 role, region policy, 현재 phase처럼 매치가 진행되며 달라지는 조건을 포함해야 합니다. team A만 이탈했는데 아무 후보나 넣으면 team balance가 무너질 수 있습니다. backfill 결과를 받은 시점에도 seat가 아직 비어 있는지와 phase가 여전히 허용되는지를 다시 확인합니다.
late join player가 즉시 전투에 참여할지, 관전 후 다음 round에 spawn할지는 game mode의 계약입니다. 즉시 spawn한다면 spawn 보호, loadout, invulnerability 같은 서버 rule을 snapshot과 별도로 authoritative하게 적용합니다. client가 받은 UI state만 보고 스스로 active라고 판단하게 두면 안 됩니다.
자주 틀리는 부분
backfill ticket을 한 번 만들고 match 종료까지 유지하면, 이미 시작 금지 phase가 된 match에 player가 배정될 수 있습니다. seat open, phase 변경, match 종료 때마다 ticket을 갱신하거나 취소하고, 입장 직전에도 다시 검증합니다.
또한 reconnect를 backfill로 처리하지 않습니다. 원래 player가 reconnect grace 안에 있다면 기존 seat와 identity를 회복시키고, grace가 지난 뒤에만 seat를 열어 새 player를 찾습니다. 두 경로를 섞으면 같은 account와 새 candidate가 한 match에 공존할 수 있습니다.
참고 링크
2 sources