안홍준
λ 580 NM · COMMERCE
케이스 03 / 09English3D로 보기

문제

골드바·실버바·주얼리를 국제 금시세에 연동한 가격으로 팔아야 했습니다. 실시간으로 계산해, 낡은 가격이 고객에게 닿지 않게.

결정

  1. 상품 가격을 저장하지 않습니다. 중량·마진율·공임만 저장하고 조회 시점의 시세로 계산합니다. 관리자에서 부가세율만 바꿔도 전 상품에 즉시 반영됩니다(실측 후 원복 확인).
  2. 장바구니에 담는 순간 가격이 고정됩니다. 시세를 일부러 바꾼 실험에서 상세 가격은 바뀌고 장바구니 가격은 유지됐습니다.
  3. 시세 소스를 어댑터로 추상화했습니다. 후보가 공공데이터 → 증권사 API → 무제한 REST로 세 번 바뀌는 동안 수집·저장 코어는 그대로였습니다.

부서진 곳과 고친 방법

  1. 설정값 하나로 상품 목록 전체가 500이 났습니다. 가격 함수의 예외를 어디서도 잡지 않았기 때문입니다. 상품 단위로 실패를 격리해, 실패한 상품만 "가격 준비중"으로 보입니다.
  2. 개발용 더미 시세가 ±0.5%로 흔들려 살아 있는 시세처럼 보였고, 판매를 막을 장치가 없었습니다. 운영 모드는 fail-closed로 바꾸고, 시세가 60분 넘게 낡으면 판매에서 뺍니다.

결과

  • 가격 함수 무작위 30만 표본 검증 · E2E 8 · 단위 6케이스
  • RLS 정책 30개
  • 적대적 감사 5단계 — 치명 결함 0
  • 무인증 시세 소스 3종 교차검증 편차 0.13% 이내
  • pg_cron으로 시세 5분 주기 수집, 발화·적재 로그 확인
역할1인, 약 1주
기간약 1주
상태결제 연동 대기
스택Next.js 16 · TypeScript · Supabase · Edge Functions · pg_cron · Vercel