1.6 KiB
1.6 KiB
BE·FE·Hangfire·컴포넌트 표준
Backend Slice
Endpoint → Request/Validator → Application UseCase → Domain Policy → Dapper SQL → Outbox → Tests
생산형 Command는 클라이언트가 Evidence/Model/Config를 임의 제공하지 못하게 한다. 서버가 승인된 PIT Read Model과 Version Set을 조회한다. Decision과 Outbox는 동일 트랜잭션이며, idempotency key 충돌 시 원결과를 반환하거나 409를 명시한다.
Outbox/Inbox
- Outbox: 미발행 lease, attempt, next_attempt_at, dead-letter, payload hash.
- Inbox: consumer+message unique, processing lease, result hash.
- Exactly-once를 주장하지 않고 at-least-once + idempotent side effect를 구현한다.
- replay는 승인·범위·watermark·dry-run·영향분석이 있어야 한다.
Hangfire
모든 Job은 JobRunId, JobType/Version, ScopeKey, IdempotencyKey, Watermark, Dataset/Model/Config/Code SHA, Input/Output Hash, Attempt, TraceId를 가진다. transient retry, business hold, DQ quarantine, poison event를 분리한다.
Frontend
- TanStack Query: 서버 상태와 캐시.
- Pinia: 세션·역할·UI preference. 서버 데이터를 복제하지 않는다.
- vee-validate+Zod: 폼·요청/응답 runtime validation.
- vue-router: 공유·복구 가능한 URL 상태.
- AG Grid: 대량 목록의 server-side pagination/filter/sort.
공통 컴포넌트는 QueryStateBoundary, PermissionGuard, DataFreshnessBadge, EvidenceVersionSet, VersionConflictDialog, DataGridShell 후보로 한정한다. 동일 업무 의미와 변경축이 반복될 때만 승격한다.