한마디 하자. 15년 동안 운전대를 잡았고, 길 위에서 별의별 이상한 광경을 다 봤다. 하지만 화주 입장에서는 매번 가슴이 아픈 종류의 이상함이 있다: 똑같은 화물이 두 번 출고되는 것이다.
작년 11월 말, Black Friday 직후였다. Rancho Cucamonga의 한 유통 창고에서 적재 대기 줄에 서 있었는데, 창고 리더인 왕 반장이 다가와 말했다. "스푸, 당신 짐이 좀 이상해." 서류를 보니: 같은 노선, 같은 배송 주소(Phoenix의 자동차 부품점), 같은 SKU(브레이크 패드, 48케이스), 주문 번호까지 거의 똑같아 보였다 — 타임스탬프만 달랐다. 하나는 9:41 AM, 다른 하나는 9:45 AM에 들어왔다. 4분 차이다. 시스템은 출고 주문을 2건 생성하고, 송장을 2장 출력했으며, 피커들은 이미 똑같은 파렛트 2개를 도크에 스테이징해 둔 상태였다.
"두 번 푸시한 거야?"라고 물으니, 왕은 쓴웃음을 지었다. "플랫폼 API가 hiccup 나서, 확인 응답을 못 받고, 그래서 다시 푸시한 거야."
그날 나는 Rancho Cucamonga에서 Phoenix까지, 같은 주소로 가는 똑같은 브레이크 패드 2대분을 운반했다. 서명은 2개 받았다. 인수 담당자는 어리둥절해했다. "주문은 한 번만 했는데요." 여분 짐은 거절당해 전 구간을 다시 싣고 돌아왔다. 이 헛된 왕복 운송으로 화주는 수백 달러를 날렸다. 아무 것도 아닌 일에.
그리고 처음이 아니었다. 2024년 여름, Fontana의 생활용품 창고에서 적재하던 중, 현장 슈퍼바이저인 샤오 리가 하소연했다: 성수기가 되면 그들의 시스템은 매달 수백 건의 "중복 의심 주문"을 뱉어냈다 — 같은 구매자, 같은 주소, 같은 상품이 몇 분 차이로 주문된 것들이었다. 한 전담 직원의 매일 아침 첫 업무는 그것들을 수작업으로 찾아내는 것이었고, 대형 세일 기간에는 하루에 50건에서 60건을 플래그했다. 잡아낸 건 운이 좋은 것이었다. 놓친 건? 두 번 출고됐다. 화물을 되찾는 건 전혀 다른 이야기다 — 고객이 거절하거나 반품하고, 운송비는 어차피 날아가며, 상품은 길에서 흠집투성이가 되어 돌아온다.
이게 실제로 어떻게 발생하는가? 풀어보자
원리는 전화 통화와 똑같다.
창고에 전화한다: "야 왕, 100개를 Phoenix로 보내." 말 도중에 전화가 끊겼다. 들었는지 몰라서 다시 걸어 같은 말을 반복한다: "100개를 Phoenix로 보내." 그걸 들은 그는 생각한다 — 알겠다, 주문 2건이네, 트럭 2대 보내자.
판매 플랫폼과 창고 시스템 사이에서 일어나는 게 바로 이거다. 다만 그들은 이를 API 주문 푸시라고 부른다. 흐름은 이렇다: 고객이 플랫폼에서 주문하고, 플랫폼이 API를 통해 창고 시스템에 주문을 푸시하면, 창고 시스템이 "받았다"고 답한다. 그런데 가끔 네트워크가 흔들리거나 창고 시스템이 몰리면, 확인 응답이 제시간에 돌아오지 않는다. 플랫폼은 주문이 도착하지 않았다고 판단하고 — 다시 푸시한다. 같은 주문이 몇 분 차이로.
창고 시스템이 "이거, 예전에 본 적 있지 않아?"라고 물을 분별력이 없으면, 두 번의 푸시를 두 개의 별도 주문으로 취급한다: 출고 주문 2건, 송장 2장, 피킹 2회, 출고 2회. 운전자가 적재할 때 서류상 주소, SKU, 수량이 전부 맞는다. 이상해 보이는 게 없다. 그리고 이렇게 같은 화물이 두 번 출고된다. 많은 사람들이 여기서 오해한다: 이건 피커의 잘못이 아니다. 피커는 서류대로 움직인다. 시스템이 주문 2건 피킹하라고 하면, 그들은 2건을 피킹한다. 근본 원인은 한 층 위, 즉 통합에 있다 — 주문이 도착한 그 순간에 "이 주문, 이미 본 적 없어?"라고 아무도 묻지 않았던 것이다.
이중 출고는 실제로 얼마가 드는가? 계산해보자
많은 사람들이 이렇게 생각한다: 고작 한 번 더 출고된 것뿐인데, 돌려받으면 되지. 소형 소포 1건의 중복이 실제로 태우는 금액을 뜯어보자.
| 비용 항목 | 금액 (USD) | 비고 |
|---|---|---|
| 여분 출고 운송비 | $8–12 | 3파운드 소포, 주를 넘나드는 UPS/FedEx Ground 기준, 대략 이 범위 |
| 반송 운송비 | $8–15 | 거절·반품 — 화주가 부담하고, 반송 라벨이 더 비싸다 |
| 여분 창고 인건비 | $4–6 | 피킹, 검수, 포장, 라벨 — 전부 사람의 시간 |
| 고객 서비스 시간 | $5–10 | 클레임, 주문 추적, 반품 조정 |
| 포장 자재 | $2–3 | 박스, 완충재, 라벨 — 일단 출고되면 돌아오지 않는다 |
| 합계 | $27–46 | 게다가 이건 중복 주문 1건당이다 |
별것 아닌 것처럼 보이지? 하지만 양이 문제다. 하루 5,000건을 처리하는 창고를 보자. 보수적으로 잡아도 0.5%의 중복률이면 하루 25건의 이중 출고다. 건당 $35이면 하루 $875 — 300영업일이면 연간 $260,000이다. 그리고 숨은 비용은 별도다: 고객이 모든 걸 2개씩 받았을 때 처음 드는 생각은 "정말 후한 판매자네"가 아니다. "이 판매자 엉망이네"다. 나쁜 리뷰, 취소된 주문, 다시 돌아오지 않는 고객 — 이런 손실은 스프레드시트에 담기지 않는다.

화주와 창고를 위한 실무 조언
길 위에서 오랜 세월을 보내며 깨달은 게 하나 있다: 이 문제의 해결책은 적재 도크에 있지 않다. IT에 있다. 하지만 화주와 창고 오너는 IT에게 어떻게 요청해야 하는지 알아야 한다 — 쉬운 말로. 그렇지 않으면 IT는 "시스템은 잘 돌아간다"고 생각하는 동안, 도크 현장팀은 매일 화재 진압에 쫓긴다. 번역은 이렇다.
첫째, 주문 번호는 모두 고유해야 하며 — 시스템은 그 고유성을 실제로 지켜야 한다.
플랫폼을 나가는 모든 주문은 글로벌하게 고유한 주문 번호를 가져야 한다 — 트럭의 VIN처럼, 절대 반복되지 않는다. 창고 시스템이 주문을 받으면, 첫 번째 행동이 출고 주문 생성이어서는 안 된다. 확인이어야 한다: 이 주문 번호, 전에 본 적 있어? 본 적 있으면 두 번째 것을 차단하거나 병합한다. 없으면 진행한다. 이를 중복 제거(dedup)라고 한다. 멋진 말이지만, 사실은 "번호판을 읽는 것"뿐이다.
둘째, 같은 요청을 세 번 보내도 한 번 보낸 것과 같은 효과여야 한다.
IT 사람들은 이를 "멱등성(idempotency)"이라고 부른다. 무서운 단어지만 뜻은 단순하다: "100개를 Phoenix로 보내"를 한 번 말하든 세 번 말하든 결과는 100개여야지 — 300개가 아니다. IT와 얘기할 때는 이렇게 말해라: "API가 타임아웃돼서 재시도할 때, 같은 주문이 여러 번 푸시돼도 출고는 단 한 번만 이뤄져야 한다." 어떻게 할지는 그들에게 맡겨라. 네가 말할 건 무엇을, 이다.
셋째, 재시도에는 쿨다운과 상한이 필요하다.
재시도 자체는 악당이 아니다 — 네트워크가 흔들렸는데 재시도하지 않으면 주문이 유실되고, 그게 더 나쁘다. 하지만 재시도는 무작정 무한이어서는 안 된다: 한 번 푸시하고, 확인 응답이 없으면 수십 초 기다렸다가 다시 푸시한다. 두세 번 시도하고, 그래도 안 되면 무작정 두드리지 말고 사람에게 넘긴다. 중복 주문의 상당수는 플랫폼이 1분 안에 같은 주문을 5번, 6번 푸시하고 창고 시스템이 그걸 전부 받아들이는 데서 온다.
넷째, 창고에는 인간의 안전망이 필요하다.
시스템 수정은 시간이 걸린다. IT가 고칠 때까지, 창고는 매일 아침 15분을 써서 "중복 의심"을 스크리닝해야 한다: 같은 구매자, 같은 주소, 같은 SKU, 주문 간격 30분 이내 — 사람이 확인할 수 있도록 플래그를 세운다. 그 Fontana 창고? 이 한 수로 성수기 중복의 대부분을 잡아냈다. 수작업 스크리닝은 투박하지만, 정작 필요할 때 구해주는 건 투박한 도구다.
마지막으로 하나, 직관에 반하는 사실: 많은 창고 KPI는 사실 이중 출고를 장려한다. 창고는 피킹 속도로 평가받는다 — "주문 드롭 후 2시간 이내 출고". 시스템에 똑같은 주문이 2건 뜨면, 시계와 싸우는 피커는 그저 피킹해버리는 걸 반긴다. 저 2건이 사실은 같은 주문인지 의심할 시간이 아무에게도 없다. 속도 KPI가 엄격할수록 중복은 더 많이 빠져나간다. 트레이드오프다: 속도를 원하면 시스템이 검증을 대신해줘야 한다. 시스템이 검증하지 않으면 속도는 "빠르고 틀리게" 된다. 그러니 처리 시간을 밀어붙이는 동시에 검증용 시간과 인력을 예산에 넣어야 한다 — 그렇지 않으면 현장에 고객의 돈으로 도박을 시키는 셈이다.
하나 더: "우리는 작아서 이런 일 안 생겨"라고 스스로를 속이지 마라. 중복 푸시는 주문량을 신경 쓰지 않는다 — 네트워크 hiccup 한 번, 서버 재시작 한 번이면 하루 50건의 창고도 똑같이 맞는다. 그리고 작은 창고가 더 아프다: 이중 출고 1건이 얇은 마진의 더 큰 몫을 갉아먹는다.
마무리하는 옛 격언
우리 운전사들에게는 옛 격언이 있다: "1초 서두르느니 3분 멈춰라."
여기도 마찬가지다: 시스템이 "이 주문, 전에 본 적 있어?"라고 묻는 데 1초를 더 쓰면, 나중에 수십 달러와 산더미 같은 골칫거리를 태우는 것보다 낫다. 빠르다는 건 눈감고 달린다는 뜻이 아니다. IT와 얘기할 때는 이 격언을 가져가라 — 통할 것이다.
Shifu Zhao, 15년 베테랑 트럭 운전기사 지음
영어판 번역본입니다. 내용이 다를 경우 영어판을 우선합니다.







