화요일 새벽 2시 14분, 야간조 리더가 피킹 실패 건으로 전화를 걸어왔다. WCS 화면에는 고속 회전 SKU 토트 12개가 셔틀 시스템 안에 있다고 표시되어 있었다. WMS 화면에는 가용 재고가 0이었다. 피커는 이미 통로를 두 번이나 훑었다. 원인을 파악했을 때――저녁조가 스캔 없이 예외품을 손으로 치워버린 것이었다――이미 40분을 날렸고, 30건의 주문에 대한 운송사 마감 시간을 놓쳤다.
그날 밤의 비용은 지금부터 설명할 조정 루틴을 1년간 돌리는 비용보다 컸다.
두 시스템, 두 가지 '여기'의 정의
먼저 내면화해야 할 것: WCS와 WMS는 같은 종류의 재고를 추적하지 않는다. WCS는 캐리어를 추적한다――어느 토트가 어느 컨베이어 구간에 있는지, 어느 셔틀이 어느 파렛을 잡고 있는지, 각 AMR이 무엇을 싣고 있는지. 장비 위치로 생각한다. WMS는 로케이션을 추적한다――어느 랙의 어느 슬롯에 재고가 얼마나 있는지. 장부 위치로 생각한다.
제품이 장비 위를 이동하는 동안 WCS는 '내 손에 있다'고 정확히 말하고, WMS는 '아직 장부에 오르지 않았다'고 정확히 말한다. 어느 쪽도 틀리지 않았다. 사투리가 다를 뿐이다. 이 전제를 건너뛴 조정 작업은 전부 두 팀이 서로 다른 얘기를 하는 것으로 끝난다.
규모감을 느껴보자: 성수기 어느 저녁 6시, 600미터 컨베이어 루프가 한 번에 400개가 넘는 토트를 싣고 있었다――WCS 쪽에서는 운송 중 재고 3,800개가 넘었고, WMS 장부에는 4퍼센트 가까이 적었다. 잃어버린 건 하나도 없었다. 전부 사투리였다. 하지만 사투리를 모르는 조정 루틴은 매일 늑대가 나타났다며 울고, 팀이 알림을 무시하는 법을 익히면 진짜 이상 징후는 잡음에 묻힌다. 모두가 이해하는 4퍼센트 차이는 아무도 설명할 수 없는 0.5퍼센트 차이보다 낫다.
불일치의 세 가지 모습
운송 중 편차는 정직하다. 컨베이어 위, 셔틀 위, AMR 위의 제품――어느 보관 로케이션에도 없다. 성수기에는 600미터 컨베이어 루프가 한 번에 수백 개의 토트를 실을 수 있고, 운송 중 재고는 전체 재고의 5퍼센트를 넘을 수 있다. 어느 시점에서든 두 시스템 사이의 몇 퍼센트 포인트 차이는 정상이다. 없애는 게 일이 아니라, 그 차이가 분실이 아니라 운송 중이라는 걸 아는 게 일이다.
예외 반출은 위험하다. 장비가 문제 상자를 예외 슈트로 빼내거나, 현장의 누군가가 제품을 물리적으로 꺼낸다. WCS는 이동을 기록하고, WMS는 확정을 못 받는다. 장부가 어긋난다――그리고 운송 중 재고와 달리 이 제품은 정말로 있어야 할 자리에 없다.
신호 손실은 열받는다. 바코드 스캐너가 리드를 놓친다. PLC가 3분간 오프라인이 된다. 물리적 이동은 일어났는데 데이터는 동기화되지 않았다. 제품은 아무 문제 없이 있어야 할 자리에 잘 있는데, 두 시스템은 여전히 수량에 동의하지 못한다.
세 모습 중 예외 반출이 가장 비싸다. 실패한 피킹 한 건은 피커의 헛걸음, 재카운트, 수색을 낳는다――15분이 사라진다. 성수기에는 하루에 수십 번, 재작업 인건비와 SLA 피해가 빠르게 쌓인다. 잘못된 데이터로 인한 오피킹은 고객 클레임으로 더 비싸진다. 조정은 IT 잡무가 아니다. 돈에 직결되어 있다.
실제로 돌아가는 조정 루틴
실시간 조정은 환상이다. WCS는 밀리초 단위 장비 세계에 살고, WMS는 트랜잭션 장부 세계에 산다. 두 템포를 무리하게 맞추려 하면 팀은 지치고 핵심은 빗나간다.
통하는 건 두 겹 구조다. 첫째, 시간당 편차 스냅샷――총수량과 핵심 SKU만 보고, 이상 변동에 알림을 건다. 나는 단일 SKU당 5개 같은 임계값을 쓴다. 너무 빡빡하게 잡으면 하루에 수십 개의 알림이 와서 모두가 무시하는 법을 익히고, 그건 알림이 없는 것과 같다. 둘째, 교대 마감 전에 하는 하루 전체 조정. 열린 편차마다 담당자를 배정한다. 주인이 없는 편차는 불일치가 전설이 되는 길이다.
편차를 잡았으면 한 줄의 사슬을 따라간다. 먼저 WCS 이벤트 로그에서 시작: LPN이나 토트 ID를 시간 역순으로 추적해 마지막으로 기록된 동작까지――어떤 장비가 마지막으로 봤는지. 그다음 같은 상품의 WMS 트랜잭션 이력을 뽑는다: 장부상의 마지막 이동은 뭐였는지. 타임스탬프가 맞지 않으면 인터페이스 메시지를 잃었을 가능성이 높다. 타임스탬프는 맞는데 수량이 맞지 않으면 누군가 시스템에 알리지 않고 제품을 건드렸다.

2023년 프로젝트 사례가 아직도 기억에 남는다. 편차는 야간조에 몰렸고 주간은 깨끗했다. WCS 로그에는 예외 슈트 제품이 오전 2시나 3시쯤 WMS 기록 없이 '사라지는' 모습이 찍혔다. 알고 보니 야간 리더가 라인을 멈추지 않으려고 예외품을 손으로 치우고 있었다――스캔은 한 번도 하지 않았다. 소프트웨어 문제가 아니다. 시스템이 예방할 수 있도록 설계되었어야 할 사람의 문제다.
예방책으로 넘어가자, 영향이 큰 순서대로. 첫째: 예외 슈트는 제품 반출에 스캔을 필수로――물리적으로, 가능하다면, 두 시스템이 기록하지 않고는 아무것도 나가지 못하게. 둘째: 모든 수동 개입은 핸드헬드 단말기의 2단계 예외 플로우로 진행한다. 그러면 WMS가 제품과 함께 장부를 움직인다. 2단계로 유지할 것. 긴 플로우는 안 쓴다. 셋째: WCS와 WMS 사이에 메시지 큐를 둔다. 네트워크 순간 단절은 인생의 이치다. 문제는 메시지가 재전송되는지, 조용히 버려지는지다. 오래된 연동 중 상당수는 직접 결합이라 거기서 편차가 조용히 쌓인다. 한 패킷씩.
다음 불일치가 생기면 이 순서로 세 가지 질문을. 제품은 지금 장비 위에 있는가, 로케이션에 있는가? WCS 이벤트 로그가 마지막으로 본 것은 무엇인가? WMS 트랜잭션 이력이 마지막으로 기록한 것은 무엇인가? 열 번 중 여덟 번은 세 번째 답이 논쟁을 끝낸다. 세 답을 적어라. 쓰는 규율이 기억하는 자신감을 이긴다. 두 시스템은 영원히 완전히 일치하지 않을 것이다――당신의 일은 그 불일치를 지루하고 설명 가능하게 만드는 것이다.
영어판 번역본입니다. 내용이 다를 경우 영어판을 우선합니다.











