프로젝트 개요
report · 17 of 18 · 6 commits · c769551eef0e449c26368d77270e39628758d4bc..aa8a3b9d2e3be481bb4e29540763fe43054b357d

멀티플레이 복귀 버그를 줄였지만 상태 생명주기 부채가 크다.

HIGH 진행도 43% ( 0pts) 2026. 5. 6. PM 3:39

프로젝트 예상 진행도

기준: 2026. 5. 6. PM 3:39
43 / 100

문서화 상태

Design
4/10
Technical
5/10
Spec
3/10
#네트워킹 #씬전환 #세션관리 #기술부채 #문서화

HANPAN — 멀티플레이 안정화 스냅샷

1. 주요 변경사항

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. 다음 권장사항

5. 문서화 상태

design 문서는 이번 diff에서 갱신되지 않았다. 게임 컨셉과 흐름을 설명하는 자료가 일부 존재한다고 보더라도, 현재 멀티플레이 복귀 UX와 상태 전이가 설계 의도로 정리됐다는 근거는 없다.

technical 문서는 네트워크 권한 모델과 세션 흐름 설명이 반드시 필요하다. 코드에는 Network_Authority를 암시하는 주석이 있으나, 이번 변경처럼 NGO 종료와 세션 유지가 엇갈리는 케이스를 신규 인원이 문서만 보고 이해하기는 어렵다.

spec 문서는 여전히 약하다. 레벨/씬별 입력 매핑, UI 상태 전이, HUD 수치, 방 상태별 버튼 동작이 테스트 체크리스트로 쓸 만큼 구체화됐다는 증거가 없다. 이전 평가 기조를 유지한다.

6. Backlog

리포트 타임라인

18개 스냅샷 · 최신순
MED 1 commits 3D 보드 비주얼은 전진했으나 씬 직편집 부채가 계속 누적됨. 31% HIGH 6 commits 멀티플레이 복귀 버그를 줄였지만 상태 생명주기 부채가 크다. 43% HIGH 4 commits 복귀 버그는 완화됐지만 씬 전환 책임이 UI에 퍼졌다. 43% HIGH 8 commits Additive 씬 전환은 전진했으나 네트워크 복귀 흐름 위험이 크다. 42% HIGH 9 commits Matching 씬 구조는 전진했지만 대형 씬 커밋 리스크가 계속 크다. 42% HIGH 5 commits PlayerState 전환은 진전이나 Prefab 등록과 권한 검증이 아직 위험하다. 48% HIGH 55 commits 3D 보드와 UI는 전진했지만 씬·네트워크 부채가 커졌다. 46% HIGH 10 commits BlackAndWhite UI는 전진했지만 네트워크 표시 신뢰성이 흔들린다. 45% HIGH 8 commits UI 전진은 있으나 씬 생성물·바인딩 부채가 커졌다. 40% HIGH 22 commits BlackAndWhite 구현은 전진했지만 씬·네트워크 부채가 급증했다. 43% MED 2 commits 흑과백 모델링은 전진했으나 동시 제출 규칙이 흔들린다. 33% MED 3 commits M2 안정화와 사양화는 진전, 게임 본편은 아직 진입 전이다. 45% MED 3 commits 네트워크 문서화는 크게 전진했으나 구현 안전망은 아직 남아 있다. 43% HIGH 10 commits 로비 UI와 Relay WSS는 전진했으나 설계 부채가 누적 중이다. 32% HIGH 7 commits 로비 기능은 전진했지만 네트워크 설계 부채가 커졌다. 34% MED 4 commits NGO 뼈대·00_Boot·asmdef 계층 구축, 단일 클라이언트 로비 검증. 22% MED 3 commits Unity URP 프로젝트 부팅 및 WebGL 전환, 핵심 기술 리스크는 미해결. 18% LOW 3 commits Unity 개발 계획 문서 신규 작성, 컨셉 오탈자 정정. 코드 착수 전 단계. 15%