# 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` 후보로 한정한다. 동일 업무 의미와 변경축이 반복될 때만 승격한다.