diff --git a/docs/12-roadmap.md b/docs/12-roadmap.md index e5c971e..33d0b01 100644 --- a/docs/12-roadmap.md +++ b/docs/12-roadmap.md @@ -84,6 +84,14 @@ - 2차 부하 테스트, 필요 시 방 단위 다중 프로세스 분산 검토. - (선택) 혼자 연습용 간단한 컴퓨터 상대. - 체스960(자체 캐슬링 구현 + perft 검증). +- **진행 결과(2026-10-06)**: 다섯 가지 모두 완료. + PWA(매니페스트·아이콘, 서비스 워커는 해시 파일만 저장, 오프라인 안내 페이지·띠, 홈 화면에 추가 카드). + 게임 기록 다시 보기(시드 + 행동 기록으로 서버에서 다시 돌려 각자 자기 화면만, 결과 화면·내 정보에서 열기, 모든 게임 재현 일치 테스트). + 튜토리얼(26종 모두 30초 요약 카드 3장 + 게임 중 [?] '지금 할 수 있는 것', 실제 view로 검사). + 컴퓨터 상대(22종, 실시간·대화 게임 4종 제외; 자기 화면 정보만 보고 둠, 연습 방은 비공개·기록 제외). + 체스960(체스 수 생성기 자체 구현, perft·chess.js 비교 검증, chess.js는 테스트 전용으로). + 2차 부하·장애 주입 통과(`reports/load-20261006.md`), 다중 프로세스 분산은 지금은 불필요. + 테스트 1,997개(+깊은 perft 22개 선택), E2E 전부 통과(게임 26종·오목·PWA·다시 보기·컴퓨터 상대·튜토리얼·관리자·접근성). ## 순서 원칙 - 플랫폼(M1)의 안정성 기능이 먼저다. 게임은 그 위에 하나씩 얹는다. diff --git a/docs/reports/load-20261006.md b/docs/reports/load-20261006.md new file mode 100644 index 0000000..a175142 --- /dev/null +++ b/docs/reports/load-20261006.md @@ -0,0 +1,35 @@ +# 2차 부하·장애 주입 테스트 보고서 (2026-10-06, M9) + +- 대상 커밋: 6cc3b75 (M9 합친 뒤: 다시 보기용 행동 시각 기록, 컴퓨터 상대 스케줄러, 체스 자체 수 생성기 포함) +- 환경·도구: 1차(`load-20261004.md`)와 같음. 봇 호스트(8코어, 30GB), 서버(MemoryMax 2G)·부하 생성기 각각 별도 systemd 스코프, localhost. + `scripts/loadtest.ts` — 방마다 오목 선수 2 + 관전자 2, 방마다 2초에 한 수. + +## 1. 기준 부하 (docs/10-testing.md §4) +| 항목 | 기준 | 1차(10-04) | 2차(10-06) | +|---|---|---|---| +| 동시 연결 | 2,000 | 2,000 | 2,000 (끝까지 유지) | +| 진행 중 방 | 500 | 500 | 500 | +| 초당 행동 | 250 | 248.2 | 248.5 | +| 지연 p95 | < 50ms | 20.2ms | 19.0ms | +| 지연 p99 | < 100ms | 37.3ms | 37.9ms | +| 서버 CPU | < 70% (4코어 기준 2.8코어) | 0.2코어 | 0.21코어 | +| 서버 메모리 | < 1GB | 141MB | 163MB | +| 오류·끊김 | 0 | 0 | 거절 0, 끊김 0 | + +## 2. 장애 주입: 부하 중 서버 SIGKILL → 재시작 +| 항목 | 결과 | +|---|---| +| 재연결 | 2,000/2,000 자동 재연결 | +| 저장된 수 유실 | 0 | +| 복구된 방 | 1,000 (진행 중 500 + 앞 측정에서 남은 방 500), 복구 실패 0 | +| 지연(전체 60초, 재시작 구간 포함) | p95 20.7 / p99 39.7ms | +| 서버 오류 로그 | 0 | + +## 3. 결론 +- M9에서 늘어난 기능(행동마다 적용 시각 기록, 방마다 컴퓨터 상대 예약 확인)으로 성능이 나빠지지 않았다. 메모리만 22MB 늘었다. +- 기준 부하에서 서버 CPU가 0.21코어로 한도의 약 8%다. **방 단위 다중 프로세스 분산은 지금은 필요 없다.** + 다시 검토할 때: 동시 연결이 1만을 넘거나, 한 프로세스 CPU가 1코어를 꾸준히 넘을 때. + 그때는 방 코드 해시로 프로세스를 나누고 앞단(Caddy)에서 `/ws?room=` 기준으로 보내는 방식부터 본다. + +## 4. 재현 방법 +1차 보고서 4절과 같다(`PORT=4600 … LOADTEST_NO_HTTP_LIMITS=1 bun apps/server/src/index.ts`, `bun scripts/loadtest.ts --rooms 500 --spectators 2 --seconds 60 --pid [--chaos --restart-cmd …]`).