새벽 2시를 조금 넘긴 시각, 내 전화가 울렸다. 상대는 한 3PL 고객사의 유지보수 책임자였고 목소리는 쉰 상태였다. 방금 WCS 업그레이드를 마쳤는데, 컨베이어는 멈춰 있고, 스태커 크레인 2대가 통로 한가운데서 얼어붙었으며, 출고 작업이 화면에 쌓여 간다는 것이다. 스무 명이 넘는 인원이 벨트 주변에 할 일 없이 서 있었고, 새벽이 되기 전 트럭 2웨이브가 도착할 예정이었다. 하나라도 놓치면 고객사 도크 SLA 점수가 날아간다.

그들은 풀스톱 업그레이드를 택했다. 전부 멈추고, 한 번에 다 바꾸고, 빨리 끝내는 방식이었다. 알고 보니 새 WCS 빌드가 구형 PLC 드라이버와 핸드셰이크 불일치를 일으켰는데, 데이터량이 너무 적어 테스트 환경에서는 한 번도 나타나지 않은 작은 버전 차이였다. 실제 환경에서는 통신이 즉시 폭발했다. 그들은 롤백하고 아침까지 진화에 매달렸다. 트럭은 줄을 섰고, 패널티가 부과됐다.

그날 밤 이후로 나는 모든 고객에게 규칙으로 정했다. 운영 중인 WCS 업그레이드는 항상 롤링으로 한다. 빅뱅 전환은 이제 그만이다. 아래는 전체 플레이북이다.

왜 아무도 라인을 멈추려 하지 않는지, 숫자가 설명한다. 업계 계산에 따르면 계획 외 다운타임 비용은 750,000 제곱피트 창고 기준 시간당 약 $10,000이다. 그리고 미국 창고는 낡았다. CBRE 데이터에 따르면 10년이 넘은 건물이 미국 창고 재고의 89%를 차지하고, 평균 건물 연한은 34년이다. 낡은 건물은 낡은 시스템으로 돌고, WCS 업그레이드는 피할 수 없다. 유일한 질문은 사업을 멈추지 않고 하느냐이다.

업그레이드 전날 밤: 스냅샷과 백업이 진짜 업그레이드다

롤링 업그레이드의 첫 단계는 업그레이드가 아니다. 자신에게 탈출구를 만드는 것이다.

전날 밤에는 세 가지가 일어난다. 첫째, WCS의 완전한 스냅샷을 찍는다. 시스템 설정, 작업 스케줄링 규칙, 인터페이스 매핑, PLC 프로그램 버전, 전부다. WCS는 모든 것의 한가운데에 있어서 위로는 WMS와 ERP와, 아래로는 PLC·컨베이어·크레인과 대화한다. 이 체인의 어느 지점에서든 버전 하나만 어긋나도 업그레이드는 유령을 만든다. 스냅샷은 수술 전 시스템의 가족사진이다. 뭔가 깨지면 이것과 비교한다.

둘째, 복원 시점이 정의된 데이터베이스 전체 백업이다. 백업만으로는 부족하다. 테스트 환경에서 한 번 복원해 보고 동작을 증명한다. 백업은 있었는데 복원이 안 됐던 비극을 나는 너무 많이 봤다. 반나절 복원 훈련이 당신의 운영을 구한다.

셋째, 두 개의 패키지를 준비한다. 업그레이드와 롤백이다. 롤백 패키지는 구 인스톨러가 아니다. 역방향 데이터 마이그레이션 로직을 포함한 완전한 반전 계획이다. 새 버전이 데이터베이스 스키마를 바꾸면, 롤백은 스키마와 데이터를 모두 업그레이드 전 상태로 되돌려야 한다. 대부분의 팀이 처음에는 이것을 잊는다.

한 가지 더. 업그레이드 계획은 미리 창고 운영 매니저에게 보내고, 각 단계에서 사업이 무엇을 체감할지 설명해 둔다. 세상에서 가장 우아한 기술 계획이라도 운영이 당신이 뭘 하는지 모르면 소용없다. 밤새 전화가 끊임없이 울릴 것이다.

업그레이드 당일 밤: 먼저 대기 노드, 그다음 트래픽을 천천히 이전

내 업그레이드 밤은 매번 같은 타임라인을 따른다.

밤 10 p.m.쯤, 물량이 떨어지면 대기 노드를 업그레이드한다. 대부분의 WCS 구성은 액티브-스탠바이로 돌아간다. 대기 노드를 새 버전으로 올리고 스모크 테스트를 수행한다. 실제 입고 작업 하나, 출고 하나, 순환 재고조사 하나다. 체인 전체를 지켜본다. 작업 분배, 장비 응답, 확인 콜백. 이 단계에서는 실제 트래픽을 전혀 건드리지 않으니 실수가 저렴하다.

11쯤, 스모크 테스트가 초록불이면 소량의 트래픽을 옮긴다. 중요하지 않은 컨베이어 라인 하나나 통로 하나를 골라 그 작업을 새 WCS로 보낸다. 관찰 창을 최소 출고 웨이브 한 번 분량으로 잡는다. 웨이브 하나가 주문 릴리스·작업 할당·장비 실행·예외 처리의 완전한 루프를 돌린다. 깨끗한 웨이브 하나는 새 빌드의 기본기가 건전하다는 뜻이다. 구 버전이 여전히 사업의 대부분을 떠맡고, 새 버전은 파일럿에 불과하다.

WCS 업그레이드 밤에 컨트롤룸 화면을 지켜보는 엔지니어

자정이 지나면 노드별로 확장한다. 한 노드를 끝내고, 관찰 기간을 두고, 작업 성공률과 장비 응답 시간이 저하되지 않았음을 확인한 뒤 다음으로 넘어간다. 시간을 아낀다고 여러 노드를 병렬로 업그레이드하지 마라. 새 빌드에 지뢰가 있으면 병렬 업그레이드는 모든 노드에 그것을 묻어 버리고, 돌아올 길이 없어진다.

물량이 바닥을 치는 새벽에, 마지막에 코어를 건드린다. 스케줄링 코어, 데이터베이스 프라이머리 노드다. 전환 전에 롤백 패키지가 스테이징되어 있고 의사결정자가 방에 있는지 한 번 더 확인한다.

밤새 누군가 모니터링 월을 지킨다. 숫자 세 개다. 작업 밀림, 장비 통신 상태, 예외 작업 비율. 어느 하나라도 이상하면 멈춘다. 먼저 진단하고, 계속할지 롤백할지 결정한다.

롤백 기준선은 시작하기 전에 그어 둔다

너무 많은 팀이 롤백을 실패한 업그레이드 뒤의 즉흥 대응으로 여긴다. 그렇지 않다. 롤백은 업그레이드 계획의 일부로, 시작하기 전에 작성해 두는 것이다.

트리거를 정량화하고 모두의 서명을 받아 둔다. 예를 들어, 예외 작업 비율이 정상 기준선의 몇 배로 치솟는다, 밀림이 한 웨이브 처리 용량을 초과한다, 핵심 장치가 합의된 분을 초과해 통신을 잃는다. 어느 하나라도 도달하면 롤백한다. 회의도 논쟁도 없다. 업그레이드에서 가장 위험한 문장은 "10분만 더 지켜보자"다. 10분 뒤에는 문제가 더 커져 있다.

롤백 의사결정자는 정확히 한 명을 지명한다. 보통 유지보수 책임자나 당직 야간 매니저다. 그가 롤백이라 하면 롤백한다. 논쟁은 새벽 3시가 아니라 사후 리뷰에서 한다.

테스트 환경에서 롤백을 최소 한 번은 종단간 리허설하고 시간을 잰다. 그 숫자가 유지보수 창을 정한다. 업그레이드 시간 + 관찰 + 롤백 시간 + 버퍼다. 대부분의 팀은 업그레이드만 보고 창을 잡고 롤백에는 아무것도 남기지 않는다. 일이 틀어지면 오도가도 못한다.

사람들이 잊는 것 하나. 롤백 후 데이터 정합이다. 새 버전 가동 중에 만들어진 작업과 재고 이동은 구 버전으로 깨끗하게 돌아와야 하고, 구 버전이 이를 받아 줘야 한다. WCS는 실시간 시스템이다. 데이터 공백이 다운타임보다 아프다.

그래서 고객이 WCS 업그레이드 방법을 물으면 내 답은 항상 같다. 먼저 스냅샷과 백업, 먼저 대기 노드, 트래픽은 천천히 이전하고, 롤백 기준선은 미리 그어 둔다.

롤백 계획은 다섯 가지 체크리스트로 요약된다. 업그레이드 밤 전에 전부 체크한다. 의사결정자 한 명이 현장에 있다. 정량화된 트리거가 계획에 적혀 있다. 롤백과 업그레이드 패키지가 준비되고 함께 테스트됐다. 테스트 환경에서 시간 측정한 리허설 한 번. 데이터 정합 절차가 문서화됐다. 다섯 개를 모두 체크하면 그날 밤은 진짜로 잘 수 있다.

성공한 업그레이드를 기억하는 사람은 없다. 하지만 깔끔한 롤백은 창고 전체가 기억한다.

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