# 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의 자원 공유를 금지한다.