docs: 온라인 보드게임 사이트 계획서 (공통 14편 + 게임 26종)

- 개요, 조사(BGA·한국 인기 보드게임·UI/UX), 아키텍처, 실시간 프로토콜,
  안정성·보안, 계정, 로비·방, UI/UX, 데이터 모델, 게임 엔진, 테스트,
  배포·운영, 로드맵(M0~M9), 사용자 결정 항목
- 게임별 규칙·엔진 설계·UI·테스트 체크리스트 26종

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
EJClaw
2026-10-04 04:18:29 +09:00
parent b4a3c51201
commit f4d63e1544
43 changed files with 8948 additions and 0 deletions

43
docs/00-overview.md Normal file
View File

@@ -0,0 +1,43 @@
# 00. 프로젝트 개요
## 1. 한 줄 정의
광고 없이 가볍고 빠른, 한국 사람에게 익숙한 보드게임을 친구·가족과 바로 즐길 수 있는 온라인 보드게임 사이트.
## 2. 만드는 이유
- Board Game Arena(BGA)는 게임 수가 많고 완성도가 높지만, 한국에서 많이 하는 게임(섯다, 7포커, 고스톱, 장기, 윷놀이, 원카드 등)이 없거나 찾기 어렵다.
- 광고·배너·부가 기능이 많아 페이지가 무겁고, 처음 쓰는 사람이 방을 만들고 친구를 부르기까지 단계가 많다.
- 그래서 "링크 하나 보내면 바로 같이 하는" 단순하고 가벼운 사이트를 직접 만든다.
## 3. 최우선 원칙 (충돌 시 위에 있는 것이 이긴다)
1. **안정성** — 게임 도중 끊겨도 진행 상태가 사라지지 않는다. 서버가 재시작해도 방과 게임이 복구된다. 잘못된 수, 조작된 요청, 숨겨진 정보 유출이 구조적으로 불가능하다.
2. **실시간성** — 수를 두면 같은 방의 모든 사람 화면에 체감 지연 없이(목표 p95 150ms 이내, 같은 국내 망 기준) 반영된다.
3. **쉬움** — 어린아이부터 어르신까지 설명 없이 방을 만들고 들어갈 수 있다. 첫 화면에서 게임 시작까지 클릭 3번 이내.
4. **가벼움** — 첫 화면 JS 150KB(gzip) 이하, 광고·추적 스크립트 없음. 게임 화면 코드는 게임별로 나눠서 필요할 때만 받는다.
5. **게임 수** — 위 네 가지를 지키는 범위에서 게임을 늘린다.
## 4. 범위 (Scope)
- 게임: 사용자가 지정한 포커(여러 모드), 마작, 오목, 바둑, 체스, 뱅, 섯다(여러 모드) + 한국에서 인기 있는 보드게임. 전체 목록과 순서는 `games/README.md`.
- 인원: 각 게임의 원래 최소/최대 인원을 그대로 따른다.
- 계정: 디스코드 로그인 또는 닉네임만 정하는 게스트. 디스코드 로그인 사용자도 닉네임을 바꿀 수 있다.
- 방: 6자리 숫자 코드, 초대 링크, 코드/링크 복사, QR, 모바일 공유 시트, 빠른 시작, 관전, 재접속.
- 기기: 모바일(세로) 우선, 태블릿·PC 모두 지원. 최신 Chrome/Safari/Edge/Samsung Internet.
## 5. 범위 밖 (Non-goals)
- 실제 돈, 유료 재화, 환전, 사이트 전체에서 유지되는 칩/포인트. 포커·섯다·고스톱의 칩/점수는 **그 방 안에서만** 쓰이고 방이 끝나면 사라진다(법적 위험 회피, `04-stability-security.md` 6절).
- 광고, 결제, 친구 추천 알림, 소셜 피드.
- 네이티브 앱(초기에는 웹 + 홈 화면 추가(PWA)로 대체).
- 물리 조작이 핵심인 게임(젠가, 루핑루이, 할리갈리 컵스 등)은 제외. 이유는 `games/README.md`.
## 6. 성공 기준 (측정 가능한 목표)
| 항목 | 목표 |
|---|---|
| 수 반영 지연 | 서버 처리 p95 < 20ms, 체감 왕복 p95 < 150ms(국내) |
| 재접속 복구 | 연결이 끊긴 뒤 30초 안에 돌아오면 자리와 패가 그대로 |
| 서버 재시작 | 진행 중이던 모든 방이 재시작 후 자동 복구, 클라이언트는 자동 재연결 |
| 동시 접속 | 단일 서버(4코어/8GB)에서 동시 연결 2,000, 진행 중인 방 500개를 p95 지연 목표 안에서 처리 |
| 첫 화면 | 4G 모바일에서 LCP < 2초, 초기 JS < 150KB gzip |
| 쉬움 | 처음 온 사람이 링크를 받고 게임 자리에 앉기까지: 닉네임 입력 1번 + 버튼 1번 |
| 규칙 정확성 | 게임마다 규칙 테스트 + 무작위 대국 수천 판 불변식 테스트 통과 |
## 7. 문서 구성
`README.md`의 목차를 참고. 구현은 반드시 이 문서들을 따르고, 구현 중 결정이 바뀌면 문서를 먼저 고친 뒤 코드를 고친다.