RCS 작업 스케줄링을 병원 응급실 트리아지 데스크라고 생각해 보세요. 환자(작업)가 계속 도착하고, 트리아지 간호사(스케줄러)가 중증도(우선순위)에 따라 누가 먼저 외상실(로봇)에 들어갈지 결정합니다. 응급 차선은 진짜 응급 상황을 위해 존재합니다. 하지만 모든 가족이 "우리가 급하다"고 외치면 트리아지는 붕괴합니다. RCS 작업 우선순위 설정이 바로 이 일을 합니다. 누가 먼저 타고 누가 기다릴지를 결정하는 것입니다.

작동 방식: 큐, 가중치, 디스패치 사이클

RCS는 로봇 플릿의 두뇌입니다. 100 ms에서 약 1초마다 디스패치 사이클을 실행합니다. 대기 중인 모든 작업에 점수를 매기고, 정렬한 뒤, 최고 점수를 유휴 로봇에 할당합니다. 작업 점수는 대략 다음과 같습니다.

task score = priority weight × f(wait time, distance, battery, task type)

긴급 주문 선점(preemption)이란 말 그대로 빼앗는 것입니다. 무엇을 빼앗는지 주목하세요. 줄에서의 자리가 아니라 용량입니다. 로봇 시간은 고정되어 있습니다. 긴급 주문이 차지하는 1분은 일반 작업이 기다리는 1분입니다.

고속도로 톨게이트로 생각할 수 있습니다. ETC 차선(고우선순위)이 먼저 움직이고 현금 차선(일반 작업)이 줄을 섭니다. 하지만 ETC 차선을 계속 늘릴 수는 없습니다. 모든 차선을 ETC로 만들면 아무도 새치기를 하지 못합니다. 톨게이트는 여전히 막힙니다. 우선순위는 희소할 때만 의미가 있습니다.

공식의 f()를 좀 더 자세히 살펴볼 만합니다. 대기 시간은 "영원히 기다리는" 것을 막고, 거리는 가장 가까운 로봇을 선택하며, 배터리는 충전량이 낮은 유닛을 걸러내고, 작업 유형은 운반, 들어 올리기, 충전 작업을 구분합니다. 10분 기다린 P2 작업은 에이징(aging)이 작동하기 시작하면 갓 도착한 P1을 앞지를 수 있습니다. 그것이 바로 에이징의 존재 이유이며, 대부분의 사람들이 무심코 비활성화했다가 나중에 가장 후회하는 설정이기도 합니다.

선점을 설정하는 세 가지 방법과 각각의 비용

설정 A: 우선순위 가중치. 긴급 주문의 우선순위 가중치를 올립니다. 예를 들어 일반 작업은 5, 긴급 주문은 50으로 말입니다. 매개변수 하나, 정말 간단합니다. 비용은 너무 세게 올리면(예를 들어 100) 저우선순위 작업이 절대 처리되지 않는다는 것입니다. 그것이 기아(starvation)이며, 일반 웨이브를 죽음으로 몰고 갈 것입니다.

설정 B: 선점적 재할당. 긴급 주문이 도착하면 저우선순위 작업을 수행 중인 로봇을 징발합니다. 중단된 작업은 롤백되어 다시 큐에 들어갑니다. 가장 빠른 응답입니다. 비용은 공차(deadhead)입니다. 중단된 이동은 낭비된 주행 거리였고, 이제 다시 달려야 합니다.

설정 C: 예비 용량. 플릿의 10–20%를 일반 웨이브에서 제외하고 긴급 주문 전용으로 확보합니다. 가장 안정적인 선택입니다. 비용은 한가한 날의 유휴 용량입니다. 단 하루의 전투를 위해 천 일 동안 먹여 살리는 병사들입니다.

설정 긴급 대응 일반 웨이브에 미치는 영향 복잡도 적합한 경우
A 가중치 빠름 과하게 올리면 웨이브를 망가뜨림 낮음 긴급 비중이 안정적으로 5% 미만
B 선점 가장 빠름 공차 증가, 작업 롤백 낮음 2차 수준 대응이 필요한 드문 긴급 주문
C 예비 용량 항상 빠름 거의 없음 낮음 뚜렷한 피크가 있는 변동성 있는 긴급 비중

제가 2025년에 조정한 프로젝트입니다. 중국 동부의 전자상거래 창고, AMR 180대입니다. 긴급 가중치를 50으로 설정했습니다. 일반적인 긴급 비중 3%에서는 모든 것이 순조로웠습니다. 618 쇼핑 페스티벌 당일, 긴급 주문이 15%로 급증했고, 일반 작업의 평균 대기 시간은 50초에서 4분으로 뛰었으며, 웨이브 정시율은 12포인트 하락했습니다. 로그를 보니 저우선순위 작업 하나가 47분 기다리고 있었습니다. 교과서적인 기아 상태였습니다. 근본 원인은 빠져 있던 부품 하나였습니다. 가중치는 설정되어 있었지만 에이징 메커니즘이 없었습니다.

세 가지 중 어떻게 고를까요? 긴급 비중을 보세요. 안정적으로 5% 미만이면 A를 쓰세요. 저렴하고 충분합니다. 드물지만 2차 수준 대응이 필요하면(생산 라인이 곧 멈출 상황) B를 쓰세요. 뚜렷한 피크와 함께 변동성이 크면(대형 세일 행사, 분기 말) C를 쓰세요. 대부분의 창고는 결국 A+C 하이브리드로 귀결됩니다. 평소에는 가중치를 쓰고, 피크 2주 전부터 예비 용량을 켭니다. 구분선은 기술이 아니라 비즈니스의 리듬입니다. 그래서 다른 창고의 매개변수를 복사한 10명 중 9명은 결국 롤백하게 되는 것입니다.

창고 바닥에서 계획된 경로를 따라 이동하는 AMR 플릿의 공중 뷰

현장에서 검증된 RCS 작업 우선순위 설정: 티어, 에이징, 예비 용량

티어. P0 진짜 긴급(물량의 5% 미만으로 유지) / P1 우선 웨이브 / P2 일반 / P3 연기 가능(보충, 사이클 카운트). 무엇이 "긴급"에 해당하는지에 대한 철칙은 영업이 급하다고 말하는 것이 아니라 SLA 마감까지 X시간 미만으로 남았다는 것입니다. 영업이 "이 배치는 급하다"고 말하면 먼저 두 가지 질문을 하세요. "SLA 페널티가 얼마이고, 고객을 잃게 됩니까?" 답할 수 없으면 P2로 갑니다. 여기서 가짜 요구사항이 생겨나며, 저는 이를 지적하는 데 절대 주저하지 않습니다.

에이징. 너무 오래 기다린 작업은 자동으로 승격됩니다. 기아를 막는 하한선입니다.

effective priority = base weight + factor × wait time / threshold

에이징이 없으면 아무리 아름답게 조정된 가중치라도 시한폭탄입니다. 평상시에는 조용하다가 피크 때 반드시 터집니다.

예비 용량. 피크 시즌에는 15–20%, 비수기에는 5–10%로, 긴급 비중에 따라 동적으로 조정합니다. 하드코딩은 절대 하지 않습니다. 기억하세요. 가중치는 큐의 순서를 바꿀 뿐입니다. 용량을 만들어내지 않습니다. 긴급 비중이 10%를 넘어서는데도 가중치만 계속 조정하고 있다면 잘못된 도구를 쓰고 있는 것입니다.

유지보수 함정: 한 번 설정하고 영원히 고통받기

함정 1: 한 번 조정하고 1년 동안 운영하기. 피크 시즌이 되면 SKU 구성과 웨이브 리듬이 바뀌는데 가중치는 작년 그대로입니다. 우선순위 설정은 웨이브 계획을 따라가야 합니다. 최소 분기마다 검토하고, 피크 전에는 항상 다시 조정하세요.

함정 2: 부하 없이 테스트해서 기아가 절대 드러나지 않기. 테스트는 평균 대기 시간만 봅니다. 평균은 존재하는 가장 부정직한 지표입니다. 중요한 숫자는 저우선순위 작업의 최대 대기 시간입니다. 그것이 올라가기 시작하면 기아가 다가오고 있습니다.

함정 3: 한도를 초과한 긴급 비중에 대비해 버티기. 긴급 주문이 장기적으로 물량의 10%를 초과해 유지된다면 그것은 스케줄링 문제가 아니라 용량 문제입니다. 로봇을 늘리거나 일부 "긴급" 주문을 P2로 강등하세요. 스케줄러 매개변수로 용량 부족을 메울 수는 없습니다.

함정 4: 누구나 P0를 표시할 수 있게 하기. 우선순위의 가장 큰 적은 매개변수가 아니라 사람입니다. P0 표시 권한은 제한해야 합니다. 누가 표시할 수 있는지, 승인이 필요한지, 그리고 진짜 P0 비중에 대한 월간 감사가 필요합니다. 표시를 열어 두면 P0는 3개월 안에 20%를 초과합니다. 그 이후에는 어떤 조정도 당신을 구하지 못합니다.

그렇다면 우선순위 설정이 할 만한 가치가 있을까요? 숫자 한 쌍을 보세요. 일반 작업의 평균 대기 시간은 그대로 유지되는 동시에 긴급 주문 정시율이 목표에 도달하는 것입니다. 둘 다 사실이면 설정이 옳습니다. 하나만 사실이면 자신을 속이고 있는 것입니다.

Da Liu, 자동화 엔지니어 지음

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