YJ — 네트워크 턴제 보강 스냅샷
1. 주요 변경사항
PlayerController에 팀 ID, 턴 입력 차단, 포로 배치 패킷 송신, 서버 이동/배치 반영, 게임오버 송신 경로가 추가됐다.- 클라이언트와 서버 양쪽에
C_Drop,S_Login,S_GameOver패킷 및 핸들러가 추가됐다. - 서버는 접속 순서 기반 팀 배정과 Move/Drop 브로드캐스트를 시작했다.
docs/gdd.md,docs/tdd.md에 실제 설계 내용이 대거 추가되어 placeholder 수준에서는 일부 벗어났다.BuildTest,bin,obj산출물이 다시 변경 diff에 포함됐다. 이 문제는 아직 해결되지 않았다.
2. 코드 품질 리뷰
가장 큰 위험은 “서버 권위”라는 문서 표현과 실제 코드가 다르다는 점이다. 현재 서버는 이동, 배치, 게임오버를 검증하지 않고 받은 패킷을 그대로 브로드캐스트한다. 특히 승패는 클라이언트가 S_GameOver를 만들어 서버에 보내고, 서버가 그대로 전파한다. 이는 정상 클라이언트끼리만 플레이한다는 가정에 의존하며, 버그나 변조 클라이언트 하나로 승패·턴·기물 위치가 깨진다. 서버가 현재 턴, 세션 팀, 기물 소유권, 이동 가능 좌표, 승리 조건을 소유하고 검증한 뒤 S_* 결과만 내려야 한다.
case PacketID.S_GameOver:
{
SessionManager.Instance.Broadcast(segment);
}
패킷 구조도 정리 필요성이 크다. S_Login, S_GameOver가 C_Drop 내부 중첩 클래스로 들어가고 using static C_Drop로 꺼내 쓰는 방식은 의도가 드러나지 않는다. 또한 서버 응답에도 C_Move, C_Drop을 그대로 사용해 S_Move, S_Drop enum이 사실상 죽어 있다. 지금은 우연히 맞아도 다음 패킷 추가 시 클라이언트와 서버 정의가 쉽게 갈라진다. 공용 패킷 프로젝트나 명확한 스키마 파일로 단일 출처를 만들어야 한다.
Unity 쪽에서는 PlayerController가 입력, 룰 판정, 네트워크 송신, 동기화 수신, 결과 UI까지 모두 가진다. 왜 문제냐면 네트워크 버그가 룰 버그인지 UI 버그인지 분리해서 재현하기 어렵다. TurnService, BoardRuleService, NetworkClient, ResultPresenter 정도로 책임을 나누고, FindObjectOfType/FindObjectsOfType 호출은 초기 캐싱 또는 명시 참조로 바꾸는 편이 좋다.
3. 진행도 평가
이전 대비 기능 전진은 분명하다. 포로 배치와 턴 제한, 승리 메시지 전달, 팀 할당의 골격이 생겼고 문서도 빈 문서에서 기획·기술 설명이 있는 문서로 올라왔다. 이 부분은 좋은 진전이다.
다만 현재 진척은 “플레이 가능한 실험”에 가깝고, 안정적인 멀티플레이 구현으로 보기에는 이르다. TCP 프레이밍 부재, 서버 검증 부재, 빌드 산출물 커밋, 단일 씬 구조가 동시에 남아 있다. 완성도는 약 42%로 판단한다. 다음 단계는 기능 추가보다 네트워크 신뢰 경계 확정이 우선이다.
4. 다음 권장사항
- 서버에서 턴·팀·기물 소유권·승리 조건을 검증하도록 권한 모델을 재정의한다.
- TCP 수신 버퍼를
Size헤더 기반 누적 버퍼와 패킷 프레이밍 처리로 교체한다. - Move/Drop/Login/GameOver 패킷 방향성과 중첩 클래스 구조를 정리한다.
BuildTest,bin,obj산출물을 제거하고.gitignore로 재발을 막는다.PlayerController의 입력·룰·네트워크 송신·결과 UI 책임을 분리한다.- GDD/TDD의 작성 가이드와 빈 섹션을 제거하고 테스트 가능한 체크리스트로 바꾼다.
5. 문서화 상태
Design 점수는 5점이다. 코어 루프, 재미 요소, 맵 구조가 작성되어 방향은 보인다. 다만 작성 가이드 문구와 빈 섹션이 남아 있어 팀 기준 문서라기보다 작성 중인 초안에 가깝다.
Technical 점수는 5점이다. 네트워크 구조와 패킷 헤더 설명이 추가된 점은 좋다. 하지만 서버 권한 모델이 실제 코드와 불일치하고, TCP 스트림 처리·재접속·빌드 절차가 부족하다.
Spec 점수는 4점이다. 입력, 패킷, 맵, 콘텐츠 수량이 일부 정리됐지만 테스트 체크리스트로 쓰기에는 수치와 판정 기준이 부족하다. 포로 배치 제한, 승급, 입궁 승리 조건은 더 명확한 규칙표가 필요하다.
6. Backlog
- 커스텀 네트워크 스택의 권한 모델·프로토콜 사양 부재가 계속 남아 있다.
- 클라이언트가
S_GameOver를 보내 승패를 조작할 수 있는 구조다. BuildTest, 서버bin/obj산출물이 저장소에 포함되어 diff 품질을 해친다.- GDD/TDD는 개선됐지만 작성 가이드와 미완성 템플릿이 아직 남아 있다.
- 매칭/대기실/인게임 씬 분리 없이 단일
Game.unity에 의존한다. - 포로 재배치 금지 규칙은 룰 출처와 의도를 문서로 재확인해야 한다.
C_/S_패킷 명명과 실제 송수신 방향이 맞지 않는다.concept.md코드블록 종료 문제는 이번 변경에서 확인된 해결 근거가 없다.