지난 8월, 중국 동부의 한 3C 전자상거래 창고를 사후 방문 중이었다. 선반 운반형 AMR 40대가 쉼 없이 돌아가고 있었다. 오전 10시, 서버실 에어컨이 고장 나고 플릿 관리 서버가 과열로 재부팅되었다. 교과서 같은 단일 장애점이었다. 15분 동안 명령이 단 하나도 나가지 않았다. 모든 로봇이 보호 정지를 발동하고 얼어붙었다. 오전 출하 파동이 2시간 가까이 밀렸다.
사후 분석은 겸손해지게 했다. 서버 자체는 멀쩡했고, 재부팅으로 해결됐다. 하지만 그 15분이 진실을 드러냈다. 이 "지능형" 시스템에서 단일 장애점은 가장 따분한 곳에 숨어 있었다. 이 글에서는 AMR 단일 장애점을 세 개 층위로 나눈다. 각각이 어디에 숨어 있고, 어떻게 단단하게 만들며, 어디에서 선을 긋는지. 그리고 인수 테스트 때 의도적으로 시스템을 깨뜨리는 방법까지. 고지: 아래 출처 없는 숫자는 프로젝트 후 나의 추정치다. 자릿수는 맞지만 입찰서에 그대로 베끼지 말 것.
AMR 단일 장애점은 실제로 어디에 숨어 있는가
도시 교통으로 생각해 보자. AMR 플릿은 차들의 흐름, 플릿 관리 시스템(FMS)은 신호 제어 센터, Wi-Fi 네트워크는 모든 운전자의 손에 있는 무전기다. 도시를 마비시키는 것은 절대 고장 난 차 한 대가 아니다. 이 셋 중 하나가 망가지는 것이다.
1층: 개별 차량. 로봇 한 대가 다운된다. 배터리 과방전, lidar 오염, 구동륜 이물질. 가장 흔하고, 가장 덜 위험하다. 40대 플릿에서 로봇 한 대 다운은 처리량의 2.5%다.
2층: 관제(디스패처). FMS 서버가 크래시하고, 스케줄링 소프트웨어에 버그가 생기고, 데이터베이스가 데드락에 걸린다. 서버 하나가 헛발질하면 플릿 전체가 귀를 잃는다. 그 15분간의 중단은 이 층위였다. 진짜 단일 장애점: 한 대의 기계가 모든 것을 지휘하는 것.
3층: 네트워크. 액세스 포인트가 죽고, 로밍이 실패하고, 데드존이 생긴다. 로봇들은 관제와의 연결을 잃고 "링크 상실" 정책을 실행한다. 종종 간선 통로 한가운데에서 제자리에 멈춘다.
세 층위 중 90%의 프로젝트는 돈을 1층에 쏟아붓는다. 더 화려한 로봇, 더 많은 센서. 반면 2층과 3층은 찌꺼기를 받는다. 그래서 사고가 날 때마다 전관 셧다운이 된다. 돈이 잘못된 층위로 간 것이다.
이중화의 세 층위: 돈이 가야 할 곳
원칙이 먼저, 구분선이 그다음이다. 백업이 많다고 자동으로 좋은 것은 아니다. 올바른 층위에 돈을 쓰는 것이 핵심이다.
차량 백업이란 예비 로봇이지 예비 부품이 아니다. 올바른 접근법은 N+1이다. 40대 플릿이면 핫 스페어로 한두 대를 더 산다. 죽은 로봇은 끌어내고, 스페어가 이어받고, 처리량은 떨어지지 않는다. 구분선: 2교대 24시간 가동이면 N+1은 필수. 단일 주간 교대면 거점 간에 스페어 풀을 공유하거나, 생략해도 된다. 정오에 죽은 로봇은 저녁까지 고치면 된다.
여기서 유사 요구조건 하나를 짚어야 한다. 일부 벤더는 "듀얼 lidar, 듀얼 배터리"를 내세우며 로봇 가격을 30% 올린다. 그것은 공학이 아니라 벤더에게 바치는 기부금이다. 주류 산업용 AMR의 벤더 공칭 MTBF는 5,000시간을 넘는다. 관제 한 번의 헛발질에 어차피 플릿 전체가 죽는데, 단일 유닛 고장을 연 몇 회에서 연 한두 회로 줄이겠다고 30% 프리미엄을 내는 건 무의미하다. 그 돈은 2층으로 돌려라.
관제 백업 — 액티브-스탠바이 서버 — 은 목숨을 지키는 돈이다. FMS 서버 두 대. 하나는 액티브, 하나는 스탠바이. 하트비트 모니터링과 자동 페일오버 탑재. 쌍발 항공기를 생각해 보라. 엔진 하나를 잃어도 계속 난다. 구분선은 페일오버 시간이다. 로봇의 "링크 상실 보호 정지" 임계값을 반드시 이겨야 한다, 벤더에 따라 보통 5~10초(현장 경험치 — 이 숫자를 요구하고 기술 합의서에 명기하라). 30초 이내 페일오버는 합격. 1분을 넘으면 백업이 없는 것과 같다. 로봇들은 스스로 멈춰 버리고, 스탠바이 서버가 물려받는 건 한 대씩 수동으로 복구해야 하는 시체들의 플로어다.
네트워크 백업이란 AP 커버리지의 중첩이다. 모든 구역은 최소 두 대의 액세스 포인트 도달 범위 안에 있어야 하며, AP 하나가 죽으면 이웃이 부하를 받아낸다. 구분선: AP 하나가 다운된 상태에서 이웃이 해당 구역의 최소 90%를 커버해야 하고, 로밍 핸드오프는 1초 미만이어야 한다. 이 수치를 못 내는 "듀얼 AP 설계"는 장식이다.
전형적인 40대 플릿 기준 세 단계 비용(퍼센트는 내 경험치 범위):
| 단계 | 추가 비용(프로젝트의 %) | 복잡도 | 전형적인 복구 시간 | 대상 |
|---|---|---|---|---|
| 베이직: FMS 단일 + AP 단일 + 예비 로봇 없음 | +0% | 낮음 | 수동 복구, 30분~2시간 | 멈춰도 되는 단일 교대 소규모 창고 |
| 스탠더드: FMS 액티브-스탠바이 + AP 커버리지 중첩 + 예비 로봇 1대 | +8%~12% | 중간 | 30초 이내 페일오버, 단일 로봇 고장은 10분 커버 | 대부분의 24시간 창고 |
| 고가용성: FMS 액티브-액티브 + 듀얼밴드 네트워크 + 10% 예비 풀 | +20%~30% | 높음 | 초 단위 페일오버, 처리량 거의 안 떨어짐 | 제약, 자동차 — 라인 정지가 벌금인 곳 |
모양이 보이는가? 베이직에서 스탠더드로 가는 데는 약 10% 더 들고, 복구는 몇 시간에서 몇 분으로 당겨진다. 여기서 달러당 가치가 가장 좋다. 고가용성 단계는 멈춘 1분이 진짜 돈이 되는 운영을 위한 것이다. 보통 전자상거래 창고는 접근 금지. 복잡도가 되받아친다.
장애 격리: 죽은 로봇부터 교통망에서 끌어내라
백업은 시스템을 살려 둔다. 장애 격리는 죽은 부분이 살아 있는 부분을 끌고 내려가는 것을 막는다. 고속도로 고장과 같다. 1단계는 차를 길가로 끌어내는 것이지, 주행 차선에서 고치는 게 아니다.
제대로 된 장애 격리 체인: 로봇의 자가 진단이 이상을 감지한다(배터리, 자기위치 상실, 구동 고장) → 3초 이내에 FMS에 보고 → FMS가 해당 도로 구간을 임시 배제 구역으로 표시 → 죽은 로봇의 미완료 작업이 건강한 로봇에게 재배정 → 사람이나 스페어 로봇이 견인한다. 전부 자동. 사람은 마지막 견인만 한다.

반례도 본 적 있다. 2024년 3월, 중국 북부의 한 자동차 부품 창고에서 AP의 전원 모듈이 타 버렸다. 그 구역의 로봇 6대가 5초 이상 링크를 잃고 보호 정지했다. 그중 두 대는 간선 통로 위였다. FMS 격리 로직에 버그가 있었다. 링크 상실 로봇의 위치 데이터가 10초보다 오래되면 구형으로 취급되어 우회 명령이 나가지 않았다. 건강한 로봇 4대가 "시체"들 뒤에 줄을 섰다. 40분의 수동 정리, 창고 출하의 절반이 얼어붙었다.
두 가지 교훈. 첫째, 격리는 최악의 위치를 가정하고 설계하라. 죽은 로봇은 항상 가장 중요한 통로에서 멈춘다고 가정할 것. 둘째, 마지막 보고 위치를 기준으로 우회하지 마라. 배제 구역은 "마지막 알려진 위치 + 안전 반경"에서 그어라. 너무 멀리 우회하더라도 안으로 들어가지 마라.
다음은 그레이스풀 디그레이데이션 — 장애 격리의 후반전이다. 극단적 경우: 플릿의 30%가 한꺼번에 다운된다(불량 배터리 로트는 일어난다). 시스템은 누워 있어선 안 된다. 자동으로 저하되어야 한다. 속도를 한 단계 낮추고, 작업 우선순위를 재조정하고(출하 파동을 보호하고 입하는 미루고), 수동 피킹 구역을 넓힌다. 이를 하드 임계값과 함께 FMS에 미리 구성하라. "건강한 로봇이 70% 아래로 떨어지면 자동으로 저하 모드 진입". 새벽 3시 야간 교대 작업자의 즉흥에 의존하지 마라.
인수 전: 빠뜨릴 수 없는 단일 장애점 드릴
유지보수의 함정: 설계 문서는 아름다운데, 인수 테스트에서 의도적으로 시스템을 깨뜨릴 용기가 있는 사람은 아무도 없다. 각 드릴을 손으로 직접 실행하라. 하나라도 실패하면 사인하지 마라.
- 관제 서버의 플러그를 뽑아라. 스탠바이 인수 시간을 재고, 집단 보호 정지가 없는지 확인하라. 1분 초과는 불합격.
- 전원을 끄지 않고 관제 프로세스를 죽여라. 소프트웨어 크래시를 시뮬레이션한다. 하트비트 감지가 "가짜 생존" 스플릿 브레인(프로세스는 돌아가지만 서비스는 죽음)을 잡아내는지 검증하라.
- AP 하나를 전원 오프하라. 부드러운 로밍을 확인하고, 링크 상실 정지가 없는지 확인하라.
- 무작위 로봇 한 대를 비상 정지하라. 배제 구역과 작업 재배정 시간을 재라. 3분 초과는 격리 실패.
- 충전열 전체의 전원을 끊어라. 저배터리 관제 정책이 버티는지 확인하라. 여기서 가장 간과되는 항목이다. 저배터리 로봇들이 충전에 줄 서다가 전원이 없어 집단으로 죽는 걸 두 번 봤다.
- 플릿의 30% 오프라인을 시뮬레이션하라. 저하 모드가 자동으로 발동하고 출하 파동이 살아남는지 확인하라.
각 드릴을 기록하라: 발동 시각, 복구 시각, 사람의 개입 여부. 벤더가 "우리 랩에서 테스트했습니다"라고 하면 답은 이거다. 당신의 로봇, 내 플로어, 지금 당장. 랩에서 테스트된 99.99% 가용성은 진짜 랙과 지게차를 만나는 순간 최소 20% 깎인다.
최종 정산이다. 이 돈이 쓸 가치가 있는지는 하나의 숫자로 귀결된다. 당신의 피크 시즌 정지 1시간의 비용. 피크 시간당 출하량 × 주문당 평균 마진, 여기에 지연 벌금과 유휴 인건비까지. 중규모 전자상거래 창고라면 쉽게 $3,000이 넘는다. 스탠더드 단계는 약 10% 추가 비용이다. 3년 감가상각으로 나누면 시간당 수십 달러다. 시간당 수십 달러로 시간당 수천 달러의 손실을 헤지한다. 계산은 직접 해 보라. 다만 당신의 창고가 단일 교대에 물량도 적당하고, 2시간 정지가 오후 지연 정도로 끝난다면. 베이직이면 충분하다. 그 예산은 예비 부품에 쓰는 게 낫다. 백업 지출은 신념 체계가 아니다. 산수다.
Da Liu, 자동화 엔지니어 지음
영어판 번역본입니다. 내용이 다를 경우 영어판을 우선합니다.






