Skip to content

Story: 정합성 검증 및 모니터링

메타

항목
Story IDE-03-S-06
EpicE-03 원가 히스토리
상태draft
우선순위P1
규모S
담당 개발자BE (희선님)

사용자 스토리

As a 운영팀, I want 원가 히스토리 적용이 올바르게 동작하는지 검증, So that 순이익 계산 오류를 조기에 발견하고 대응할 수 있다.


수락 기준 (Acceptance Criteria)

AC-01: 정합성 검증 쿼리

항목내용
GivenETL 완료 후
When정합성 검증 실행
Then원가 미스매치 케이스 리포트

검증 항목:

  1. SettlementMargin.purchasePrice vs 주문 시점 PurchasePrice 일치 여부
  2. Product.purchasePrice vs 최신 PurchasePrice 일치 여부
  3. PurchasePrice 기간 겹침/누락 여부

출력 예시:

[정합성 검증 결과 - 2026-01-27]

1. 주문 시점 원가 미스매치: 0건 ✅
2. 최신 원가 미스매치: 3건 ⚠️
   - productId: 123456, Product: 25,800, PurchasePrice: 26,000
   - ...
3. 기간 중복/누락: 0건 ✅

AC-02: 모니터링 대시보드 (선택)

항목내용
Given어드민 페이지
When원가 히스토리 모니터링 메뉴 진입
Then주요 지표 대시보드 표시

지표:

  • 원가 히스토리 보유 상품 수
  • 최근 원가 변경 건수 (일/주/월)
  • 정합성 오류 건수

AC-03: 알림 (선택)

항목내용
Given정합성 검증 결과 오류 발견
When오류 건수 > 임계값
ThenSlack/이메일 알림 발송

태스크 분해

Task 1: 정합성 검증 스크립트 AC-01

  • [ ] 1.1: 검증 쿼리 작성 (3가지 케이스)
  • [ ] 1.2: CLI 명령어 또는 스케줄러 등록
  • [ ] 1.3: 결과 리포트 포맷팅

Task 2: 모니터링 (선택) AC-02

  • [ ] 2.1: 어드민 API 엔드포인트
  • [ ] 2.2: 어드민 UI 페이지

Task 3: 알림 (선택) AC-03

  • [ ] 3.1: 알림 로직 (기존 인프라 활용)
  • [ ] 3.2: 임계값 설정

Dev Notes (AI Agent 최적화)

영향 받는 소스 트리

src/
├── scripts/
│   └── validate-purchase-history.ts  # 🆕 신규 생성
└── admin/
    └── monitoring/
        └── purchase-history.ts       # 🆕 선택

검증 쿼리 예시

sql
-- 1. 주문 시점 원가 미스매치
SELECT sm.orderDate, sm.productId, sm.purchasePrice as margin_price,
       pp.purchasePrice as history_price
FROM SettlementMargin sm
JOIN (
  SELECT productId, purchasePrice, createdAt,
         LEAD(createdAt) OVER (PARTITION BY productId ORDER BY createdAt) as nextCreatedAt
  FROM PurchasePrice
) pp ON sm.productId = pp.productId
   AND sm.orderDate >= pp.createdAt
   AND (sm.orderDate < pp.nextCreatedAt OR pp.nextCreatedAt IS NULL)
WHERE sm.purchasePrice != pp.purchasePrice
LIMIT 100;

-- 2. 최신 원가 미스매치
SELECT p.id, p.purchasePrice as product_price, pp.purchasePrice as latest_history
FROM Product p
JOIN (
  SELECT productId, purchasePrice
  FROM PurchasePrice
  WHERE (productId, createdAt) IN (
    SELECT productId, MAX(createdAt) FROM PurchasePrice GROUP BY productId
  )
) pp ON p.id = pp.productId
WHERE p.purchasePrice != pp.purchasePrice;

충돌 감지

항목상태설명
기존 코드 충돌✅ 없음신규 스크립트
DB 부하🟡 주의검증 쿼리 실행 시간대 고려

의존성

의존설명상태
E-03-S-02SettlementMargin ETL 수정선행 필요

Dev Agent Record

항목
생성 AgentClaude Opus 4.5
생성일2026-01-27
마지막 수정2026-01-27
검증자-

검증 결과: 🔄 PENDING (PO 승인 대기) 검증일: -


생성일: 2026-01-27마지막 수정: 2026-01-27

장사왕 Product Team