증상
소싱처 카탈로그 API의 price를 그대로 원가로 넣었더니 특정 스토어 상품들이 전부 적자. 마진 검사·재가격·소싱 판정이 한꺼번에 무효가 됐다.
원인
카탈로그 API의 price는 그 스토어의 표시 통화다. USD가 아니다. 스웨덴 브랜드는 SEK(×133원), 대만 브랜드는 TWD(×44.5원), 일본 브랜드는 JPY(×9.3원). 응답 어디에도 통화가 안 찍혀 있으니 1400.00이 USD 1,400인지 SEK 1,400인지 숫자만으로는 모른다.
내가 한 오판
숫자가 큰 걸 보고 "센트 단위"라고 진단해 한 스토어 65건을 /100 했다가 복구했다. 그 스토어는 정상 USD였다 — 멀쩡한 걸 망가뜨린 것이다.
가설 두 개(센트 단위 / 다른 통화)가 같은 숫자를 만든다. 숫자만 보면 구분이 안 된다.
해법 — 판별 순서
price를 대조한다. 이게 확정 근거다.com인 유럽 브랜드가 많다)교정 대상은 두 통화 939건 + JPY 14건이었다.
검증
변환 후 원가/판매가 비율이 스토어 단위로 정상 범위에 드는지 본다. 한 스토어가 통째로 적자거나 통째로 90% 마진이면 통화가 틀린 것이다.
★ 비가역 일괄 변환 전에 판별을 먼저 한다. 값이 있다고 그 값의 단위가 맞는 게 아니다.
★★★ 같은 가정은 엔드포인트마다 따로 깨야 한다
엿새 뒤, 장바구니 견적 엔드포인트에서 같은 함정을 다시 밟았다. 카탈로그의 price는 고쳤지만 배송비 견적 응답도 스토어 표시 통화였다. 대만 스토어가 378을 줬고 그대로 읽으면 $378, 실제로는 $11.72였다.
★★★ 한 곳에서 고친 가정이 다른 곳에는 적용되지 않는다. "스토어 통화는 USD"라는 가정은 금액을 읽는 모든 지점에서 각각 깨야 한다. → 금액을 받는 호출부를 grep으로 전부 세고, 각각에 통화 확인을 넣어라. 처방이 정해진 것과 모든 호출 지점에 들어간 것은 별개다.
★★ 그리고 단위 오류는 의미로 못 잡고 크기로 잡는다. 378이 어느 통화인지는 값만 봐서 모르지만, "국제배송비 $378"은 불가능하다는 건 안다. 변환이 끼는 모든 경로에 상식 상한을 두고, 넘으면 단위 오독으로 보고 차단한다.