피드로 돌아가기
I Built a Real-Time Multiplayer Bingo Engine with Next.js, Supabase, and Ably
Dev.toDev.to
Backend

Deterministic PRNG와 Atomic Transaction 기반 실시간 빙고 엔진 설계

I Built a Real-Time Multiplayer Bingo Engine with Next.js, Supabase, and Ably

Forrest Miller2026년 4월 10일3intermediate

Context

다수 사용자가 동시에 참여하는 실시간 빙고 게임에서 승자 결정의 원자성 확보와 클라이언트 간 보드 상태 동기화가 핵심 과제임. 특히 지연 참여자의 보드 복구와 동시성 제어를 위한 효율적인 상태 관리 구조가 필요함.

Technical Solution

  • Supabase RPC의 claim_and_process 함수를 통한 단일 Database Transaction 처리로 동시 Bingo Claim 상황에서의 원자적 승자 결정 구현
  • FNV-1a 해시와 Mulberry32 PRNG를 결합한 Seeded Randomness 설계로 DB 저장 없이 Player ID 기반의 결정론적 보드 생성 및 복구 실현
  • Ably Pub/Sub 기반의 Event-Driven 아키텍처를 구축하여 Claim, Bingo 등 실시간 게임 이벤트를 클라이언트에 즉시 전파
  • Gemini SSE 스트리밍과 Replicate FLUX Schnell 모델의 병렬 처리를 통한 AI 기반 카드 및 배경 이미지의 고속 생성 파이프라인 구축
  • DB를 Single Source of Truth로 설정하고 Ably 이벤트를 단순 알림으로 활용하며, 재접속 시 fetchGameState를 통한 상태 Reconciliation 수행

1. 동시성 제어가 필수적인 승패 결정 로직은 Application 레벨이 아닌 DB Transaction(RPC 등)에서 원자적으로 처리할 것

2. 정적 데이터의 반복 생성이 필요한 경우 Seed 기반 PRNG를 도입하여 서버 저장 공간을 최적화할 것

3. 실시간 이벤트 전송 서비스(Ably 등) 도입 시, 이벤트 유실에 대비한 Full State Sync API를 반드시 병행 설계할 것

원문 읽기