삼국지 모의전투 HiDCHe core2026
core2026은 ../ref/sam의 PHP 서비스를 TypeScript로 호환 이관하는 pnpm
모노레포입니다. 전투·턴·권한·저장 상태·API·화면 동작은 ref 구현과 실제 실행
결과를 기준으로 검증합니다.
저장소 구성
| 경로 | 책임 |
|---|---|
app/gateway-frontend |
가입, 로그인, 로비, 계정, 관리자 UI |
app/gateway-api |
계정·세션, profile 정책, operation queue, PM2 orchestration |
app/game-frontend |
profile별 게임 SPA와 ref 호환 화면 |
app/game-api |
tRPC, SSE, 인증, 조회·입력 API, 비동기 worker |
app/game-engine |
turn daemon, AI, 월간 lifecycle, in-memory world와 DB flush |
packages/common |
공통 타입, 직렬화, 인증 token, 결정적 RNG |
packages/logic |
명령, constraint, 전투, trait·item·병종 action module |
packages/infra |
gateway/game Prisma schema, migration, PostgreSQL·Redis client |
packages/tools-scripts |
resource schema 생성과 검증 |
resources |
scenario, map, unit set, turn-command profile |
tools/integration-tests |
PostgreSQL·Redis 및 ref↔core 차등 검증 |
tools/frontend-legacy-parity |
Chromium 기반 화면·상호작용 비교 |
tools/legacy-db-migration |
레거시 장기보존 데이터 이관 CLI |
tools/docs |
플레이어 커맨드 문서 생성 |
구조와 실행 흐름은 아키텍처 개요, 파일별 변경
위치는 개발자 핸드북에서 확인해 주세요. ref entry
point와 core 구현의 대응 근거는 상위 작업공간의
../docs/ref-core2026-mapping.md에 있습니다.
런타임 경계
Gateway는 계정과 profile 운영을 소유합니다. gateway-api가 gateway
PostgreSQL과 Redis session을 사용하며, game session token을 발급합니다.
관리 operation은 GatewayProfile과 GatewayOperation에 저장되고
orchestrator가 commit별 worktree와 PM2 process를 조정합니다.
각 game profile은 별도 PostgreSQL schema를 사용합니다. game-api는 인증된
요청을 검증하고 직접 처리할 mutation 또는 daemon 입력을
InputEvent에 기록합니다. game-engine은 DB lease와 fencing token을 확보한
단일 실행자로서 world를 메모리에 적재하고, 명령·월간 이벤트·로그·예약 턴과
input-event 결과를 transaction으로 반영합니다. Redis pub/sub과 SSE는 알림
경로이며 gameplay commit의 기준 저장소가 아닙니다.
자세한 흐름은 런타임 아키텍처와 요청·턴·저장 흐름을 확인해 주세요.
도구 체인
- pnpm
11.17.0, Turbo - TypeScript
6.0.2 - Fastify, tRPC, zod
- Vue 3, Pinia, Vue Router, Vite
- PostgreSQL, Prisma, Redis
- Vitest, Playwright/Chromium
- VitePress
Node.js 버전은 저장소에서 고정하지 않습니다. 의존성 설치와 검증에는
package.json과 pnpm-lock.yaml을 함께 사용해 주세요.
개발 환경
pnpm install --frozen-lockfile
cp .env.example .env
pnpm --filter @sammo-ts/infra prisma:generate
CI=1 pnpm typecheck
.env는 Git에서 제외됩니다. 비밀값은 명령행, 로그, screenshot, report,
VITE_* 변수에 넣지 말아 주세요. 상위 작업공간에서는
../docker_compose_files/development/README.md의 PostgreSQL·Redis stack을
worktree별로 준비할 수 있습니다.
cd ../docker_compose_files/development
./scripts/prepare-instance.sh main 15433 16379 ../../core2026
./scripts/compose.sh main up -d --wait
통합 테스트는 schema를 truncate하거나 Redis key를 정리할 수 있습니다. 다른 worktree나 개발 데이터와 같은 instance를 공유하지 말아 주세요.
검증 명령
pnpm lint
CI=1 pnpm typecheck
pnpm test
pnpm build
pnpm test:integration
PostgreSQL·Redis 조건부 suite는 격리된 서비스를 준비한 뒤 실행합니다.
pnpm test:integration:conditional
ref 명령 계약과 실제 화면은 다음 명령으로 비교합니다.
pnpm check:legacy:general
pnpm check:legacy:nation
pnpm test:e2e:frontend-legacy
각 명령의 fixture, 서비스, 인증 요구사항은 테스트 정책, 통합 테스트, 프론트엔드 호환 검증에 있습니다. skip된 테스트와 mock 검증은 실제 외부 서비스 검증으로 간주하지 않습니다.
문서
pnpm docs:generate
pnpm docs:dev
pnpm docs:build
pnpm docs:preview
docs:generate는 등록된 장수·국가 command spec에서
docs/user/command-catalog.generated.md를 만듭니다. 생성 파일은 직접
수정하지 말아 주세요.
문서의 시작점은 다음과 같습니다.
DB와 배포
Gateway schema는 packages/infra/prisma/gateway.prisma, game schema는
packages/infra/prisma/game.prisma가 정의합니다. migration은 각각
gateway-migrations/와 migrations/에 있습니다.
pnpm --filter @sammo-ts/infra prisma:migrate:status:game
pnpm --filter @sammo-ts/infra prisma:migrate:deploy:game
pnpm --filter @sammo-ts/infra prisma:migrate:deploy:gateway
pnpm migrate:legacy -- --help
Game과 gateway가 같은 database/schema를 쓰므로 deploy 순서는
game → gateway입니다. 양쪽 migration directory 이름은 공유
_prisma_migrations에서 충돌하지 않도록 전역적으로 고유해야 합니다.
활성 외부 prefix는 /gateway/, /che/, /hwe/입니다. 앱은 필요한
listener를 0.0.0.0에 bind하고 prefix를 보존한 frontend, tRPC, SSE,
direct-navigation URL을 사용합니다. /image/*는 외부 Caddy가 소유합니다.
build:server는 profile resource를 dist/<profile>에 복사하는 도구입니다.
완전한 API·daemon·frontend 배포 bundle은 gateway orchestrator의
commit-worktree build 경로에서 구성합니다.