YJ — 턴 시스템 확장 스냅샷
1. 주요 변경사항
- 턴 타이머와 타임아웃 횟수 적용이 추가됐다. 턴제 게임의 최소 진행 조건을 코드로 옮긴 점은 명확한 전진이다.
- 턴 상호작용과 턴 생명 차감 로직이
PlayerController.cs중심으로 확장됐다. 기능은 붙었지만 책임 집중도도 함께 커졌다. - 클라이언트·서버 양쪽 패킷 정의와 핸들러가 갱신됐고, 서버
Session.cs에도 턴 관련 처리가 추가됐다. BuildTest/, 서버bin/,obj/산출물이 대량 삭제되고.gitignore가 갱신됐다. 저장소 위생 측면에서는 이번 변경의 가장 좋은 성과다.
2. 코드 품질 리뷰
이번 커밋은 게임 루프 측면에서 의미 있는 기능을 추가했다. 턴 제한 시간, 타임아웃, 생명 차감은 대전 보드게임에서 핵심 규칙이므로 구현 우선순위가 맞다. 다만 변경량이 PlayerController.cs에 크게 몰려 있다. 플레이어 입력, 말 선택, 포로 재배치, 턴 규칙, 네트워크 송수신이 한 MonoBehaviour 안에서 계속 커지면 재현 가능한 테스트가 어려워지고, 버그가 “입력 문제인지 룰 문제인지 패킷 문제인지” 분리되지 않는다.
개선 방향은 분명하다. PlayerController는 입력과 화면 반응만 맡기고, 턴 상태와 승패 판정은 순수 C# 클래스인 TurnStateMachine 또는 GameRuleService로 분리해야 한다. 시간 제한, 타임아웃 허용 횟수, 생명 차감량 같은 값은 매직 넘버로 흩어지면 밸런싱이 불가능하므로 ScriptableObject 설정으로 빼는 것이 좋다. Unity 씬에 종속되지 않는 룰 테스트를 먼저 만들면 네트워크 디버깅 비용도 크게 줄어든다.
가장 큰 위험은 여전히 네트워크 권한 모델이다. 서버가 승패, 생명, 타임아웃의 최종 주인이 아니라면 클라이언트가 보낸 패킷 하나로 결과를 바꿀 수 있다. 커스텀 소켓 구조를 계속 쓸 수는 있지만, 그 경우에는 Mirror/NGO가 대신 제공해주던 권한 경계, RPC 방향, 검증 규칙을 직접 문서화하고 코드에 강제해야 한다.
3. 진행도 평가
진행도는 37%로 본다. 턴제 핵심 루프가 조금씩 형태를 갖추고 있고, 빌드 산출물을 저장소에서 제거한 것은 분명한 개선이다. 하지만 아직 “공정한 2인 대전이 안정적으로 반복 가능하다”고 보기에는 이르다.
남은 리스크는 기능 수보다 구조 쪽에 있다. 지금 네트워크와 룰 판정이 느슨하게 결합된 상태로 기능을 계속 얹으면, 이후 버그는 대부분 런타임에서만 드러난다. 이번 단계에서 서버 권위와 룰 테스트를 잡지 않으면 다음 2주 비용이 급격히 오른다.
4. 다음 권장사항
- 승패·턴 생명·타임아웃 판정을 서버 권위로 통합하고 클라이언트 입력 검증을 넣어야 한다.
Packet.cs의C_/S_방향과 직렬화 스키마를 양쪽 프로젝트에서 같은 기준으로 정의해야 한다.PlayerController의 턴·포로·입력·네트워크 책임을 분리하고 밸런스 값을 상수화해야 한다.- GDD/TDD placeholder를 실제 시스템·규칙·네트워크 설계로 대체해야 한다.
- 매칭·대기실·인게임 씬 전환 흐름과 재접속 기준을 씬 단위로 분리해야 한다.
5. 문서화 상태
design은 2점이다. 게임의 큰 방향은 추정 가능하지만, 코어 루프와 턴제 규칙을 왜 그렇게 선택했는지 설명하는 문서가 부족하다. 현재 수준은 팀원이 같은 판단 기준으로 기능을 확장하기 어렵다.
technical은 1점이다. 커스텀 네트워크 스택을 쓰고 있는데 권한 모델, 패킷 방향, 서버 검증 기준이 문서화돼 있지 않다. 이 상태는 신규 합류자가 코드를 읽어도 “무엇을 믿어도 되는지” 판단하기 어렵다.
spec은 1점이다. GDD/TDD placeholder와 씬 구성 미정 상태가 계속 남아 있다. _sample/docs 수준의 테스트 가능한 사양서와 비교하면, 입력·상태·결과 매핑과 밸런스 수치표가 거의 비어 있는 단계다.
6. Backlog
- 커스텀 네트워크 스택의 권한 모델·프로토콜 사양 부재는 여전히 핵심 리스크다.
- 서버가
S_GameOver를 클라이언트 입력으로 수용할 수 있는 구조는 반드시 재검증해야 한다. - 패킷 타입명의
C_/S_의미와 실제 송수신 방향 불일치는 다음 네트워크 작업 전에 정리해야 한다. - GDD/TDD placeholder, 단일 씬 구조, 포로 재배치 룰 출처 문제는 아직 남아 있다.
concept.md의 닫히지 않은 코드블록도 문서 신뢰도를 떨어뜨리는 잔여 이슈다.
7. 이전 Backlog 해결
- BuildTest 실행 파일과 런타임 DLL이 저장소에 포함됨: 이번 diff에서
BuildTest/와 서버bin/,obj/산출물이 대량 삭제됐고.gitignore도 갱신됐다. 저장소에 빌드 결과물을 커밋하던 문제는 이번 범위에서 해결된 것으로 판단한다.