REINDEERS 플랫폼의 핵심은 단순한 화면이나 기능의 집합이 아니라, "입고 → 재고 → 출고 → 배차 → 배송 → 정산" 전체를 하나의 상태머신 위에서 자동으로 운용하는 Core Logistics Engine이다.
이 문서는 그 중에서도 가장 중요한 4개의 심층 기술 요소, 즉 재고 할당 알고리즘 · 직배송(Direct DO) 고급 라우팅 · AI Orchestrator Action Schema · RAG 벡터 인덱싱 전략을 개발자 기준으로 상세히 기록한 기술 문서이다. 4,300개 이상의 파트너사가 사용하는 플랫폼에서 이 네 가지 기술 요소가 어떻게 실제 물류 운영을 자동화하는지 설명한다.
1. 재고 할당 엔진의 알고리즘 상세
출고 ASN(OSN)이 승인되면, 시스템은 자동으로 재고를 분석하여 창고별 DO를 생성한다. 이 과정은 다음 4개의 핵심 알고리즘을 기반으로 한다. 25,000건 이상의 실거래 데이터에서 추출한 출고 패턴이 알고리즘의 가중치 조정에 사용되며, 고객사별로 다른 우선순위 정책이 자동 반영된다.
1.1 FEFO(유통기한 우선) 알고리즘
재고 할당의 최우선 규칙은 FEFO이다.
1. SKU별로 모든 로트 수집
2. 유통기한 오름차순으로 정렬
3. 출고 요청 수량을 상위 로트부터 채움
4. 유통기한 임박 로트는 경고 플래그 기록
단순해 보이지만 실제 구현에서는 복잡한 예외가 많다. 유통기한이 배송 예상 도착일보다 앞서는 로트는 할당 대상에서 자동 제외된다. 또한 고객사가 "잔여 유통기한 30일 미만 제품 수령 불가"같은 조건을 계약에 명시한 경우, 이 조건이 FEFO보다 우선 적용된다.
FEFO 적용 예시
출고 요청: 120개
재고:
LOT-A(2025-03-01): 50개
LOT-B(2025-04-01): 70개
LOT-C(2025-06-01): 100개
-> A 50 + B 70 = 120 (C는 미사용)
1.2 거리 우선 알고리즘 (Warehouse Distance Ordering)
출고지(창고)와 고객 배송지 간의 거리 차이는 DO 생성에서 중요한 요소다. 거리 계산은 Haversine Formula를 기반으로 한다.
// Haversine Distance
d = 2r * arcsin( sqrt( sin^2((lat2-lat1)/2)
+ cos(lat1)*cos(lat2)*sin^2((lng2-lng1)/2) ) )
- 70km 이하인 창고는 1순위 후보
- 70-150km는 2순위
- 150km 이상은 예외 처리 → 관리자 승인 필요
Haversine은 직선 거리이므로 실제 도로 거리와 차이가 있다. 이를 보정하기 위해 국가별·지역별 "도로 거리 보정 계수"를 적용한다. 예를 들어 방콕 시내는 직선 거리 대비 도로 거리가 평균 1.4배이고, 태국 외곽 지역은 1.15배 수준이다. 이 보정 계수는 과거 운행 데이터에서 산출한다.
1.3 CBM 기반 적재 가능성 검사
출고된 재고가 실질적으로 트럭 CBM에 적재 가능한지 계산한다.
필요CBM = sum(SKU.volume * qty)
트럭CBM >= 필요CBM ? OK : FAIL
필요한 CBM이 트럭의 여유 CBM보다 클 경우:
- 다른 트럭 추천 -- 가용 트럭 목록에서 CBM이 충분한 차량을 자동 검색
- 배송 분할 제안 -- 2대 이상의 트럭으로 나누어 배송하는 방안과 비용 비교
- 직접 경로가 아닌 중간 Drop-Off 경로 제안 -- 허브 창고를 경유하여 소형 차량으로 재적재
CBM 계산에서 주의할 점은 "이론적 CBM"과 "실적재 CBM"의 차이다. 비정형 화물(예: 파이프, 프로파일)은 이론적 CBM보다 실제 적재 시 더 많은 공간을 차지한다. SKU별로 "적재 효율 계수"를 설정하여 이 차이를 보정한다.
1.4 로트 분산 최소화 알고리즘
가능한 한 "로트 일관성"을 유지하는 방향으로 할당한다.
1. 동일 로트 -> 동일 DO
2. 분산 로트 구성 시 각 DO가 최소 로트 수 가지도록 분리
3. 다중 창고 재고의 경우 창고별로 로트 일관성을 유지
로트 분산 최소화가 중요한 이유는 품질 추적성(traceability) 때문이다. 산업 자재에서 불량이 발생했을 때 해당 로트를 추적해야 하는데, 로트가 여러 DO에 걸쳐 분산되면 추적 범위가 넓어진다. 또한 고객사 입장에서 동일 주문에 대해 여러 로트의 제품이 섞여 도착하면 입고 검수 부담이 커진다.
2. Direct DO(직배송) 고급 처리 — 다구간 경로 & 시간 제약 기반 알고리즘
Direct DO는 ASN 없이 바로 DO가 생성되는 케이스로, 실제 운영에서는 긴급 배송, 단일 라우팅, 생산지→고객 직배송에 주로 사용된다. 창고를 경유하지 않으므로 보관료가 발생하지 않지만, 경로 최적화의 복잡도는 오히려 높다.
2.1 다구간 경로 계산
Direct DO는 다음과 같은 복수 경로 옵션을 생성한다.
- 단일 구간: A → B
- 다중 구간: A → 허브1 → B
- 재적재 경로: A → 창고 → B
각 시나리오별 ETA/비용/적재율을 계산해 최종 추천 경로를 AI가 선택한다. 비용 계산에는 유류비, 통행료, 기사 인건비, 차량 감가상각비가 포함되며, 다중 구간의 경우 허브에서의 적하차 시간과 비용도 반영된다.
2.2 시간 제약 기반 DO 생성
Direct DO는 다음의 시간 제약을 고려해야 한다.
- 고객 수령 가능 시간대(time_window)
- 기사 근무시간(shift_start/end)
- 트럭의 도착 예상시간(ETA)
ETA + unload_time <= time_window_end ? OK : FAIL
시간 제약 위반이 감지되면 시스템은 자동으로 3가지 대안을 제시한다. 첫째, 더 가까운 위치의 기사에게 재배차. 둘째, 출발 시간을 앞당김. 셋째, 고객에게 time_window 변경을 요청하는 알림 발송이다.
2.3 우선순위 결정 알고리즘
Direct DO는 출고 DO보다 우선순위가 높은 경우가 많다.
- Priority 1: 긴급(urgent) -- SLA 위반 임박 건
- Priority 2: 당일 요청(same_day) -- 당일 접수된 긴급 배송
- Priority 3: 일반 예약 -- 사전 계획된 배송
AI는 우선순위에 따라 트럭 재배치, 경로 삽입 여부를 결정한다. Priority 1 건이 발생하면 이미 배차된 다른 DO의 순서를 재조정할 수도 있다. 이때 영향받는 DO의 ETA 변동이 해당 고객사의 time_window를 초과하지 않는지 자동으로 검증한다.
3. AI Orchestrator — JSON Action Schema 상세 구조
AI는 업무를 직접 실행하지 않는다. 대신 "업무를 수행하기 위해 필요한 Action 리스트"를 JSON으로 설계해 서버로 전달한다. 이 간접 실행 구조가 REINDEERS AI 아키텍처의 안전장치다.
3.1 Action Schema 기본
{
"action": "create_asn_out",
"parameters": {
"customer_id": 10,
"items": [...],
"delivery_date": "2025-12-01"
},
"context": {
"company_id": 2,
"locale": "th-TH",
"initiator": "user:34"
}
}
context 필드가 핵심이다. company_id는 멀티테넌트 환경에서 데이터 격리를 보장하고, initiator는 누가 이 Action을 요청했는지 감사 로그에 기록한다. AI가 자동으로 생성한 Action의 경우 initiator에 system:ai_orchestrator가 기록되어, 사람이 시작한 작업과 AI가 시작한 작업을 명확히 구분할 수 있다.
3.2 Action 타입 구성
- create_asn_in
- create_asn_out
- allocate_inventory
- generate_pickup_do
- generate_delivery_do
- generate_direct_do
- schedule_dispatch
- reschedule_route
- request_inventory_confirmation
3.3 Action 검증 흐름
AI -> JSON Action -> Schema Validation
-> 상태머신 검증
-> 권한/회사 분리 검증
-> 실제 API or MQ로 실행
이 구조는 AI가 잘못 판단해도 시스템 오류로 이어지지 않도록 한다. Schema Validation에서 필수 필드 누락이나 타입 불일치를 잡고, 상태머신 검증에서 "이미 출고 완료된 ASN에 대해 다시 DO를 생성하려는" 같은 논리적 오류를 차단한다. 권한/회사 분리 검증은 A 회사의 AI가 B 회사의 데이터를 참조하거나 조작하는 것을 원천 차단한다.
4. RAG 벡터 스키마 & Embedding 전략
LLM이 물류 데이터 전체를 이해하게 하는 것은 불가능하다. 따라서 REINDEERS는 RAG 기법을 이용해 "AI에게 꼭 필요한 문맥만" 전달한다.
4.1 RAG 인덱싱 대상
- SKU 데이터 (다국어명, 속성, 규격) -- 한국어, 태국어, 영어, 중국어, 말레이어 5개 언어
- ASN(입고/출고)의 텍스트화된 요약
- DO 기록 및 dispatch 로그
- 고객사 정책(출고 정책/유통기한 정책) -- 바이어 2,500개 이상의 개별 정책
- 창고 Zone/Rack/Bin 설명
- AI Action 결과 히스토리 -- 과거에 AI가 내린 판단과 그 결과를 학습 데이터로 활용
4.2 Vector Schema 설계
{
"id": "sku:501:lotA",
"company_id": 2,
"type": "sku",
"vector": [...],
"payload": {
"sku_id": 501,
"name_ko": "알루미늄 프로파일",
"name_th": "...",
"size": "...",
"lot": "LOT-A",
"expire_at": "2025-03-01"
}
}
Vector Schema에서 company_id를 최상위 필터로 두는 것이 설계의 핵심이다. 벡터 검색 시 반드시 company_id로 먼저 필터링한 후 유사도 검색을 수행한다. 이렇게 하면 A 회사의 데이터가 B 회사의 AI 판단에 영향을 주는 것을 구조적으로 방지한다. $130B 이상 규모의 B2B 시장에서 데이터 격리는 신뢰의 기본 조건이다.
4.3 Embedding 전략
- SKU 이름 + 규격 + 고객사 설명을 하나의 문맥으로 묶어 Embedding
- ASN/DO는 JSON 형식을 "텍스트화한 상태"로 Embedding
- 고객사 정책은 "규칙 기반 문장"으로 Embedding -- 예: "이 고객은 잔여 유통기한 60일 미만 제품을 거부한다"
- 다국어 처리를 위해 multilingual embedding 사용 -- 4개국 언어를 동일 벡터 공간에서 처리
4.4 Retrieval Flow
사용자 명령
-> 질의 벡터화
-> top-k 문맥 검색
-> context bundle 구성
-> LLM에 지시문 + 문맥 전달
-> Action JSON 생성
top-k는 기본 5로 설정하되, Action 타입에 따라 동적으로 조정된다. 재고 할당 관련 명령은 k=10으로 늘려 더 많은 재고 정보를 참조하고, 단순 배차 명령은 k=3으로 줄여 응답 속도를 높인다.
5. 이 모든 기술이 연결되는 실제 예시
다음과 같은 운영자 명령이 있다고 가정한다.
"내일 고객 A에게 120박스 출고 준비해줘."
5.1 단계별 실제 동작
- 문장 → AI 입력 처리 -- 자연어를 구조화된 의도(intent)로 파싱
- RAG로 고객 A 재고·정책·과거 출고 문맥 조회 -- company_id 기반 필터링 후 top-k 검색
- AI가 Action 리스트 생성 -- create_asn_out + allocate_inventory + generate_delivery_do
- 서버에서 Action Validation -- Schema, 상태머신, 권한 3단계 검증
- ASN(출고) 자동 생성
- 재고 할당(FEFO + 거리 + 로트 최소화) -- 고객 A의 계약 조건(잔여 유통기한 30일 이상) 자동 반영
- 창고별 Delivery DO 자동 분리 생성 -- 다중 창고 재고 분할 시 최적 조합 계산
- Direct DO 후보와 비교 후 일반 출고 선택 -- 비용 비교 결과 일반 출고가 15% 저렴
- 배차 엔진이 트럭·기사 자동 배정 -- 피로도, 거리, 적재량 종합 점수 기반
이 전체 과정이 사람의 개입 없이 수 초 내에 완료된다. 운영자는 최종 결과를 확인하고 승인만 하면 된다.
6. REINDEERS 기술 엔진의 현재 위치
REINDEERS는 단순한 WMS나 배송 관리 시스템이 아니다. 내부적으로는 데이터 모델 + 상태머신 + AI + RAG + 배차 알고리즘 + 재고 엔진을 결합한 하나의 자동화 엔진이다.
이 문서에 소개된 구조들은 모두 실제 운영 환경에서 확장 가능한 형태로 설계되었으며, AI가 잘못된 판단을 하더라도 시스템은 안정적으로 작동하도록 설계되어 있다. 2026년 3월 DVRP 베타에서 이 구조가 처음 실환경에 적용되고, 이후 POP 베타(2026년 4~5월)와 연동되어 풀필먼트 전체를 커버하는 물류 OS로 확장될 예정이다.
시리즈 가이드
이 시리즈는 REINDEERS CORE ENGINE / TECH DEEP DIVE 전체 흐름 중 하나입니다.
- (다음) REINDEERS TECH DEEP DIVE — Part 2
- (전체 목록) Part 1(2025-11-22), Part 2, 3, 4, 5, 6, 7, 8