문제
골드바·실버바·주얼리를 국제 금시세에 연동한 가격으로 팔아야 했습니다. 실시간으로 계산해, 낡은 가격이 고객에게 닿지 않게.
결정
- 상품 가격을 저장하지 않습니다. 중량·마진율·공임만 저장하고 조회 시점의 시세로 계산합니다. 관리자에서 부가세율만 바꿔도 전 상품에 즉시 반영됩니다(실측 후 원복 확인).
- 장바구니에 담는 순간 가격이 고정됩니다. 시세를 일부러 바꾼 실험에서 상세 가격은 바뀌고 장바구니 가격은 유지됐습니다.
- 시세 소스를 어댑터로 추상화했습니다. 후보가 공공데이터 → 증권사 API → 무제한 REST로 세 번 바뀌는 동안 수집·저장 코어는 그대로였습니다.
부서진 곳과 고친 방법
- 설정값 하나로 상품 목록 전체가 500이 났습니다. 가격 함수의 예외를 어디서도 잡지 않았기 때문입니다. 상품 단위로 실패를 격리해, 실패한 상품만 "가격 준비중"으로 보입니다.
- 개발용 더미 시세가 ±0.5%로 흔들려 살아 있는 시세처럼 보였고, 판매를 막을 장치가 없었습니다. 운영 모드는 fail-closed로 바꾸고, 시세가 60분 넘게 낡으면 판매에서 뺍니다.
결과
- 가격 함수 무작위 30만 표본 검증 · E2E 8 · 단위 6케이스
- RLS 정책 30개
- 적대적 감사 5단계 — 치명 결함 0
- 무인증 시세 소스 3종 교차검증 편차 0.13% 이내
- pg_cron으로 시세 5분 주기 수집, 발화·적재 로그 확인