Seven-Shards-ORIGIN — LAN 멀티룸 로비 스냅샷
1. 주요 변경사항
- UDP 브로드캐스트 기반
LanRoomDiscovery가 추가되어 LAN 방 목록을 자동 발견하는 흐름이 생겼다. LobbyReadyMessenger가 NGOCustomMessagingManager로 접속자 목록과 준비 상태를 동기화한다.MultiRoomCoordinator가 방 목록, 대기실, 준비완료, 게임 시작, 타이틀 복귀 UI를 런타임 생성한다.- 타이틀의 함께 하기 진입이
PlayerPrefs플래그를 통해 기존 협동 로비 대신 멀티룸 흐름으로 우회된다.
2. 코드 품질 리뷰
이번 변경은 실제 사용자 흐름을 크게 전진시켰다. 특히 클라이언트가 ConnectedClientsIds를 직접 신뢰하지 못하는 문제를 호스트 브로드캐스트 목록으로 해결한 판단은 좋다. NetworkObject 없이 로비 준비 상태를 맞추려는 선택도 대기실처럼 짧게 사는 화면에는 타당하다.
다만 MultiRoomCoordinator 750라인은 위험 신호다. 현재 한 클래스가 UI 생성, 입력 네비게이션, UDP discovery, NGO 콜백, 씬 로드, 연결 watchdog을 모두 가진다. 왜 문제냐면 재접속·퇴장·씬 전환 버그가 발생했을 때 원인이 UI 상태인지 네트워크 상태인지 분리해서 검증하기 어렵다. BrowserView, WaitingRoomView, LanLobbySessionController, LobbyNavigation 정도로 책임을 나누는 것이 맞다.
LanRoomDiscovery의 메시지 포맷도 취약하다.
static string Encode(LanRoomInfo r) =>
$"{r.roomName}|{r.port}|{r.players}|{r.maxPlayers}|{r.runSlotId}";
roomName이나 runSlotId에 구분자가 들어가면 파싱이 깨지고, 잘못된 패킷은 default 방으로 들어올 수 있다. LAN이라도 외부 패킷·구버전 클라이언트·부분 손상은 정상적으로 발생한다. 버전 필드, 길이 제한, 포트와 인원수 유효성 검증, JSON 또는 length-prefix 포맷으로 교체해야 한다.
3. 진행도 평가
진행도는 62%로 본다. LAN 방 생성·검색·참가·준비·게임 시작이라는 굵은 사용자 흐름이 들어왔기 때문에 기능 진척은 분명하다. 이전보다 플레이 가능한 멀티플레이 진입점에 가까워졌다.
반대로 리스크는 high다. 네트워킹 코드는 시간 순서와 생명주기가 핵심인데, 이번 구현은 정적 상태와 대형 coordinator에 의존한다. 지금 1일 정도 투자해 구조를 나누지 않으면 이후 2-4인 테스트에서 재현 어려운 버그가 누적될 가능성이 높다.
4. 다음 권장사항
MultiRoomCoordinator를 UI·입력·네트워크 세 책임으로 분리하라. 먼저 메서드 이동만 해도 디버깅 비용이 줄어든다.LanRoomDiscovery패킷에 버전, 검증, escaping을 추가하라. 잘못된 방은 표시하지 않는 것이 기준이다.LobbyReadyMessenger는 접속·퇴장·재접속 단위 테스트를 작성하라. 정적 맵 초기화 타이밍이 핵심이다.- LAN 2-4인 체크리스트를 복원하라. 방 생성, 참가 실패, 호스트 이탈, 씬 로드를 반드시 포함해야 한다.
- 멀티룸 로비 권한 모델과 메시지 프로토콜을 문서화하라. 서버 소유 상태와 클라이언트 요청을 명확히 나눠야 한다.
5. 문서화 상태
design은 5점이다. 이번 커밋은 사용자 흐름을 추가했지만, 멀티룸이 기존 협동 모드 경험에서 어떤 위치인지 설명하는 디자인 문서 갱신은 보이지 않는다.
technical은 3점이다. NGO 메시지명, ready map의 주인, host slot 동기화, UDP discovery의 수명주기가 코드에만 있다. 신규 인원이 문서만 보고 안전하게 수정할 수준이 아니다.
spec은 3점이다. LAN 로비의 성공·실패 상태, 버튼별 결과, 접속 인원 제한, 호스트 이탈 정책이 테스트 가능한 표로 정리되어 있지 않다. 삭제된 플레이테스트 체크리스트 문제도 계속 남아 있다.
6. Backlog
MultiRoomCoordinator책임 집중은 신규 고위험 부채다. 화면과 세션 제어를 분리해야 한다.- 플레이테스트 체크리스트 후속 위치가 아직 불명이다. LAN 테스트 추가 전 복원이 필요하다.
FinalBossEnemy2D단일 클래스 집중 문제는 이번 변경에서 다뤄지지 않았다.TrapFieldWest.unity의 Mesh fileID 셔플 문제도 실질 변경 식별성 개선 근거가 없다.Resources기반 UI·로케일 대량 로딩은 Addressable 전환 결정이 남아 있다.- UI Bootstrap/Driver/RootRefs 규약은 여전히 코드 주석과 룰에 치우쳐 있다.
LocalizedStrings누락 키 수집과 리포트 수단은 아직 확인되지 않는다.GameLocale변경 시 이미 표시된 텍스트 재갱신 문제도 남아 있다.- zh-Hans/zh-Hant/ja 폰트 대리 사용은 실제 글리프 누락 위험이 계속된다.