1.8 KiB
1.8 KiB
Backend·Frontend·Hangfire 구현 표준
1. Backend Vertical Slice
- Endpoint: 권한, 헤더, 입력 검증, ProblemDetails
- Application: 멱등키, PIT context 조회, 트랜잭션, Outbox
- Domain Policy: 순수 결정과 불변조건
- Infrastructure: Dapper SQL, Npgsql, Adapter
- Event/Job: schema version, Inbox, retry/dead-letter
- Tests: unit/integration/data/failure/replay/E2E
- 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의 자원 공유를 금지한다.