2026년 OpenClaw 상시 임대 원격 Mac 블루그린 롤링 업그레이드 18789 Webhook GitHub 콜백 무중단 FAQ

OpenClaw 2026.5.7로 올리는 순간, 상시 임대 원격 Mac의 가장 큰 비용은 "재시작이 만들어내는 사각지대"입니다. 「블루그린·롤링」을 굳이 단일 호스트에서 흉내 내려면 두 개의 디렉터리가 동시에 살아 있어야 하고, 18789 헬스Webhook·GitHub 콜백이 컷오버 도중에도 끊기지 않아야 합니다. 이 글은 미동부·아태 두 라인을 같은 한 대의 Mac에 얹어 굴리면서, doctor·gateway status로 게이트를 잠그고 롤백 비용을 분 단위로 줄이는 한국어 런북입니다.

1. 왜 「블루그린·롤링」을 굳이 상시 임대 Mac에 적용하는가

상시 임대는 「하루 단위 끄고 다시 켜는」 비용이 거의 없습니다. 그래서 업그레이드 = 재시작이라는 가정이 너무 길게 살아남습니다. 그러나 사용자가 미동부·아태에 흩어져 있으면 단일 프로세스 재시작 한 번이 웹훅 재시도·GitHub deliveries 큐를 망가뜨리고, 18789 헬스가 1회 빠지는 순간 자동 페일오버가 잘못된 방향으로 돌아갑니다. 「블루그린·롤링」은 새 디렉터리에서 18789가 200을 돌려준 다음에야 트래픽을 옮기는 단순한 규칙으로, 재시작 사각지대를 분 단위에서 초 단위로 줄여 줍니다.

핵심 가설: 「업그레이드 후 18789가 일정 시간 200이면 OK」가 아니라, 「새 라인의 18789가 OK가 된 시점부터 트래픽 컷오버를 시작한다」를 글로 박아 둡니다.

2. 2026.5.7 라인 디렉터리 분리: 듀얼 디렉터리의 최소 단위

같은 Mac에서 두 라인을 띄우려면 설정·로그·소켓·플러그인 경로가 서로 닿지 않아야 합니다. ~/Library/Application Support/openclaw-blue~/.../openclaw-green처럼 디렉터리를 분리하고, 각각 다른 포트로 18789를 띄웁니다(예: 블루 18789, 그린 18790). 미동부 SSH 사용자는 블루로, 아태 Webhook은 그린으로 라우팅한 뒤, 두 디렉터리가 동일한 ClawHub 스킬 버전으로 정렬되었는지 onboard 직후에 확인합니다. openclaw.json 최소 권한과 onboard·doctor·fix 재현 런북을 그대로 갖다 쓰면 라인 한 쪽이 깨졌을 때 진단이 빠릅니다.

3. 18789 헬스 프로브: 트래픽 컷오버 게이트

18789를 단순 「살아 있는지」로 보지 않고, 컷오버 게이트로 씁니다. 새 라인이 올라온 직후 curl -sS 127.0.0.1:18789/healthzopenclaw gateway status --require-rpc를 같은 스크립트로 N회 연속 통과해야만 리버스 프록시 가중치를 옮깁니다. 한 쪽이라도 흔들리면 가중치를 되돌리고 doctor 스냅샷을 남깁니다.

  • N회 통과: 「초 단위 5회 연속」 정도가 듀얼 라인의 흔들림을 거릅니다.
  • 두 평면 동시 OK: HTTP 18789와 RPC status가 동시에 통과해야 트래픽을 옮깁니다.
  • 가중치 단계화: 0 → 10% → 50% → 100% 식으로 단계마다 헬스를 다시 봅니다.

4. Webhook·GitHub 콜백 무중단의 비밀

GitHub Webhook은 3xx·5xx·타임아웃에 대해 재시도하지만, 같은 deliveryId가 두 라인에 모두 도달하면 부작용이 두 번 일어날 수 있습니다. 컷오버 동안에는 그린이 새 deliveryId를 수신하고, 블루는 진행 중인 deliveryId만 마무리한 뒤 닫는 「드레인 모드」가 필요합니다. 리버스 프록시 앞단에서 X-Hook-Drain: true 같은 헤더로 라인을 표식한 뒤, 게이트웨이 측에서 중복 deliveryId를 멱등 처리합니다. Webhook 공개 URL·HMAC·401·타임아웃 재현 체크리스트는 컷오버 직전 그대로 한 번 더 돌립니다.

5. 기종 그라데이션과 저비용 스토리지의 결정 매트릭스

업그레이드 비용은 보통 기종 선택디스크 압박에서 새어 나갑니다. 듀얼 라인을 같은 Mac에 둘 때는 tmp·로그만 내장 NVMe에 두고, 플러그인 캐시·아카이브는 외장 저비용 NVMe로 옮깁니다. M4 단일 호스트로는 두 라인이 충분하지만, ClawHub 스킬·플러그인 패밀리가 무거워지면 게이트웨이만 가벼운 M4에 남기고 무거운 워크로드를 별도 큐로 보냅니다. 18789·플러그인·다채널 안정성 운영 사례를 같이 보면, 디스크 워터마크가 컷오버 결정에 어떻게 영향을 주는지 가늠하기 쉽습니다.

의사결정 표: ① 트래픽이 한쪽 라인에 90% 이상이면 → 가벼운 라인을 좁히고 무거운 라인에 디스크 워터마크를 +5%. ② 디스크가 75% 넘으면 → 그린에서 컷오버 보류, 블루 유지. ③ 18789가 단계마다 흔들리면 → 가중치를 되돌리고 doctor 스냅샷 보관.

6. 롤백 비용 절감: 2026.5.7 라인의 회복 시나리오

롤백을 「이전 버전 디렉터리를 그대로 두는」 비용으로 산정하면, 듀얼 디렉터리는 사실상 상시 보험입니다. 컷오버 후에도 이전 디렉터리는 최소 24시간 동결해 두고, 새 라인에서 operator.read·웹훅 deliveries·스트리밍 한 쌍이 모두 정상이면 그제야 제거합니다. 회귀가 의심되면 가중치만 뒤로 옮기고, 그린의 plugins.entries·secretRef 차이를 doctor 스냅샷에서 비교합니다.

7. doctor → gateway status 교차 검수와 고빈도 FAQ

컷오버 직전·직후 두 번, 블루·그린 각각에 대해 openclaw doctoropenclaw gateway status --require-rpc를 같은 순서로 돌리고 결과를 PR에 첨부합니다. 한쪽 평면만 통과하는 경우의 분기 처리를 미리 글로 못 박아 두면, 새벽 교대에서도 컷오버가 흔들리지 않습니다.

  • 두 라인의 18789가 동시에 OK인 적이 한 번도 없습니다. 포트 충돌·LaunchAgent 이중 등록을 먼저 봅니다.
  • GitHub deliveries에 401이 잠깐 나옵니다. 프록시 헤더가 raw body를 변형했는지, NTP가 어긋났는지 봅니다.
  • 가중치 50%에서 스트리밍만 끊깁니다. 유휴 TCP 타임아웃·HTTP/2 윈도 설정을 라인별로 일치시킵니다.
  • 롤백 후에도 503이 남습니다. 리버스 프록시 헬스 캐시·DNS TTL을 같이 비웁니다.

왜 macOS·Mac mini가 이 워크플로의 앵커가 되는가

같은 호스트에 두 라인을 두고 18789를 따로 띄우는 운영은 커널·런타임·디스크가 한 줄에 정렬되어 있을 때만 안전합니다. Apple Silicon의 통합 메모리·낮은 유휴 전력은 듀얼 라인 상주에 어울리고, Gatekeeper·SIP·FileVault가 무인 상주 표면을 줄여 줍니다. SSH·Homebrew·Docker가 한 커널에 정렬되어 있어 컷오버 직후 로그를 재현하기 쉽고, 장기간 무인 가동의 크래시율도 Windows 워크스테이션 대비 낮아 「블루그린·롤링」을 작은 박스 한 대에서 굴리는 데 적합합니다. 라인·포트·스토리지를 정렬한 뒤에는 Mac mini M4로 앵커를 고정해, 본문에서 다룬 의사결정 매트릭스를 그대로 옮길 수 있는 가장 현실적인 시작점을 만드세요. Macstripe 홈에서 자세히 보기에서 미동부·아태 노드와 결제 주기를 확인할 수 있습니다.

두 라인이 같은 한 대에서 무중단으로 살아 있게 만들고 싶다면, Mac mini M4가 지금 본 워크플로를 가장 조용하게 받아 줄 수 있는 박스입니다 — 지금 한 대를 골라 듀얼 디렉터리를 그 위에 얹어 보세요.