WMS가 커머스 MongoDB에 직접 붙어 배송·아웃박스·상품을 읽고 씁니다(붉은 선). 커머스는 자기 데이터가 바뀐 것을 모릅니다.
WMS와 커머스 DB 사이의 선이 없습니다. 배송 이벤트는 Kafka로, 화면용 조회·연결은 커머스 내부 API로만 오갑니다.
커머스가 아웃박스에 적재하면 WMS가 5초마다 커머스 DB를 폴링해 CAS로 선점하고 Kafka로 OMS에 보냅니다. OMS가 수집을 마치면 WMS가 수집 완료 표시를 커머스 배송에 직접 씁니다.
커머스 api의 릴레이가 자기 아웃박스를 폴링해 Kafka로 발행합니다. 토픽·메시지·키는 그대로라 OMS는 바뀌지 않습니다. 수집 완료 이벤트는 커머스 워커가 받고, 이미 표시돼 있으면 NOOP으로 넘깁니다.
OMS가 송장 발급을 Kafka로 알리면 WMS가 현재 상태를 보지 않고 커머스 배송을 배송준비중으로 덮어씁니다. 이 전이는 커머스 코드에 없습니다.
커머스 워커가 같은 이벤트를 받아, 상태가 결제완료·배송준비중일 때만 배송준비중으로 바꿉니다. 이미 앞선 상태면 NOOP입니다.
WMS가 패킹 완료를 Kafka로 내고 자기가 다시 받아 커머스 배송을 배송중으로 덮어씁니다. 배송완료 건도 되돌릴 수 있습니다.
WMS는 이벤트만 내고, 커머스 워커가 결제완료·배송준비중인 건만 배송중으로 바꿉니다.
OMS에서 주문 상태(보류·확정·출고·출고취소)를 바꾸면 WMS가 커머스 배송의 현재 상태를 직접 읽고 바꿉니다.
커머스 워커가 같은 전이 규칙을 상태 선행조건으로 적용합니다. 여러 건 중 일부만 반영되면 PARTIAL로 남기고 실패 항목은 DLQ로 보냅니다.
OMS에서 수령인·주소·희망일·송장을 고치면 WMS가 커머스 배송 문서를 직접 덮어씁니다.
커머스 워커가 null이 아닌 값만 반영하고, 빈 송장 값은 건너뛰어 기존 송장을 지우지 않습니다.
WMS 관리자 화면이 커머스 배송·상품을 직접 조회하고, 상품 연결 값과 재수집용 아웃박스 행을 직접 씁니다.
WMS 화면은 커머스 내부 API(배송 상태 조회·재수집·상품 조회/연결)를 부르고, WMS의 커머스 DB 연결은 없앴습니다.