새벽 2:30에 전화가 울렸다. 고객 서비스였고, 담당자는 울기 직전인 목소리였다. "고객이 주문했는데, OMS에는 40개 단위 가용이라고 나오고, 피커가 로케이션에 가보니——아무것도 없었어요. 랙에 박스 모서리 하나도 없었습니다."
나는 이 전화를 한 번 이상 받아봤다. 모든 인시던트는 똑같이 전개된다. IT는 "인터페이스 로그는 깨끗하다"고 하고, 운영은 "장부는 깨끗하다"고 하며, 양쪽은 회의 내내 서로 탓한다. 창고 팀이 뒤집어쓴다. 초과 판매는 그 한 건의 주문만 잃는 게 아니다——마켓플레이스 페널티, 셀러 평점 하락, 나쁜 리뷰. 풀 콤보 비용은 그 40개 단위의 가치를 훨씬 웃돈다.
충분히 겪고 나니 배웠다. OMS–WMS 재고 불일치는 매번 같은 다섯 가지 근본 원인으로 귀결된다. 그리고 어느 원인에 해당하는지 찾아내는 고정된 순서가 있다. 순서대로 밟으면 대부분의 인시던트는 30분 안에 특정된다.
숫자가 어긋나면, 다섯 가지 중 하나다
누군가 언쟁을 시작하기 전에 책임 소재를 정확히 가려라. 먼저 언쟁하는 건 인시던트 대응에서 가장 비싼 시간 보내기다.
첫째, 동기화 지연. 대부분의 OMS–WMS 연동은 실시간이 아니라 스케줄에 따라 동기화된다. 동기화 윈도우 안에서는 두 시스템이 어긋나는 게 정상——설계이지 버그가 아니다. "불일치" 중 놀라울 만큼 많은 건 5분 전의 OMS 숫자와 바로 이 순간의 WMS 숫자를 누군가 비교하고 있는 경우다. 수량을 비교하기 전에 타임스탬프를 비교하라.
둘째, 미차감 운송 중 재고. 할당 완료, 피킹 진행 중, 출하 스테이징 완료——WMS는 이미 그 단위들을 "가용"에서 빼놨는데, OMS는 아직 보유 재고로 표시한다. 피크 시즌에는 하루 수천 건의 주문이 있고, 운송 중 재고 볼륨만으로도 두 시스템 사이에 수백 단위의 격차가 벌어지기도 한다.
셋째, 입고됐으나 미반영된 반품. WMS는 반품을 받아서 격납했다. 실물은 돌아왔다. 하지만 그 반품을 OMS에 반영하는 메시지가 유실되거나 실패했다. OMS는 그 단위들이 팔렸다고 계속 믿고 있어서 가용 약속 재고는 만성적으로 낮게 돌고, 격차는 계속 커진다.
넷째, 미동기화된 순환 실사 조정. WMS는 실사를 하고 증감을 반영했는데, 그 조정이 OMS에 닿지 않았다. 시간이 지나면서 양쪽은 점점 벌어지고, 그 드리프트는 무작위로 보여서 조사가 고통스럽다.
다섯째, 깨진 다창고 매핑. OMS의 "Los Angeles DC"가 WMS의 두 개 물리적 건물에 매핑되어 있거나, OMS에 새 풀필먼트 거점이 생겼는데 WMS 매핑 테이블에 추가되지 않은 경우다. 이게 제일 교활하다. 각 시스템은 내부적으로 일관되고, 비교할 때만 모든 게 틀려 보인다.
내가 쓰는 경험칙은 이렇다. 각 시스템이 단독으로는 멀쓱해 보이고 비교할 때만 틀려 보이면, 매핑이나 동기화 정의를 의심하라. 격차가 시간에 따라 계속 커지면, 반품이나 실사 조정의 흐름이 끊긴 걸 의심하라.
실제 사례를 하나 소개한다. 작년에 가정용품 이커머스 창고에서 매주 월요일 아침마다 200~300 단위 격차가 나고, 주중 나머지는 깨끗했다. 순서대로 밟았다——타임스탬프, 운송 중, 반품, 실사 모두 이상 없음. 원인은 이랬했다. 주말 야간조가 오래된 건물 코드를 써서 WMS에서 로케이션 이동을 했던 거다. 매핑 테이블에 그 코드의 항목이 없어서, 조정 배치 전체가 OMS로 가는 길에 조용히 버려졌다. 월요일 아침에 격차가 가장 컸고, 평일 정상 출하로 점차 "희석"되면서 완벽한 주간 사이클이 만들어졌다. 불일치에 리듬이 있으면, 숫자만이 아니라 패턴을 보라.
깨지면, 탓하기 전에 절차를 밟아라
근본 원인의 유형이 특정될 때까지 회의를 소집하지 말고 책임을 묻지 마라. 한 사람, 노트북 한 대, 이 순서로.
먼저 타임스탬프를 맞춰라. 비교하기 전에 두 숫자를 같은 시점으로 가져와 동기화 윈도우 노이즈를 제거한다. 이 단계만으로 오경보의 최소 3분의 1이 걸러진다. 이걸 건너뛰는 사람이 많다. 2시간을 조사에 쓰고 나서야 서로 다른 시점을 비교하고 있었음을 깨닫는다.
타임스탬프를 맞춰도 격차가 남으면 운송 중을 조사하라. WMS에서 "할당됨·미피킹", "피킹 중", "출하 스테이징 완료"를 합산해 격차와 대조한다. 맞으면 정의의 문제다. OMS 가용 공식에서 운송 중을 차감해야 하거나, 운영이 "보유 재고"와 "판매 가능 재고"는 다르다는 걸 이해해야 하거나 둘 중 하나다.
운송 중으로 설명이 안 되면 반품을 조사하라. WMS의 최근 1주 반품 입고를 뽑아 OMS의 반품 반영과 한 줄씩 대조한다. 실패 재시도 큐에 특히 주의하라. 연동 대부분은 파이어 앤 포겟이다——유실된 메시지는 아무도 모니터링하지 않는 큐에 잠든 채로 남는다.
반품이 깨끗하면 순환 실사를 조사하라. WMS의 최근 실사 조정을 내보내 각 항목에 대응하는 OMS 동기화 레코드가 있는지 확인한다. 실사 조정은 저빈도지만 임팩트가 크다. 한 번의 푸시 누락이 수개월간 불일치를 남기기도 한다.

마지막으로 매핑을 조사하라. OMS 창고 목록과 WMS 물리적 건물 목록을 나란히 놓고 매핑 항목을 하나씩 따라가라. 신규 건물, 피크 시즌 임시 전방 재고 배치 거점, 서드파티 직송 사이트——매핑이 빠지는 건 이런 곳이다. 매핑이 틀렸다면 앞의 네 단계는 헛수고였다. 토대 자체가 기울어져 있다.
이 다섯 단계로 10건 중 9건은 고장 지점이 특정된다. 그제야 책임 분담 이야기를 하자. 동기화 지연은 아키텍피 판단이니 IT 몫이다. 반품 반영 실패는 연동 문제이니 이 또한 IT다. 실사 미푸시는 프로세스 문제이니 운영 몫이다. 매핑 파손은 대개 건물 오픈 때 양쪽이 맞춰보지 않은 탓이니, 이건 반반이다. 내 권고는 역할 분담을 문서로 적어 보관하는 것이다. 일일 정산은 운영, 인터페이스와 잡은 IT가 오너다. 뭔가 깨지면 절차를 순서대로 밟는다. 그러면 누구도 먼저 불만을 토로할 수 없다.
다음 새벽 2시 전화를 기다리지 마라
문제 해결은 소화 활동이다. 방화는 세 가지 장치다. 어느 것도 비싸지 않다.
첫째, 일일 정산 잡을 돌려라. SKU별로 OMS 가용과 WMS 가용을 비교해 임계값을 넘으면 자동으로 알림한다. 임계값을 너무 빡빡하게 잡지 마라——나는 보통 5개 단위 초과, 또는 SKU 판매 가능 수량의 2% 초과 같은 값을 권한다. 그러지 않으면 알림 피로로 일주일 만에 전부 죽는다. 알림은 이메일만이 아니라 작업용 그룹 채팅으로 보내라. 그 이메일은 아무도 안 읽는다.
둘째, 실사 조정을 OMS에 실시간으로 푸시하라. 월말에 배치 처리하는 회사가 아직 많은데, 그러면 매달 며칠간 두 시스템이 서로 틀린 상태가 된다. 조정 시 푸시로 바꿔라. 기술적으로는 API 호출이 한 번 더 늘어나는 것뿐이다.
셋째, 운송 중을 OMS에서 보이게 하라. 고객 서비스와 운영이 보유 재고 옆에 운송 중과 스테이징 완료 수량을 볼 수 있게 하라. 외로운 보유 재고 숫자 하나가 아니라. 초과 판매 전화가 오면 담당자는 진짜 품절인지 어딤가 카트 위에 있는지 말할 수 있다——새벽 두 시 반에 누굴 깨울 필요가 없어진다.
이 세 가지를 하면 불일치가 0이 되지는 않지만, 새벽 2:30 전화는 절반으로 줄어들어야 한다.
마지막으로 하나만 묻겠다. 지금 당신의 OMS–WMS 재고 정확도는 얼마인가? 답하기 전에 생각해봐라. 그 숫자를 어디서 찾을지, 누가 얼마나 자주 확인하는지, 어느 정도 격차에서 액션을 취하는지. 이 세 가지에 답할 수 없으면, 새벽 두 시 반의 그 전화는 또 울릴 것이다. 문제는 "언제"뿐이다.
영어판 번역본입니다. 내용이 다를 경우 영어판을 우선합니다.











