HANPAN — 멀티플레이 안정화 스냅샷
1. 주요 변경사항
BootManager,LobbyUI,RoomUI전반에await이후 오브젝트 파괴 방어가 추가됐다. 씬 전환 중 NullReference를 줄이려는 방향은 적절하다.SessionManager가 잔존 세션 정리, ready 초기화, NGO disconnect suppress를 처리하도록 보강됐다.NetworkSceneTransition은 이전 게임 씬이 남은 경우 NGO 언로드와 plain 언로드를 나눠 처리하도록 확장됐다.BlackAndWhiteController는 이벤트 중복 구독을 방지하고, 라운드 해결 전 플레이어 상태 부족을 방어한다.BlackAndWhiteGameUI는 로컬PlayerState바인딩 무한 대기를 10초 타임아웃으로 제한했다.
2. 코드 품질 리뷰
이번 변경은 실제 플레이 중 터지는 재입장·복귀 계열 버그를 직접 겨냥하고 있어 문제 인식은 정확하다. 특히 이벤트 구독 전 -=를 먼저 호출한 점, OnAllClientsLoaded를 네트워크 종료 시 초기화한 점은 중복 호출 계열 버그를 줄이는 좋은 판단이다. 다만 현재 해결 방식은 여러 클래스에 생명주기 방어 분기가 흩어지는 형태다. GameManager.ReturnToMatching, GameFlowManager.ReturnToRoom, _loadedGameScene, _suppressNgoDisconnect, _isStarting이 각자 상태를 들고 있어, 다음 버그는 “어떤 플래그가 언제 소비됐는가”를 추적해야만 잡힌다.
가장 위험한 부분은 NetworkSceneTransition의 책임이 커지고 있다는 점이다. NGO가 아는 씬과 모르는 씬을 모두 처리하려는 의도는 이해되지만, plain 언로드 후 다시 NGO 로드를 이어붙이는 흐름은 네트워크 상태·Unity 씬 상태·세션 상태가 어긋나면 조용히 취소되거나 다음 시도에 잔존 상태를 남길 수 있다. 개선 방향은 Idle → InLobby → InRoom → LoadingGame → InGame → ReturningRoom 같은 명시적 상태머신으로 전환하고, 상태 진입/이탈 시 구독·씬·세션 정리를 한 곳에서 수행하는 것이다.
자료구조/복잡도 측면에서는 BlackAndWhiteGameUI.WaitAndBindLocalPlayerState()가 최대 10초 동안 매 프레임 FindObjectsByType<PlayerState>()로 전체 검색을 수행한다. 초기화 구간이라 치명적 hot path는 아니지만, 네트워크 스폰 타이밍이 늦어질수록 불필요한 검색과 할당 위험이 누적된다. PlayerState 스폰 이벤트, 로컬 소유자 캐시, 또는 OwnerClientId → PlayerState lookup을 두면 비용이 고정되고 바인딩 실패 원인도 더 명확해진다.
3. 진행도 평가
이전 대비 멀티플레이 안정성에는 분명한 전진이 있다. 방 생성, 입장, 게임 시작, 게임 종료 후 Room 복귀 같은 핵심 루프를 막던 런타임 오류를 실제로 줄이고 있다. 그러나 커밋 6개가 모두 fix 성격이며, 신규 기능 전진보다 생명주기 수습에 시간이 쓰이고 있다. 이는 risk_level: high로 봐야 한다.
현재 완성도는 “핵심 루프를 플레이 가능하게 만들고 있으나, 재현성 있는 안정화 체계는 아직 부족한 단계”다. 다음 단계에서 같은 영역의 버그가 계속 나오면 기능 추가보다 네트워크 상태 설계를 먼저 고정해야 한다. 진행 추정치는 43%가 적절하다.
4. 다음 권장사항
- 세션·NGO·씬 전환 생명주기를 단일 상태머신으로 통합해야 한다. 지금은 플래그가 분산되어 재입장 버그가 반복될 가능성이 높다.
- 2인 생성·입장·게임·Room 복귀 회귀 테스트 절차를 문서화해야 한다. 수정이 맞는지 판단할 재현 기준이 필요하다.
PlayerState바인딩은 매 프레임 전체 검색 대신 스폰 이벤트나 캐시 기반 lookup으로 바꿔야 한다.async/await후 파괴 오브젝트 방어는 공통 패턴으로 정리해야 한다. 같은 방어 코드가 UI마다 늘어나고 있다.- 기존 게임 씬 보존·plain 언로드 정책은 실패 로그 기준으로 검증해야 한다. 취소 경로가 실제 UX로 어떻게 보이는지 확인해야 한다.
5. 문서화 상태
design 문서는 이번 diff에서 갱신되지 않았다. 게임 컨셉과 흐름을 설명하는 자료가 일부 존재한다고 보더라도, 현재 멀티플레이 복귀 UX와 상태 전이가 설계 의도로 정리됐다는 근거는 없다.
technical 문서는 네트워크 권한 모델과 세션 흐름 설명이 반드시 필요하다. 코드에는 Network_Authority를 암시하는 주석이 있으나, 이번 변경처럼 NGO 종료와 세션 유지가 엇갈리는 케이스를 신규 인원이 문서만 보고 이해하기는 어렵다.
spec 문서는 여전히 약하다. 레벨/씬별 입력 매핑, UI 상태 전이, HUD 수치, 방 상태별 버튼 동작이 테스트 체크리스트로 쓸 만큼 구체화됐다는 증거가 없다. 이전 평가 기조를 유지한다.
6. Backlog
- 레벨/씬별 상세 사양서 입력 매핑·UI 상태 전이·HUD 수치 부재가 남아 있다. 이번 커밋은 코드 안정화 중심이며 문서 보강은 확인되지 않는다.
Game_01_BlackAndWhite씬 생성물과 빌더 구조 문제도 해결 근거가 없다. 씬 파일 리뷰 비용은 계속 높은 상태다.01_LobbyUI 구성이 씬 파일에 강하게 묶인 문제도 남아 있다. 이번 변경은 런타임 방어이지 UI 구성 분리는 아니다.- Unity URP 템플릿 튜토리얼과 Mobile 렌더러 잔존 문제도 변경 대상에 포함되지 않았다. 제출 전 프로젝트 정리가 필요하다.