Initial commit: Add project files
ci / backend (push) Failing after 12s
ci / frontend (push) Failing after 19s
ci / static (push) Failing after 45s

This commit is contained in:
2026-08-02 05:15:36 +09:00
commit dcd1322d41
636 changed files with 122352 additions and 0 deletions
@@ -0,0 +1,42 @@
# Backend·Frontend·Hangfire 구현 표준
## 1. Backend Vertical Slice
1. Endpoint: 권한, 헤더, 입력 검증, ProblemDetails
2. Application: 멱등키, PIT context 조회, 트랜잭션, Outbox
3. Domain Policy: 순수 결정과 불변조건
4. Infrastructure: Dapper SQL, Npgsql, Adapter
5. Event/Job: schema version, Inbox, retry/dead-letter
6. Tests: unit/integration/data/failure/replay/E2E
7. Ops: metric/alert/runbook/rollback
생산형 결정 Command는 `PositionLotId, AsOf, IdempotencyKey` 같은 최소 식별자만 받는다. Evidence/Model/Config/DataVersion은 승인된 서버 PIT Context에서 조회한다. 연구 Vector Endpoint는 저장·공개·주문 흐름과 분리한다.
## 2. 공통 오류
- 400: 구문/필수 헤더
- 401/403: 인증/권한
- 409: 승인 Evidence 부재, 버전 충돌, 상태전이 충돌
- 422: 도메인 수용기준 위반
- 503: 의존 source/DB/Capability unavailable
## 3. Frontend 책임
| 상태 | 소유 |
|---|---|
| Server state | TanStack Query |
| Session/Role/UI preference | Pinia |
| Form | vee-validate + Zod |
| URL 공유상태 | vue-router |
| 대량 운영목록 | AG Grid server-side |
| Runtime contract | Zod request/response |
Pinia에 서버 도메인 데이터를 복제하지 않는다. 모든 화면에 AG Grid를 사용하지 않는다. Evidence/Version/Staleness/Permission은 공통 컴포넌트로 제공하되 3회 반복 원칙을 따른다.
## 4. Hangfire
Queue는 control/market-data/fundamentals/feature-risk/recommendation/evaluation/reconciliation/research/backfill로 분리한다. 모든 Job은 다음을 가진다.
`JobRunId, JobType, JobVersion, ScopeKey, IdempotencyKey, Watermark, Attempt, VersionSet, InputHash, TraceId, Heartbeat`
Blind retry, 현재값 overwrite, 고객 SLA Queue와 연구 Backfill의 자원 공유를 금지한다.