feat(ai-character): Mock Preview 모드 구현

This commit is contained in:
Yu Sung
2026-07-27 23:23:36 +09:00
parent b4841ff579
commit 2a5efb0f3e
38 changed files with 4763 additions and 289 deletions

View File

@@ -20,17 +20,28 @@ Vite mode별 API base URL은 아래 파일에 둡니다.
- `.env.development`: `https://test-character-admin.sodalive.net`
- `.env.production`: `https://character-admin.sodalive.net`
- `server mode`: `VITE_API_MODE=server`이며 기본 개발 서버가 실제 개발 API를 사용합니다.
- `mock mode`: `VITE_API_MODE=mock`이며 개발 전용 browser MSW fixture로 제공 계약 범위만 미리 봅니다.
- `mock data reset`: mock data는 browser storage에 영구 저장하지 않고 새 mock store/session이 시작될 때 seed 기준으로 초기화됩니다.
- `production`: `VITE_API_MODE=mock`은 production build에서 거부됩니다.
- `no-auto-fallback`: server mode의 404 또는 network error를 mock mode로 자동 전환하지 않습니다.
## Scripts
```bash
npm run dev
npm run build:dev
npm run build:prod
npm run typecheck
npm run lint
npm run test
npm run test:run
npm run e2e
npm run build
```
- `npm run dev (VITE_API_MODE=server vite --host 127.0.0.1 --port 8888 --strictPort)`: 실제 개발 API를 쓰는 기본 개발 서버입니다.
- `npm run dev:mock (VITE_API_MODE=mock vite --host 127.0.0.1 --port 8889 --strictPort)`: 개발 전용 mock preview 서버입니다.
- `npm run build:dev`: development mode build입니다.
- `npm run build:prod`: production mode build입니다.
- `npm run build`: `build:prod` 별칭입니다.
- `npm run typecheck`: TypeScript project reference typecheck입니다.
- `npm run lint`: ESLint 검사입니다.
- `npm run test`: Vitest watch입니다.
- `npm run test:run`: Vitest 단발 실행입니다.
- `npm run e2e (VITE_API_MODE=server playwright test)`: server mode Playwright입니다. 대상 spec은 `playwright.config.ts`의 server mode `testMatch`가 제한하며, 추가 file filter를 넘기면 교집합만 실행합니다.
- `npm run e2e:mock (VITE_API_MODE=mock playwright test)`: mock mode Playwright입니다. 대상 spec은 `playwright.config.ts`의 mock mode `testMatch`가 제한하며, 추가 file filter를 넘기면 교집합만 실행합니다.
## Mock Preview Ownership
- Phase 2 mock preview는 auth shell과 제공 계약 기반 공통 fixture까지만 포함합니다.
- 후속 도메인 Phase는 자기 domain handler, fixture, mock E2E를 같은 Phase에서 추가하고 검증합니다.
- mock mode 통과는 최종 UI 확인 증거이며 실제 server integration 완료 증거가 아닙니다.