피드로 돌아가기
The GameIdentityRegistry Pattern — Bridging Mirror netId and Socket.IO playerId
Dev.toDev.to
Backend

Mirror netId와 Socket.IO playerId 간 상호 참조를 해결하는 Identity Bridge 패턴 구현

The GameIdentityRegistry Pattern — Bridging Mirror netId and Socket.IO playerId

Magithar Sridhar2026년 5월 3일5intermediate

Context

Mirror의 uint 기반 netId와 Socket.IO의 string 기반 playerId라는 서로 다른 식별자 체계로 인해 시스템 간 개체 참조 불가능한 상태 발생. 백엔드 이벤트 수신 시 해당 데이터를 게임 내 Mirror NetworkIdentity 객체에 매핑하기 위한 중간 변환 계층 부재.

Technical Solution

  • 양방향 조회를 위한 두 개의 Dictionary 기반 Static Lookup Table을 구축하여 O(1) 시간 복잡도로 ID 변환 수행
  • OnStartLocalPlayer → Command → ClientRpc로 이어지는 전파 체계를 통해 서버와 모든 클라이언트에 동일한 ID 매핑 데이터 동기화
  • NetworkServer.spawned와 NetworkClient.spawned를 순차적으로 검사하여 Dedicated Server, Host, Client 모든 역할에서 일관된 객체 참조 보장
  • Static 클래스 설계를 통한 MonoBehaviour 의존성 제거 및 전역 접근성 확보로 컴포넌트 간 결합도 감소
  • 세션 종료 및 예기치 못한 연결 끊김 시 명시적인 Clear() 호출을 통한 Stale Mapping 제거 및 메모리 누수 방지

- 서로 다른 ID 체계를 가진 두 시스템 통합 시 양방향 매핑 테이블(Identity Bridge) 도입 검토 - 네트워크 객체 생명주기와 매핑 데이터의 생명주기를 일치시키기 위한 명시적 Cleanup 로직 설계 - 전역 상태 관리 시 Singleton 패턴 대신 명시적 lifecycle 관리가 가능한 Static Registry 활용 고려 - 분산 환경에서 ID 매핑 데이터의 일관성을 위해 서버 주도형 전파(Rpc) 구조 채택

원문 읽기