도매 엑셀의 '판매가'는 도매가가 아니었다
| 매출 | 비용 | 시간 | 실패 |
|---|---|---|---|
| - | - | - | 가격 불일치 53건 / 53건 |
무엇을 했나
위탁판매 자동화 작업은 Claude Code에게 맡겨 진행했다. 국내 도매 사이트는 스마트스토어 대량등록용 엑셀을 준다. 그 파일에는 판매가라는 컬럼이 있다. Claude Code는 도매 사이트가 준 파일의 판매가라는 이유로 이 값을 도매가로 읽었다. 근거는 그것 하나였다.
몇 주 동안 이 값에 마크업을 곱해 상품을 등록했다.
그러다 내가 우연히 한 건을 눈으로 대조했다. Claude Code에게 이렇게 말했다.
가격 책정이 많이 이상해, 제품 하나만 봤는데, 국내 도매 사이트에서 25340 인데, 스마트스토어에는 52960이네.
이 말을 듣고 Claude Code가 전체 상품을 국내 도매 사이트 오픈API 값과 대조했다.
결과
조회 53건 · 일치 0건 · 불일치 53건
DB값 / 실제도매가 배율: 최소 1.608 · 중앙 1.608 · 최대 1.608
53건 전부 정확히 1.608배였고 예외는 없었다. 엑셀의 판매가는 도매 사이트가 이미 마진을 얹어 둔 권장 판매가였다. 우리는 거기에 마크업을 또 곱했고, 그래서 실제 도매가의 두 배 가격으로 팔고 있었다.
배송비와 제주·도서산간 추가비는 엑셀 값이 정확했다. 틀린 것은 도매가 하나뿐이었다. 그래서 더 알아채기 어려웠다.
이 일로 정리한 판단은 두 가지다.
| 관찰 | 판단 |
|---|---|
컬럼 이름이 판매가 | 컬럼 이름은 데이터가 아니다 |
| 53건이 모두 같은 배율로 틀림 | 버그가 아니라 데이터를 읽는 방식이 틀렸다는 증거 |
53건 중 40건만 틀렸다면 데이터 품질 문제로 볼 수 있다. 하지만 53건이 모두 같은 배율로 틀렸다면 Claude Code가 데이터를 읽는 방식이 틀린 것이다.
진짜 도매가는 오픈API의 price.supply에만 있었고, 엑셀에는 처음부터 없었다. Claude Code는 구조를 이렇게 바꿨다.
| 구성 요소 | 바뀐 동작 |
|---|---|
collector | 엑셀의 판매가를 listed_price로 따로 저장 |
sync_price.py | API에서 원가를 받아 도매가 칸에 채움 |
filters | 도매가가 0이면 판매가를 만들지 않고 상품을 탈락시킴 |
filters의 탈락 규칙은 0원짜리 판매가가 소리 없이 생기는 것을 막으려고 넣었다.
다음 행동
도매가는 API의 price.supply에서만 가져오고, 엑셀의 판매가는 listed_price로 따로 둔다.