본문으로 건너뛰기
개인5종 게임 · 방별 Durable Object · 모바일 WebSocket

Gamebang — 서버 권위형 실시간 게임 공방

개인 설계·구현·배포

2026-07-01 — present

모바일 클라이언트는 행동만 요청하고 방별 Durable Object가 phase·turn·숨은 정보·재접속을 판정하는 5종 실시간 미니게임 서비스

시스템 아키텍처

Gamebang — 서버 권위형 실시간 게임 공방 architecture diagram

문제 해결 과정

1

클라이언트가 카드·턴·승패를 판정하면 조작과 참가자별 정보 누출 위험이 생김

해결 과정

방별 Durable Object가 상태 정본을 소유하고 phase·turn·행동을 검증한 뒤 참가자별 view를 투영

결과

클라이언트에는 자기 정보와 공개 상태만 전달

2

모바일 연결 끊김이 게임 상태 손실이나 방장 오판정으로 이어질 수 있음

해결 과정

연결과 player identity를 분리하고 재접속 여유·방 lifecycle·token 기반 복귀 경로를 서버에서 관리

결과

연결 복구 시 기존 서버 상태에서 허용 view를 재생성

합성 시나리오

실제 운영·개인 데이터 없이 코드의 상태 전이와 경계만 고정 fixture로 재현합니다.

연결이 끊겨도 서버 판정 유지
연결이 끊겨도 서버 판정 유지합성 시퀀스에서 클라이언트 행동을 서버가 검증하고, 끊김 뒤 유효한 reconnect token에 허용된 view만 다시 투영합니다.

프로젝트 설명

방 코드로 입장하는 모바일 웹과 Cloudflare Durable Object 기반 Room을 분리했습니다. Room은 게임별 순수 상태 머신에 행동을 전달하기 전에 phase·turn·권한을 검증하고, 각 참가자에게 허용된 player view만 투영합니다. 연결이 끊겨도 서버 상태를 정본으로 유지하고 유효한 reconnect token이 돌아오면 허용된 개인 view를 다시 제공합니다. 공개 포트폴리오에는 실제 방 코드·닉네임·전적과 비공개 저장소 내용을 포함하지 않습니다.

주요 내용

  • 5종 게임을 공통 GameDef·상태 머신 계약으로 등록
  • 방별 Durable Object가 phase·turn·host·행동 검증
  • 참가자별 player view로 숨은 정보 분리
  • CSP·보안 헤더·room lifecycle·재접속 경계를 테스트로 고정

기술 선택 근거

  • 방 단위 상태 정본에 Durable Object를 사용하고 게임 규칙은 순수 상태 머신으로 분리
  • playerView projection을 서버에서 수행해 참가자별 숨은 정보 경계를 유지

깨달은 점

  • 실시간 게임은 연결 상태와 게임 상태를 분리해야 재접속이 규칙 정본을 흔들지 않는다.
  • 공통 엔진은 게임별 규칙을 추상화하되 숨은 정보 projection은 서버 경계에 남겨야 한다.

기술 스택

TypeScriptReactWebSocketCloudflare WorkersDurable ObjectsVitest