OpenClaw가 캐나다의 Mac mini M4에서 프로덕션처럼 돌아가기 시작하면 다음 과제는 설치보다 운영입니다. 화요일 오전에 버전을 올려도 Channels가 끊기지 않는가, Gateway 18789가 재시작 뒤 같은 토큰으로 응답하는가, 로그와 캐시가 APFS 여유를 먹어 치우기 전에 알아차릴 수 있는가가 핵심입니다. 이 글은 의존성 동결, Gateway 헬스 프로브, 롤링 재시작, 디스크 로그 수위, 원격 링크 지터를 한 묶음으로 운영하는 한국어 런북입니다. 사전 프로덕션 배치는 OpenClaw 2026 캐나다 원격 Mac M4 프로덕션 준비: Node·workspace 디스크 설계, Channels 인증 갱신, Gateway 원격 지터와 오류를, 터널과 직접 연결 판단은 OpenClaw 2026 캐나다 원격 Mac M4: SSH 터널 vs 직접 Gateway를 함께 열어 두면 흐름이 빨라집니다.
1. 의존성 동결: 업그레이드를 사건이 아니라 결정으로 만들기
제어 가능한 업그레이드는 변경 당일이 아니라 평상시의 고정 규칙에서 시작합니다. 호스트별로 node, npm, 전역 CLI를 하나의 LTS 라인에 묶고, 서비스가 읽는 저장소에는 package-lock.json, pnpm-lock.yaml, yarn.lock 중 실제 사용하는 잠금 파일을 반드시 남기세요. 온보딩 스크립트에서 @latest를 쓰면 다음 재부팅 때 조용히 다른 코드가 들어올 수 있습니다. Homebrew도 예외가 아닙니다. 정상 상태가 확인된 뒤 brew bundle dump로 Brewfile을 남기고, OpenClaw 설정과 같은 변경 티켓에 묶어야 나중에 무엇이 바뀌었는지 설명할 수 있습니다.
후보 환경을 먼저 승격하기
512GB 이상 디스크라면 같은 Mac 안에 current와 candidate 워크스페이스를 분리하세요. candidate에는 다음 잠금 파일과 설정을 적용하고, Channels 토큰 복사본으로 단일 채널 dry-run을 30~60분 돌립니다. 문제가 없으면 launchd plist의 WorkingDirectory만 바꿔 승격합니다. 실패 시 원래 디렉터리로 되돌리면 되므로, 새 패키지를 반쯤 지우는 수동 복구보다 훨씬 짧습니다.
node -v > /var/log/openclaw/node.rev npm ls --depth=0 > /var/log/openclaw/npm.tree.snapshot brew bundle dump --file=/var/log/openclaw/Brewfile.snapshot --force
2. Gateway 헬스 프로브와 롤링 재시작
Gateway는 운영자가 체감하는 심장박동입니다. 대시보드가 초록이어도 127.0.0.1:18789 헬스 응답, 토큰 검증, 리스닝 소켓이 맞지 않으면 실제 트래픽은 실패합니다. 최소 프로브는 올바른 Authorization 헤더로 로컬 헬스 엔드포인트를 호출하고, 500ms 안팎의 JSON 응답과 UTC 타임스탬프를 회전 로그에 남기는 방식이면 충분합니다. 이 검사는 운영자 셸 히스토리가 아니라 launchd의 StartInterval 잡으로 돌리는 편이 안전합니다.
롤링 재시작은 배포와 재시작을 한 줄 명령으로 묶지 않는 것이 핵심입니다. 순서는 유입 채널을 짧게 유지보수 상태로 두고, 오래된 서비스를 launchctl bootout으로 내린 뒤, 포트가 실제로 비었는지 확인하고, 새 경로를 bootstrap합니다. 두 대 이상이면 한 번에 한 대만 재시작하고, 다음 배치로 넘어가기 전에 최근 3~5회 프로브가 모두 OK인지 봅니다.
| 신호 | 먼저 확인할 것 | 권장 조치 |
|---|---|---|
| 헬스가 간헐적으로 FAIL | 동시각 디스크 IO와 로그 회전 | 대량 압축·export를 지연하고 다음 프로브 3회를 비교 |
| 롤링 후 401 증가 | 토큰 파일, 환경 변수, 서비스 사용자 | secrets와 plist 경로를 맞춘 뒤 어댑터만 재시작 |
| 18789 리스너가 두 개 | 남은 프로세스와 launchd 라벨 | lsof -iTCP:18789 -sTCP:LISTEN 후 orphan을 내림 |
3. 디스크 로그 수위: APFS가 물기 전에 알림 만들기
OpenClaw의 채팅 큐, Node debug 로그, 브라우저 프로필, npm 캐시는 생각보다 빨리 SSD를 채웁니다. 루트 볼륨과 워크스페이스 볼륨에는 서로 다른 수위를 두세요. 일반적으로 25% 이상은 정상, 15~25%는 경고, 15% 미만은 신규 빌드와 대용량 tail을 멈추는 빨간 상태로 잡습니다. 단일 파일 회전만으로는 부족합니다. 디렉터리 총량, 압축 보관 기간, npm cache 정리 주기를 함께 정해야 합니다.
4. 원격 링크 지터와 실제 장애 구분
아태 운영자가 캐나다 Mac에 붙을 때 SSH 입력이 튀거나 VNC 화면이 멈칫하는 일은 흔합니다. 하지만 그런 지터가 Mac 내부의 루프백 헬스 결과까지 바꾸지는 않습니다. 항상 세 단계로 비교하세요. 첫째, Mac 내부에서 127.0.0.1 헬스 호출. 둘째, 노트북에서 SSH 포워드된 localhost 호출. 셋째, 직접 공개 모드를 쓴다면 외부 URL 호출입니다. 1과 2가 갈라지면 SSH 포워드나 바인드 주소 문제이고, 2와 3이 갈라지면 DNS, TLS, 엣지 방화벽을 봅니다.
5. 중·고사양 리소스 착지 사례
M4 / 24GB / 512GB는 단일 Gateway, 2~3개 Channels, 압축 로그 60~90일 보관에 적당합니다. candidate 워크스페이스 하나와 월 1~2회 업그레이드 창을 두는 팀에 맞습니다. M4 Pro / 48GB / 1TB는 active/standby Gateway, 더 무거운 채널 조합, 병렬 빌드 샌드박스를 함께 두기 좋습니다. 북미 낮 시간과 아태 야간 배치를 같은 노드가 받으면 후자가 안정적입니다. 단, 어떤 사양이든 머신 라벨에는 region, role, lockfile 버전을 붙여야 "같은 캐나다 Mac인데 왜 다르게 동작하지?"라는 추적 비용을 줄일 수 있습니다.
6. FAQ: 증상별 첫 조치
| 보이는 현상 | 첫 조치 |
|---|---|
| 작은 npm 업그레이드 뒤 Gateway가 출렁임 | 잠금 파일 diff를 보고 candidate 워크스페이스로 되돌린 뒤 정식 변경으로 재등록합니다. |
| 헬스는 OK인데 운영자가 멈춤을 보고 | 네트워크 경로 문제로 분리하고 SSH RTT·패킷 손실을 측정합니다. Gateway 재시작은 보류합니다. |
| 밤사이 디스크가 레드 수위 진입 | 로그 회전 실행 여부, npm cache, 중복 node_modules, APFS 스냅샷을 순서대로 봅니다. |
| 롤링 뒤 새 토큰이 먹히지 않음 | 금고, 환경 변수, plist가 같은 토큰 버전을 가리키는지 확인하고 어댑터만 다시 올립니다. |
7. 정리
캐나다 Mac mini M4 위의 OpenClaw 안정 운영은 특별한 한 방보다 반복 가능한 습관에 가깝습니다. 의존성을 잠그고, Gateway 헬스를 자동으로 남기고, 롤링 재시작을 배치로 나누며, 로그 수위가 빨간색이 되기 전에 디스크를 비우고, 원격 링크 지터와 실제 프로세스 장애를 같은 순서로 분리합니다. 이 다섯 가지가 문서와 스크립트에 남아 있으면 다음 업그레이드는 사고가 아니라 예약된 유지보수에 가까워집니다.