프로젝트 개요
report · 9 of 9 · 1 commits · 86520b6e459c1637779e8d97f27a963cf9b43138..3b64a4eae15b5ded575b122a1bde700976e5c45f

로비와 룸 구조는 생겼지만 접속 흐름에 치명적 중복이 있다.

HIGH 진행도 34% ( -4pts) 2026. 5. 6. PM 5:55

프로젝트 예상 진행도

기준: 2026. 5. 6. PM 5:55
34 / 100

문서화 상태

Design
3/10
Technical
2/10
Spec
2/10
#네트워킹 #로비 #룸관리 #상태동기화 #문서부채

YJ — 로비 씬 및 룸 매칭 스냅샷

1. 주요 변경사항

2. 코드 품질 리뷰

방 단위 상태로 옮긴 방향 자체는 맞다. 이전 전역 turnMachinepiecePositions 는 두 게임이 동시에 열리는 순간 바로 깨지는 구조였고, 이번 변경은 그 문제를 인식했다는 점에서 전진이다. 다만 구현이 아직 위험하다. Program.csOnAcceptHandlerPacketHandler.HandleRoomRequest(session, 0) 로 자동 매칭을 수행한 직후 다시 RoomManager.Instance.FindRoom(1) ?? CreateRoom()room.Enter(session) 를 호출한다. 같은 세션이 두 번 입장할 수 있고, session.Room 이 마지막 방으로 덮이며, 이미 보낸 S_LoginroomId/teamId 와 실제 서버 상태가 어긋난다. 이 상태는 테스트가 아니라 첫 접속부터 재현 가능한 치명적 흐름 버그다.

패킷 계약도 정리되지 않았다. S_LoginIPacket 을 구현하지 않고 Write()byte[] 를 반환하는 반면, 다른 패킷은 ArraySegment<byte> 를 반환한다. 서버와 클라이언트의 Packet.cs 복사본도 같은 방식으로 수정되어 있어 지금은 우연히 Send 시그니처가 받아주는지에 의존한다. 개선하려면 S_Login : IPacket 으로 복원하고 Protocol, Read, Write 패턴을 다른 패킷과 동일하게 맞춰야 한다.

자료구조/복잡도 관점에서는 RoomManager.GetRoomList() 가 매 자동매칭마다 new List<GameRoom>(_rooms.Values) 를 만들고 선형 탐색한다. 현재 방 수가 작다면 성능 병목은 아니지만, 자동매칭 hot path 가 될 코드에서 불필요한 복사와 O(n) 탐색을 고정해 버린다. waitingRoomQueue 또는 HashSet/GameRoom 대기 목록을 별도로 유지하면 비용이 줄고 “1명 대기 중인 방” 이라는 도메인 상태도 명확해진다. 더 중요한 것은 GameRoom.SessionsPiecePositions 가 락 없이 변경된다는 점이다. 서버 수신 스레드가 병렬이면 리스트와 딕셔너리 상태가 찢어진다.

3. 진행도 평가

이번 커밋은 “로비/룸” 이라는 필요한 축을 건드렸다는 점에서 의미 있는 전진이다. 그러나 빌드 설정에는 GameScene.unity 만 남아 있고 LobbyScene.unity 가 포함되지 않아 실제 시작 흐름이 확정되지 않았다. 로비 UI 버튼도 m_OnClick 이 비어 있어 화면 구성과 기능 연결 사이의 간극이 크다.

진행도는 약 34%로 본다. 핵심 게임 루프 일부와 서버 구조의 초안은 있으나, 접속·매칭·씬 전환·턴 동기화가 안정적으로 이어지는 2인 플레이 빌드까지는 아직 거리가 있다. 특히 네트워킹 부채가 누적되는 속도가 빠르므로 다음 커밋은 기능 추가보다 흐름 정정이 우선이다.

4. 다음 권장사항

5. 문서화 상태

design 점수는 3점이다. 게임 콘셉트와 장기류 룰의 윤곽은 있으나, 로비/매칭/대전 흐름이 플레이어 경험 관점에서 문서화되어 있지 않다.

technical 점수는 2점이다. 이번 커밋의 핵심은 커스텀 TCP 서버와 룸 상태인데, 권한 모델, 패킷 표, 세션 생명주기, 재접속 정책이 문서에 없다. 신규 인원이 코드를 읽지 않고 구조를 이해하기 어렵다.

spec 점수는 2점이다. 씬 구성, 버튼 동작, 방 생성/입장 실패 조건, 게임 시작 조건 같은 테스트 가능한 사양이 없다. _sample/docs 수준과 비교하면 체크리스트로 쓸 수 있는 구체성이 부족하다.

6. Backlog

리포트 타임라인

9개 스냅샷 · 최신순