Files
joke-app/docs/12-roadmap.md
EJClaw 6f462b8cb1 M8: 파티 게임 3종 합치기, 그림 맞히기도 게임 중 방 채팅 닫기
- 도블·그림 맞히기·마피아 브랜치 병합 (validate ctx 타입은 ValidateContext로 통일)
- 그림 맞히기에 ownChat 적용: 출제자 채팅 금지(§4), 정답이 방 채팅으로 새는 문제 차단
- '곧 나와요' 목록이 비면 숨김, 로드맵 M8 결과 기록

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 00:58:59 +09:00

8.4 KiB
Raw Blame History

12. 로드맵

각 마일스톤은 "완료 기준"을 모두 통과해야 끝난다. 마일스톤이 끝날 때마다 Gitea에 푸시하고, 큰 테스트(부하·장애 주입·E2E)는 푸시한 커밋에서 돌린다.

M0. 계획서 (현재)

  • docs/ 전체 작성 → Gitea 푸시.
  • 완료 기준: 모든 공통 문서 + 26개 게임 문서 존재, 사용자 확인 항목 정리.

M1. 플랫폼 뼈대 + 오목

  • 모노레포, 공용 타입/스키마, 엔진(RNG·러너·테스트 도구), SQLite·마이그레이션.
  • 게스트 로그인, 세션, /api/me, 닉네임 변경. (디스코드 로그인은 코드까지 작성, 실제 연결은 앱 정보 받은 뒤)
  • 방: 생성, 6자리 코드, 링크 입장, 자동 착석, 준비, 시작, 강퇴, 방장 이전, 관전, 채팅/반응, 한 판 더.
  • WS: 재접속, seq, 중복 방지, 속도 제한, 하트비트, 서버 재시작 복구.
  • 웹: 홈, 코드 입력, 대기실(코드/링크 복사, 공유, QR), 오목 화면, 결과, 계정, 글자 크기/다크 모드.
  • 완료 기준: 10-testing.md 3절 12개 시나리오 자동 테스트 통과, 오목 규칙 테스트 통과, E2E 1개 통과, 성능 예산 통과.

M1.5 관리자 사이트

  • 슈퍼어드민(디스코드 ID 고정)·어드민(디스코드 ID로 추가) 권한, 관리자 API, 관리자 화면(대시보드·게임·방·사이트·사용자·관리자·기록).
  • 게임 옵션 스키마로 설정 화면 자동 생성, 옵션 잠금, 사이트 설정(공지·점검·금지어·제한값).
  • 완료 기준: 14-admin.md 9절 테스트 통과, 관리자 화면 E2E 통과.

M2. 2인 전략 게임 + 안정성 검증

  • 체스, 바둑, 장기, 오셀로. 개인 시계(초읽기/증가), 무르기 요청, 무승부 제안, 기권.
  • 디스코드 로그인 실제 연결(앱 정보가 준비된 경우).
  • 첫 부하 테스트·장애 주입 테스트 + 보고서.
  • 테스트 서버 배포(위치가 정해진 경우).
  • 진행 결과(2026-10-04): 네 게임 완료(규칙 테스트 체스 40·장기 46·바둑 50·오셀로 31), 게임 공통 E2E(PC 방장+휴대폰 친구), 접근성 axe 위반 0, 부하·장애 주입 통과(reports/load-20261004.md). 체스960은 chess.js가 지원하지 않아 후순위(M9). 디스코드 실제 연결·테스트 서버 배포는 사용자 정보 대기.

M3. 카드 게임 기반 + 섯다·포커

  • 공용 카드 컴포넌트(트럼프·화투 SVG 직접 제작), 베팅 엔진(한국식/노리밋), 사이드 팟.
  • 섯다 전 모드, 포커 전 모드.
  • 공정성 확인(시드 해시 공개) 기능.
  • 진행 결과(2026-10-05): 섯다(2장·3장, 땡잡이·암행어사·구사 재경기, 사이드 팟)와 포커 7개 모드(홀덤·오마하·7포커·하이로우·바둑이·5카드 드로우·인디언) 규칙 + 화면 완료. 규칙 테스트 섯다 54·포커 52·족보 판정 24, 무작위 플레이 1,000판 이상(칩 총량 보존·비공개 카드 유출 없음), 카드 게임 E2E(PC 방장 + 휴대폰 2명, 섯다 1판·7포커 초이스부터 1판), 결과 화면 공정성 확인(SHA-256 씨앗 대조).

M4. 가족 게임

  • 윷놀이, 원카드(+색깔 카드 모드), 숫자 타일(루미큐브 방식), 다빈치 코드, 요트 다이스.
  • 진행 결과(2026-10-05): 다섯 게임 규칙 + 화면 완료. 규칙 테스트 윷놀이 33·원카드 53·숫자 타일 56·다빈치 코드 31·요트 36, 게임마다 무작위 플레이 1,000판(말·카드·타일 보존, 비공개 정보 유출 없음, 모든 상태에서 시간 초과 행동 합법). 윷놀이 팀전(짝수 인원) 검사를 위해 엔진에 playerCountError(options, count)를 추가하고 방 시작 시 확인. E2E: 윷놀이·요트 한 판 끝까지, 원카드 3인 60턴, 숫자 타일·다빈치 코드 여러 턴(PC 방장 + 휴대폰).

M5. 마작·고스톱

  • 리치 마작(4인, 3인), 점수 계산기 테스트(역·부 계산 사례 100개 이상), 초보 모드.
  • 고스톱/맞고.
  • 진행 결과(2026-10-05): 마작(4인 동풍전·반장전, 3인 산마, 초보 모드)·고스톱(맞고·3인·광팔기) 규칙 + 화면 완료. 마작 점수 계산 테스트 161(14판 × 20110부 표 전체, 만관~더블 역만, 손패 계산 사례 약 60) + 규칙 77, 고스톱 규칙 58. 게임마다 무작위 플레이 1,000판(패·점수 보존, 비공개 정보 유출 없음, 시간 초과 행동 합법). 마작 울기 창은 남은 시간을 공개하지 않음(누가 울 수 있는지 드러나지 않게). 3인 최종 점수는 합 0 보정. E2E: 마작 4인(PC 방장 + 휴대폰 3명) 첫 국 끝까지 → 다음 국 시작, 맞고 한 판(고·스톱 포함).

M6. 뱅 + 실시간 반응 + 땅따먹기

  • 뱅(반응 창 처리), 할리갈리(서버 도착 순서 판정), 주사위 땅따먹기.
  • 진행 결과(2026-10-05): 세 게임 규칙 + 화면 완료. 규칙 테스트 뱅 62·할리갈리 46(+방 단위 서버 테스트)·땅따먹기 80, 게임마다 무작위 플레이 1,000판. 할리갈리는 같은 밀리초에 두 사람이 쳐도 서버에 먼저 도착한 사람만 인정(서버 테스트로 확인). 엔진에 선택 훅 timeoutNotBefore 추가(접속 끊긴 사람 차례에 타이머가 0ms로 반복 발동하던 문제 방지, 기존 게임 영향 없음). 뱅은 내 역할을 꾹 눌러야 보이게(옆 사람 훔쳐보기 방지). 땅따먹기 금액은 놀이용 포인트(P) 표기. E2E: 뱅 4인 10턴, 할리갈리 3인 24번 뒤집기(맞는 종·틀린 종), 땅따먹기 15라운드 한 판 끝까지.

M7. 보드게임카페 인기 게임

  • 달무티, 보석 상인, 쿼리도, 라스베가스, 바퀴벌레 포커, 구십구.
  • 진행 결과(2026-10-05): 여섯 게임 규칙 + 화면 완료. 규칙 테스트 달무티 34·보석 상인 42(+무작위 대국 파일)·벽 쌓기 길찾기(쿼리도 방식) 41· 라스베가스 32·바퀴벌레 포커 31·구십구 28, 게임마다 무작위 플레이 1,000판(구성물 보존, 비공개 정보 유출 없음, 시간 초과 행동 합법). 쿼리도는 상표 주의(§12)에 따라 화면 이름을 '벽 쌓기 길찾기'로 표시. 보석 상인 카드 수치는 splendor/cards.ts에 따로 두어 교체 가능. E2E: 달무티 4인 1라운드 → 세금 교환 → 2라운드, 보석 상인 10점 한 판, 벽 쌓기 길찾기 한 판(길 막는 벽 거절 확인), 라스베가스 3라운드 한 판, 바퀴벌레 포커 3인 한 판, 구십구 3인 한 판(PC 방장 + 휴대폰). 사용자 결정 대기: '바퀴벌레 포커'·'구십구' 이름 유지 여부, 보석 상인 원작 카드 수치 유지 여부(각 문서 §12).

M8. 파티 게임

  • 도블, 그림 맞히기(붓질 스트리밍), 마피아(채팅 채널).
  • 진행 결과(2026-10-06): 세 게임 규칙 + 화면 완료. 규칙 테스트 도블 47(+방 단위 4·그림 1)·그림 맞히기 34(+방 단위 4)·마피아 43(+방 단위 1), 게임마다 무작위 플레이 1,000판(구성물·점수 보존, 비공개 정보 유출 없음, 시간 초과 행동 합법). 엔진 선택 훅 추가(기존 게임 영향 없음): validate의 ctx.now(채팅·추측 속도 제한), 붓질 스트리밍용 isStreamAction·syncView (그림 획은 view 재계산 없이 stream 메시지로 중계, 1초마다 묶어 저장, 재접속 시 그림 전체 전송), disconnectGraceMs, ownChat(게임 진행 중 방 채팅·빠른 반응을 닫음 — 마피아의 밤 대화, 그림 맞히기의 정답이 방 채팅으로 새지 않게). E2E: 도블 탑 쌓기 한 판(정답 53번·오답 잠금), 그림 맞히기 두 턴(실제 마우스 획 전달·오답·아까워요·정답) → 결과, 마피아 4인(PC 방장 + 휴대폰 3명) 밤 행동 → 아침 발표 → 투표·반론·찬반 → 시민 팀 승리(마피아·죽은 사람 채팅이 다른 화면에 안 보임).

M9. 다듬기

  • PWA(홈 화면 추가, 오프라인 안내), 게임 기록 다시 보기, 게임별 튜토리얼 강화.
  • 2차 부하 테스트, 필요 시 방 단위 다중 프로세스 분산 검토.
  • (선택) 혼자 연습용 간단한 컴퓨터 상대.
  • 체스960(자체 캐슬링 구현 + perft 검증).

순서 원칙

  • 플랫폼(M1)의 안정성 기능이 먼저다. 게임은 그 위에 하나씩 얹는다.
  • 각 게임은 "규칙 모듈 + 테스트 통과 → 화면 → E2E 한 판" 순서로 완성하고 다음 게임으로 간다.
  • 진행 중 사용자가 순서를 바꾸고 싶으면 이 문서를 먼저 고친다.