월요일 아침 8시, 커피가 다 내려지기도 전에 전화가 울렸다. 한 고객이 그룹 채팅에 스크린샷을 올렸다. OMS 예외 큐에 47건의 주문이 쌓여 있고, 전부 '제품 불일치'로 플래그된 상태였다. 블랙프라이데이에서 3주가 지났고 반품 시즌이 한창이라, 이 47건이 더 방치되면 고객서비스는 마비될 판이었다.

원격으로 로그인해 한 번 보고는 웃을 수밖에 없었다. 고장 난 건 아무것도 없었다. 일주일 전 새 TikTok Shop 매장을 열었고, 운영팀이 스무 개가 넘는 베스트셀러를 TikTok식 SKU 명명 규칙으로 등록했는데, OMS의 그 무엇과도 일치하지 않았던 것이다. 주문은 문제없이 들어오고 있었다――OMS는 그 SKU를 단 하나도 인식하지 못했고, 할 수 있는 건 하나뿐이었다. 예외 큐에 줄 세워 놓고 사람이 수령하러 오기를 기다리는 것.

이것이 멀티채널 판매에서 가장 흔하면서도 가장 과소평가되는 문제다. 채널 상품 매핑. 하나의 제품에 다섯 개의 이름. Amazon에서는 AMZ-BLK-HOODIE-L, Walmart에서는 WM_98213, Shopify 스토어에서는 HOODIE-BLK-L-2024, TikTok Shop에서는 TTS@hoodie-black-l. 이름은 다섯 개, 실제 후드티는 하나. 채널에서 주문이 OMS로 가져와지는 순간, 시스템은 이 다섯 개의 이름이 같은 것을 가리킨다는 걸 알아야 한다. 그렇지 않으면, 잘해야 예외의 산――못하면 오출고와 잘못된 재고 차감이 기다린다.

이 업계에서 20년이 가르쳐 준 확실한 한 가지. 매핑 테이블은 스프레드시트가 아니라 OMS 주문 흐름 전체를 떠받치는 기초다. 기초를 잘못 세우면 하류의 모든 것――WMS 출고, 재무 정산――이 함께 기울어진다.

매핑 테이블의 실체

결론부터 말하겠다. 올바른 매핑의 입자는 '채널'이 아니다. '채널 × 매장'이다.

많은 기업이 첫 매핑 테이블을 채널 단위로 만든다――Amazon SKU를 OMS 제품에, Walmart SKU를 OMS 제품에. 그러다 두 번째 Amazon 매장을 연다. 본브랜드 매장과 클리어런스 아울렛이 같은 제품을 다른 채널 SKU로 판다. 테이블이 무너진다. 그래서 첫날부터 매핑 키는 세 요소로 구성해야 한다. 채널 + 매장 + 채널측 SKU.

실제로 돌아가는 매핑 테이블에 필요한 열은 몇 개뿐이다. 채널 코드, 매장 ID, 원시 채널측 SKU, 채널측 제목 스냅샷, 대응되는 OMS 제품 ID, 상태, 적용 시작일. 왜 제목 스냅샷에 집착하느냐고들 묻는다. 예외 큐를 트리아지할 때 제목을 한 번 보면 그 주문이 뭔지 대충 감이 온다――SKU 문자열로 추측하는 것보다 10배 빠르다. 상태 열도 빼먹으면 안 된다. 상품이 채널에서 판매 종료되면 매핑을 비활성화로 표시하라. 삭제하지 마라. 삭제하면 히스토리 주문에서 어떻게 번역됐는지의 기록이 전부 사라진다. 정산은 악몽이 된다.

현장에서의 교훈 세 가지를 더.

첫째, 매칭은 반드시 채널측 SKU로 하고, 제목은 절대 쓰지 마라. 제목은 운영 담당자가 하루 종일 고쳐 쓰는 것――오늘은 'Hot Sale', 내일은 새 키워드. 제목으로 매칭하면 매핑을 매일 다시 만들어야 한다. SKU는 비교적 안정적이다. 채널 주문에서 가장 믿을 수 있는 기준점이다.

둘째, 비교 전에 대소문자와 공백을 정규화하라. Shopify에서 SKU가 뒤에 공백 하나 달고 오고, Amazon 측은 전부 대문자, OMS는 소문자로 저장한다――시스템에는 세 개의 다른 문자열이지만 사람의 눈에는 하나의 제품. 번역 전에 전부 소문자로 만들고 공백을 제거하면, 코드 한 줄로 '가짜' 예외의 약 3분의 1이 사라진다.

셋째, UPC를 폴백 키로 유지하라. SKU는 각 채널이 지어낸 이름이지만 UPC는 제품의 주민등록번호이며 어디서나 같다. 새 상품을 등록할 때 제품 마스터에 기록해 둔다. SKU가 일치하지 않으면 UPC로 한 번 더 대조해라. 생각보다 많은 주문이 구제된다.

매칭되지 않은 주문의 행방

번역에 실패한 주문은 예외 큐에 넣는다. 삭제하지 말고, 강제 생성은 절대 하지 마라.

큐는 세 가지 문제를 해결해야 한다. 예외가 정상 주문을 막지 않게 할 것, 사람이 빨리 처리할 수 있게 할 것, 수정 후 주문이 자동 복구되게 할 것. 내 표준 구성은 이렇다. 주문 수집 작업이 매핑 안 된 SKU에 부딪혀도 OMS 주문을 만들지 않는다. 예외 레코드 하나를 쓴다――채널, 매장, 채널 SKU, 제목, 수량, 주문 시각, '미인계' 플래그. 정상 주문은 1초의 지연도 없이 계속 흐른다.

사람이 하루에 두 번 큐를 훑는다――오전 10시와 오후 4시, 성수기에는 네 번. 수는 세 가지뿐이다. '인계받기': 이 채널 SKU가 어떤 OMS 제품인지 확인하고 매핑을 추가하면 주문이 자동 재번역된다. '합치기': 같은 구매자가 여러 채널에서 주문했으면 회사 정책에 따라 박스를 합친다. '폐기': 테스트 주문과 부정 주문은 종료 처리.

그 루틴 뒤에는 뼈아픈 교훈이 있다. Thanksgiving 2023――캘리포니아 온타리오의 한 3PL 고객이 매핑도 없이 200개가 넘는 신SKU를 블랙프라이데이에 맞춰 공개했다. 수집 작업은 충실히 예외를 전부 큐에 넣었지만, 아무도 보지 않았다――모두 '시스템이 알아서 하겠지'라고 생각했기 때문이다. 3일 뒤 큐에는 900건이 넘는 주문이 쌓였고, 고객서비스는 이미 세 번째 항의 전화 러시를 받고 있었다. 그 이후로 내 고객용 규칙은 이렇다. 예외 큐에는 반드시 오너를 둔다, 성수기에는 하루 네 번 이상 확인한다, 50건 초과 적체 시 SMS 알림을 보낸다. 아무도 보지 않는 큐는 큐가 없는 것과 같다.

별도 단락을 쓸 만한 특수 케이스가 있다. 번들. 하나의 채널 SKU가 두 개의 OMS 제품에 매핑되는――'후드티 사면 양말 공짜'라는 고전적인 팩 SKU――관계는 일대다 관계다. 번역 과정에서 두 개의 주문 라인으로 나눠야 하며, 각각이 자기 재고를 차감한다. 많은 OMS 제품이 일대일 매핑만 지원하므로, 선정 단계에서 일대다 지원 여부를 물어라. 고라이브 후에 알면 운영 중인 시스템을 계속 패치하게 된다.

새 채널 온보딩 3단계

모든 새 채널은 매핑을 0부터 시작한다. 내 표준 플레이북은 3단계이며, 지금까지 한 번도 실패한 적이 없다.

1단계: 전체 SKU 목록을 내보내고, 팔기 전에 정합을 맞춘다. 매장이 만들어지고 상품이 게시되면, 첫 번째 일은 파는 것이 아니다――채널 백엔드에서 라이브 SKU 목록을 추출해 OMS 제품 마스터와 한 줄씩 대조해 첫 매핑 테이블을 만드는 것이다. 빗나감 하나마다 현장에서 판단하라. OMS에 제품이 없는 건지(만든다), 운영이 채널 SKU를 잘못 명명한 건지(고친다). 순서는 항상 '매핑 먼저, 판매 나중'이다. 순서를 뒤집으면 월요일 아침의 그 47건 예외를 얻게 된다.

2단계: 주문 수집을 연결하고, 번역과 예외 처리를 함께 릴리스하라. API 연동이 끝나면 바로 풀볼륨으로 가지 마라. 최근 7일간의 실제 주문을 번역 플로우에 다시 흘려보내고 매핑 커버리지를 확인한다. 내 기준은 98%――그 아래면 첫 매핑 테이블에 구멍이 있는 것이니 메우러 가라. 리플레이가 통과하면 라이브 수집을 켜고, 진짜 트러블이 오기 전(후가 아닌)에 큐 알림 규칙을 설정해 둔다.

3단계: 일주일간 정산하라. 커버리지가 안정되기 전에는 채널이 온보딩된 게 아니다. 매일 세 개의 숫자를 대조한다. 채널측 주문 수, OMS 주문 성공 수, 큐의 신규 예외. 첫 주는 매일, 둘째 주는 격일로, 깨끗해지면 정기 점검으로 넘긴다. 새 채널의 매핑 테이블은 처음 2주간 거의 매일 몇 행씩 늘어난다――정상이다. 롱테일 SKU는 항상 빠져나가지만, 프로세스가 안정되면 매핑 하나 추가는 2분이면 끝난다.

창고 사무실에서 멀티채널 주문을 처리하는 이커머스 담당자

이 세 단계를 밟으면 새 채널이 OMS에서 진짜로 라이브가 된다. 운영팀이 여섯 번째, 일곱 번째 채널을 추가하고 싶을 때도 같은 플레이북을 돌리면 하루 만에 끝난다.

부록: 복사해서 쓰는 매핑 테이블

  • mapping_id: 기본 키, 시스템 생성
  • channel_code: 예 amazon, walmart, shopify, tiktok-shop
  • store_id: 하나의 채널에서 여러 매장 구분
  • channel_sku: 원시 채널측 SKU. (channel_code, store_id, channel_sku)에 유니크 인덱스
  • channel_title: 사람 트리아지용 제목 스냅샷
  • oms_product_id: 대응되는 OMS 제품 키
  • qty_factor: 일대다 번들 분할용 수량 승수 (기본값 1)
  • upc: SKU 빗나감 시 폴백 키
  • status: 활성 또는 비활성――판매 종료는 비활성화, 삭제 금지
  • effective_from: 매핑 적용 시작일
  • updated_by, updated_at: 누가 언제 건드렸는지
  • note: 맥락, 예 "first batch, TikTok new store, BF 2026"

테이블 하나, 열은 열두 개. 깨끗하게 유지하면 멀티채널 주문이 삐뚤어질 리 없다.

영어판 번역본입니다. 내용이 다를 경우 영어판을 우선합니다.