먼저 내 결론부터 말하겠습니다. 대형 세일 전날 밤에 해야 할 건 트래픽 부하 테스트가 아니라, 가격 변경이 각 채널에 닿기까지 걸리는 시간을 재는 것입니다. 가격 필드는 실시간 푸시로 이동해야 합니다. 아직 5분이 넘는 간격으로 폴링에 의존하고 있다면 시한폭탄 위에 앉아 있는 겁니다. 저는 그 폭탄이 터지는 걸 직접 봤습니다. Black Friday 2023이었습니다.
그 창고는 Fontana에 있는 120,000평방피트 규모의 3PL이었습니다. 그 금요일 7 AM, 클라이언트는 채널 백엔드에서 Bluetooth 스피커의 프로모 가격을 $29.99에서 $19.99로 내렸고, 8 AM 오픈을 기대했습니다. 채널은 1분 안에 적용했습니다. 하지만 OMS는 채널 가격을 15분마다 폴링했고, Black Friday 주문 폭주로 동기화 큐가 1시간 이상 밀려 있었습니다. 새 가격이 실제로 OMS에 도착해 WMS 과금으로 흘러들어갔을 때는 10 AM이었습니다. 그 두 시간 동안 1,400건이 넘는 주문이 $19.99의 페이지 가격으로 결제됐는데, OMS에는 $29.99로 잠겨 있었습니다. 고객 서비스는 "왜 $10을 더 청구했나요?"라는 문의에 파묻혔고, 회사가 페이지 가격을 존중하기로 결정한 뒤로는 보상 크레딧만으로도 10,000달러를 훌쩍 넘겼습니다. 교훈이 뼈에 새겨졌습니다. 가격 지연 피해는 되돌릴 수 없습니다. 주문이 잘못된 가격으로 확정되고 나면 박스는 어쨌든 출고돼야 하고, 돈은 그냥 사라집니다.
그 뒤로 습관이 생겼습니다. 누가 OMS 선정을 물어보면, 가장 먼저 보고 싶다고 요청하는 다이어그램이 가격 동기화 흐름도입니다.
가격이 주문이 되기까지 몇 개의 손을 거치는가
채널 백엔드에서 가격을 수정하는 건 1단계에 불과합니다. 변경은 채널의 API나 webhook을 통해 OMS로 이동하고, OMS 가격 마스터에 기록되고, 이 주문이 어떤 가격에 해당하는지를 정하는 유효 기간 검사를 통과한 뒤, 최종적으로 주문에 스냅샷으로 찍혀 WMS와 재무로 푸시되어야 합니다. 체인은 단순해 보이지만, 그 중간 어느 손이든 가격을 쥐고 가만히 앉아 있을 수 있습니다—채널은 보냈는데 OMS가 못 받았다. OMS는 받았는데 기록을 안 했다. 기록은 했는데 시간대가 안 맞았다. 주문에 가격을 확정하는 건 일방통행 문입니다. 한 번 잠기면 늦게 도착한 동기화로는 쫓아갈 수 없습니다. 그러니 가격 동기화는 정확도의 문제가 아니라 속도의 문제입니다. 2시간 늦는 것과 2시간 틀리는 것은 정확히 같은 비용입니다.

포장 스테이션은 가격이 잘못된 주문을 이론상 잡아낼 수 있는 마지막 장소이면서, 잡아낼 수 없습니다. 포장 작업자가 Zebra 스캐너 방아쇠를 당기고, WMS는 라벨을 출력한 뒤 주문의 확정 가격 스냅샷을 기준으로 재고를 차감합니다—스캔 건은 바코드를 읽습니다. 가격이 아닙니다. 박스가 컨베이어에 올라가 버리면 잘못된 가격의 주문은 출발합니다. 나중에 그 Fontana 현장에 붙인 반창고는 포장 확인 시 가격 체크였습니다. 주문의 스냅샷 가격이 채널의 현재 가격과 다르면 스테이션 화면이 빨갛게 깜빡이며 주문을 잠급니다. 이게 출혈을 멈춥니다. 병은 아직 동기화 체인 안에 있습니다.
지연이 숨어 있는 세 곳
첫째는 폴링 간격입니다. 많은 OMS 구성은 채널 가격을 15분, 심하면 30분마다 폴링합니다. 한가한 화요일에는 그걸로 괜찮습니다. Black Friday가 되면 채널 API가 쓰로틀링되고, 응답이 느려지고, 한 번의 폴링 사이클이 3회분으로 늘어납니다—15분이 1시간이 됩니다. 제 판단은 단호합니다. 가격 필드가 5분이 넘는 간격으로 폴링되고 있다면 성수기에는 실시간 푸시로 바꾸세요. 협상 불가입니다.
둘째는 유실된 푸시입니다. webhook은 실시간처럼 들리지만, 채널이 발화하고 OMS가 수신하는 사이에 1회의 타임아웃, 1회의 500 에러, 1회의 네트워크 삐끗으로 메시지는 그냥 사라집니다. 많은 시스템은 재시도하지 않거나, 몇 번 재시도하다 실패하고, 아무도 보지 않는 데드레터 큐에 메시지를 방치합니다. 세일 전날 밤늦게 이뤄진 가격 변경이 이 함정에 가장 자주 걸립니다—3 AM에 아무도 지켜보지 않으면 아침까지 가격은 도착하지 않고 주문은 밤새 돌았습니다.
셋째는 유효 기간 미스매치입니다. 채널의 프로모는 "8:00 AM부터 11:59 PM까지 유효"라고 하지만, OMS는 시작·종료 시간 없는 맨가격을 갖고 있습니다. 혹은 OMS는 서버 시간으로 기간을 평가하는데 채널은 태평양 시간으로 돕니다—조용한 3시간의 어긋남. Fontana는 앞의 두 개가 합쳐져 터졌지만, 시간대로 무너진 현장도 그만큼 봤고, 그쪽이 디버깅은 더 까다롭습니다. 동기화 로그는 "success"라고 하는데 모든 주문이 잘못된 가격으로 확정돼 있습니다. 속 터지는 일입니다.
전날 밤에 테스트할 것과 출혈을 멈추는 방법
세일 전 테스트 리스트는 길 필요가 없습니다. 3개 항목이면 충분합니다. 첫째, 스테이징에서 가격을 바꾸고 OMS 주문 스냅샷에 반영되기까지 시간을 재세요. 10분이 넘으면? 잠들지 마세요—계속 파고드세요. 둘째, webhook 리시버를 10분간 죽이고 누군가에게 알림이 가는지, 복구 시 시스템이 따라잡는지 확인하세요. 알림 없는 푸시는 푸시가 없는 것과 같습니다. 셋째, 프로모 시간대 경계선 바로 위에 테스트 주문을 넣고 어느 가격이 확정되는지 보고, 겸사겸사 서버 시간대와 채널 시간대를 대조하세요.
실제로 터졌을 때는 출혈 멈추기 순서가 있고, 그 순서가 중요합니다. 먼저 킬 스위치입니다. API로 해당 SKU를 리스팅에서 내리세요—주요 채널이 다 지원하고, 사람이 클릭하는 것보다 훨씬 빠릅니다. 수도꼭지를 잠그세요. 다음은 스로틀입니다. 어느 SKU의 10분간 주문량이 일간 기준의 5배를 넘으면 알림을 쏘고 사람이 검토할 때까지 붙잡아두어 잘못된 가격의 주문이 쌓이는 걸 멈추세요. 마지막으로 고객 서비스에 쓸 정직한 한 마디를 주세요. 제 것은 이겁니다. "We honor the price shown at checkout." 넘쳐난 저가를 삼키는 비용은 청구서 1장분. 다투는 비용은 고객 그 자체입니다. 저는 그 계산을 마쳤습니다—전자가 더 쌉니다. 그리고 과다 청구된 주문은 빠르게 환불하고 구체적으로 사과하세요. 고객이 직접 알아채게 하지 마세요.
IT에 가서 질문 하나만 하세요. 우리 가격 동기화는 푸시인가요, 폴링인가요? 답이 "I think it's push"로 돌아오면—오늘 밤 검증하러 가세요. Black Friday는 당신을 기다려주지 않습니다.
영어판 번역본입니다. 내용이 다를 경우 영어판을 우선합니다.




