피드로 돌아가기
How to Build a Multiplayer Lobby in Unity with Socket.IO
Dev.toDev.to
Mobile

Socket.IO 기반 Unity 멀티플레이어 로비의 프로덕션 설계 전략

How to Build a Multiplayer Lobby in Unity with Socket.IO

Magithar Sridhar2026년 4월 9일12intermediate

Context

단순 연결을 넘어 플레이어 중도 이탈 및 호스트 연결 끊김 대응이 필수적인 환경. 모바일 기기의 화면 잠금으로 인한 세션 상실 문제 빈번. 네트워크 로직과 UI 상태가 섞인 스파게티 코드 구조의 한계.

Technical Solution

  • 네트워크(LobbyNetworkManager), 상태(LobbyStateStore), 뷰(LobbyUIController)를 분리한 3계층 아키텍처 설계
  • 이벤트 충돌 방지를 위해 루트 소켓 대신 /lobby 전용 NamespaceSocket 사용 방식
  • WebGL 빌드 시 IL2CPP의 필드 제거를 방지하는 [Preserve] 및 [JsonProperty] 속성 적용 전략
  • 데이터 중복 수신을 방지하기 위해 room_state.version 값을 비교하여 상태를 갱신하는 버전 관리 로직
  • 네트워크 순수 상태와 UI를 분리하여 StateStore의 C# 이벤트만 구독하는 단방향 데이터 흐름 구조
  • PlayerPrefs를 통한 세션 저장 및 5초의 재접속 유예 시간을 통한 세션 복구 메커니즘

Key Takeaway

네트워크 전송 계층과 비즈니스 상태 계층을 엄격히 분리하여 예측 불가능한 서버 이벤트 상황에서도 UI 일관성을 유지하는 설계 원칙.


WebGL 빌드 환경에서 JSON 역직렬화 데이터 유실을 막기 위해 반드시 [Preserve] 어트리뷰트를 사용할 것

원문 읽기