프로젝트 개요
report · 4 of 9 · 2 commits · 4ac6763ed3c7129498340256b86d945f2c4bede1..f7955c0cdbf8c7f2aedda266c0e587270a7ced1f

문서 보강은 진전이나 네트워크 권한 모델이 아직 위험하다.

HIGH 진행도 42% (+ 12pts) 2026. 4. 28. PM 5:15

프로젝트 예상 진행도

기준: 2026. 4. 28. PM 5:15
42 / 100

문서화 상태

Design
5/10
Technical
5/10
Spec
4/10
#네트워킹 #권한모델 #턴제 #문서화 #빌드산출물

YJ — 네트워크 턴제 보강 스냅샷

1. 주요 변경사항

2. 코드 품질 리뷰

가장 큰 위험은 “서버 권위”라는 문서 표현과 실제 코드가 다르다는 점이다. 현재 서버는 이동, 배치, 게임오버를 검증하지 않고 받은 패킷을 그대로 브로드캐스트한다. 특히 승패는 클라이언트가 S_GameOver를 만들어 서버에 보내고, 서버가 그대로 전파한다. 이는 정상 클라이언트끼리만 플레이한다는 가정에 의존하며, 버그나 변조 클라이언트 하나로 승패·턴·기물 위치가 깨진다. 서버가 현재 턴, 세션 팀, 기물 소유권, 이동 가능 좌표, 승리 조건을 소유하고 검증한 뒤 S_* 결과만 내려야 한다.

case PacketID.S_GameOver:
{
    SessionManager.Instance.Broadcast(segment);
}

패킷 구조도 정리 필요성이 크다. S_Login, S_GameOverC_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. 다음 권장사항

5. 문서화 상태

Design 점수는 5점이다. 코어 루프, 재미 요소, 맵 구조가 작성되어 방향은 보인다. 다만 작성 가이드 문구와 빈 섹션이 남아 있어 팀 기준 문서라기보다 작성 중인 초안에 가깝다.

Technical 점수는 5점이다. 네트워크 구조와 패킷 헤더 설명이 추가된 점은 좋다. 하지만 서버 권한 모델이 실제 코드와 불일치하고, TCP 스트림 처리·재접속·빌드 절차가 부족하다.

Spec 점수는 4점이다. 입력, 패킷, 맵, 콘텐츠 수량이 일부 정리됐지만 테스트 체크리스트로 쓰기에는 수치와 판정 기준이 부족하다. 포로 배치 제한, 승급, 입궁 승리 조건은 더 명확한 규칙표가 필요하다.

6. Backlog

리포트 타임라인

9개 스냅샷 · 최신순