2.2 KiB
2.2 KiB
BE·FE·Hangfire 구현 표준
Backend
새 KArtSell.Modules.ModelOperations 모듈은 다음 책임만 가진다.
- Domain: cadence, automation mode, promotion evidence gate
- Application: 승인 VersionSet 조회, 평가 request 생성
- Infrastructure: Dapper schedule lease, request+Outbox transaction
- Scheduling: 15분 dispatcher와 queue dispatch
- Feature: 운영 계획 조회 API
실제 Outcome, Drift, OOS, PBO/DSR 계산은 VS-18/19/20의 별도 handler로 구현한다. Scheduler 내부에 퀀트 수식을 넣지 않는다.
SOLID 적용
- SRP: Dispatcher는 due job 배치만, evaluator는 계산만, reviewer는 승인만 수행한다.
- OCP:
ModelOperationRegistry와 operation handler 계약으로 작업 추가. reflection plugin framework는 금지한다. - LSP: evaluator 교체 시 PIT, 단위, window, idempotency contract test를 통과한다.
- ISP: ContextReader, ScheduleRepository, RequestRepository를 좁은 port로 유지한다.
- DIP: Domain은 Hangfire, Dapper, Npgsql, FastEndpoints를 참조하지 않는다.
Frontend
/ops/model-operations는 운영 계획과 자동화 경계를 먼저 제공한다. 후속 화면은 다음 단위로 컴포넌트화한다.
- AutomationBoundaryPanel
- ModelOperationTable
- MetricDefinitionBadge
- DriftObservationPanel
- ChampionChallengerComparison
- FrozenEvidenceVersionSet
- ImprovementProposalReview
- PromotionGatePanel
- RollbackDrillEvidence
TanStack Query는 서버 상태, Pinia는 세션·권한·UI 선호, vue-router는 scope/cohort/window/filter를 소유한다. 모든 response는 Zod runtime validation 후 사용한다.
Hangfire
- Dispatcher: q-control, 15분, 동시실행 금지
- Evaluation: q-evaluation
- Frozen research: q-research
- Governance packet/drill: q-control
- Revision replay: q-backfill
연구 queue가 고객 추천 SLA를 침범하지 않도록 worker/connection/resource quota를 분리한다.
v12.4 request lifecycle audit clarification
evaluation.model_operation_request는 실행 상태와 시각을 트랜잭션으로 갱신할 수 있는 lifecycle aggregate다. 모든 상태 전이는 evaluation.model_operation_status_event에 append-only로 기록하여 실행 이력과 재처리 증거를 보존한다.