클라우드 Mac에 OpenClaw를 올릴 때 막히는 지점은 자주 "상시 실행"이 아니라 "설치와 첫 점검"입니다. 공식 install.sh와 npm 전역, openclaw onboard --install-daemon으로 만들어지는 launchd 서비스, 기본 대시보드 18789 포트, openclaw gateway status 읽는 법, iCloud·사내 드라이브가 아닌 state 경로, Git·OCI 레지스트리에 가까운 리전, 그리고 M4 Pro 64GB가 효과가 큰 병행 부하, 오류 우선순위를 한 흐름으로 묶습니다. 24시간 가동·heartbeat·pm2 심화는 동일 폴더 24시간 OpenClaw 안정 운영을 보고, 본문은 설치·1차 점검에 집중합니다.
01

클라우드 Mac OpenClaw 설치에서 반복되는 여섯 가지 “거의 맞는” 실패

렌털 Mac은 수년 쓴 사내 노트북이 아닙니다. 기본 이미지가 얇고 세션은 짧습니다. curl 한 줄에 npm을 더하는 그림에 머물면, openclaw onboard --install-daemon이 쓰는 launchd의 Label, 작업 경로, 표준출력, PATH를 한 번에 보지 못합니다. 첫 실패는 버전 표류입니다. 동일한 릴리스 문구라도 한쪽은 one-liner, 한쪽은 오래된 npm 전역이면, openclaw gateway status가 가리키는 경로가 실제 프로세스와 엇갈립니다. 둘째는 18789 누군가가 먼저 씀 내부 health 서버, 실패한 사이드카, 임시 대시가 포트를 잡는 경우, 바깥에서는 “모델이 불안하다”는 관측으로 잘못 읽힙니다. 셋째는 동기화 폴더에 둔 state로 SQLite 쓰기가 끊깁니다. 넷째는 리전이 Git·레지스트리와 멀리 떨어져 I/O가 설치 실패로 보이는 케이스, 다섯은 메모리로 스킬·브라우저·캐시가 겹쳐 swap, 여섯은 진단 순서를 뒤집는 일입니다. 상시 운용은 기존 OpenClaw 글의 pm2·heartbeat 런북을 따르며, 여기는 설치 SSoT에 맞출 것입니다. Xcode CI를 같은 머신에 둔다면 DerivedData·캐시가 OpenClaw I/O와 경쟁하므로 경로·용량 owner를 티켓에 씁니다. 다지역·RTT·렌트 주기는 다지역 가이드와 맞춥니다. 오픈한 화이트보드 수준의 절차는 다음 주엔 누구 기억에도 남지 않으므로, 태그·Node 메이저·onboard log 한 줄씩이 문서 머리에 붙어야 합니다. 주말에 켜 둔 VNC는 프로덕션이 아니고, launchd가 재부팅을 이기지 못하면 아직 “개발기”입니다. 반대로 EDR/백신이 state 인근을 실시간 스캔하면 sqlite 지연이 “모델 느림”으로 보이기 쉬우니, 경로는 보안팀과 같이 씁니다.

M4 Pro 64GB는 스킬 수·벡터 캐시·백그라운드 자동화가 동시에 쌓일 때 통합 메모리 병목을 풀어 tail latency를 줄이는 쪽이지, RTT를 줄이는 칩이 아닙니다. 먼저 대륙·레지스트리·미러 쪽 기하를 잡고 나서 64GB를 논의하는 순서를 지킵니다. Git clone과 npm install이 느리면, 큰 응답 캐시로 착각하지 말고 측정한 RTT·프록시·DNS 스플릿을 올리면 됩니다. 팀이 “같이 찍힌” 스샷이 아니라, 동일 openclaw --version 출력이 여러 콘솔에 남는지가 재현성의 표면 신호입니다.

01

릴리스 태그·Node·패키징 루트를 문서에 안 남깁니다. 30분 내제 재구축이 목표이면 one-liner가 우선, nvm·모노레포가 먹는 환경이면 npm 전역도 가능.

02

onboard·launchd 검증을 건너뜁니다. 대화형 셸에만 붙은 Gateway는 VNC/SSH 끊김과 함께 흩어집니다.

03

18789의 주인이 없습니다. lsof, status, 문서의 프로세스 이름을 맞춥니다.

04

state·로그에 동기화를 겹칩니다. 백업은 스냅샷, 키는 마스킹·보존기간. 불필요한 전체 dump 공유는 금지.

05

리전이 산맥 너머입니다. 먼저 RTT, 그다음 M4 Pro 이야기.

06

npm 설치 티켓과 OOM 티켓을 섞습니다. 런타임 심화는 24시간 글로.

이 여섯 가지는 단독 해법이 아닙니다. 경로·launchd·포트·로컬 디스크·RTT·메모리를 동시에 보면 다음절의 표에 넣을 열이 생깁니다. 또한 주간 배포가 몰릴수록 18789·상태·로그가 함께 흔들리므로, 변경이 “누가 언제 왜”인지 런북 1장에 써야 감사가 됩니다. 마지막으로 “문서에 없는” 사내 CA 만료, 프록시 예외, 사내 Artifactory 끊김을 같은 봄박에 넣지 않으면, 릴스 전쟁 끝에만 표면화되는 미스를 줄일 수 없습니다. 그래서 측정·태그·경로·포트·리전·메모리를 나란히 적는 표가 요구됩니다. 동일 머신에 다른 에이전트를 붙이면, 포트와 로그 owner가 늘어나는 만큼 표도 같이 늘어나야 합니다. 아니면 금요일에만 보이는 409가 월요일에 “인프라가 나빠졌다”는 말이 됩니다.

02

install.sh·npm, 18789, state: 표에 고정할 열

one-liner는 “새 VM에 최소 기록으로 최대 합의”에 맞고, npm 전역은 “이미 nvm·프록시·내부 registry가 뼈”일 때 맞습니다. launchd는 대화식 rc를 읽지 않을 수 있으니 which openclaw·which node를 launchd에도 똑같이 보이게 래퍼·절대경로를 씁니다. openclaw gateway status는 그 일치의 가장 싼 검증기입니다. 18789는 나가는 LLM API와 별도입니다. 127.0.0.1과 0.0.0.0은 보안·터널·프로브 문서에 따로 씁니다. M4 Pro 64GB는 swap과 GC·큰 힙이 동시에 쌓일 때 설득력이 있고, 대양 건너 RTT는 리전·미러로 먼저 잡아야 합니다. NVMe 공간, 로그 롤, state가 같은 I/O 압박에 묶이면 swap만 보고 64GB를 늘려 “디스크는 나중”이 되는데, 그래선 반쪽입니다. EDR, 사내 DLP, 실시간 백신이 동일 볼륨을 스캔하는지도 I/O 열에 넣고, “모델이 느리다”와 분리하십시오. OCI, npm, LLM, Git이 서로 가까울수록 small-chunk I/O의 실패율이 떨어집니다. 반대로 한쪽만 머나먼 경우, onboard의 특정 스텝만 반복 실패하며 “npm이 깨졌다”는 태그가 붙습니다. 실제로는 프록시 CONNECT 또는 DNS.

진입적합한 팀onboard 연결
공식 install.sh빈 머신 30분 내 동일이후 openclaw onboard --install-daemon
npm 전역Node·미러·프록시가 이미 고정plist에 절대 node/openclaw 경로

둘째 표는 18789 옆에 올 I/O·리전·동기화 체크를 열로 둡니다. state를 네트워크 볼륨에 두는 순간, “가끔 쓰기 실패”가 표준 패턴이 됩니다. iCloud/사내 동기/양방향 백업이면 끄고 재현부터. 로그·키·PII는 보존·접근·삭제의 세 줄이 보안表와 같이 가야, 장애 공유를 안전히 할 수 있습니다. 64GB는 스킬·브라우저·캐시·게이트웨이의 동시성에 대한 답이지, 18789 충돌이나 launchctl 불일치의 답이 아닙니다. 리전·메모리·NVMe·RTT·보안스캔·동기화·프록시·CA 만료·DNS를 “한 티켓에 한 열”로 쓰지 않으면, 긴긴 장애 후에도 같은 혼란이 반복됩니다. 예산표에 M4 Pro만 튀고 RTT·오브젝트 스토리지·리전이 안 보이는 건, 지표가 누락됐다는 뜻입니다. 반대로 지표를 나란히 두면, “이번엔 켜만 올릴지 리전을 옮길지”가 토요일 대신 월요일에 결정됩니다. 동시에, 주문·렌트 기간·리전·메모리는 주문·가격 흐름에 남깁니다.

항목기본/가정우선 점검
로컬 health·대시18789lsof, status의 bind, 충돌 서비스
state·캐시로컬·비동기사내 drive·iCloud·EDR·NAS
리전Git·registry 근접RTT·프록시·DNS

같은 바이너리, 같은 launchd, 같은 실제 경로, 같은 18789, 같은 로컬 state. 하나라도 틀리면 "거의 잘 켰다"는 착시가 남습니다.

M4 Pro 64GB는 병행 스킬·브라우저·벡터캐시·게이트웨이 힙이 겹쳐 swap이 반복될 때 설득력이 커집니다. 그 전에 18789·state·RTT·launchd·프록시를 먼저 잠그십시오. 그렇지 않으면 메모리만 올려도 타이밍 이슈는 남고, “칩이 부족해서”로 잘못 읽힙니다. 동시에, 로그 폭주가 IOwait를 올릴 땐 메모리가 아니라 롤·압축·보관 주기의 문제이기도 합니다. 셋을 표에서 분리하면 금융·플랫폼·SRE가 같은 화이트보드 위에 섭니다. 반대로 한 줄로 뭉개면, 분기末에 "왜 64GB 썼는지"에 데이터가 없습니다. 리전·레지스트리·Git·CI가 한 표에 있으면, “일단 싱가포르” 같은 구두 결정이 사라집니다. openclaw gateway status는 그 표의 1열만이 아니라, "실행중인 바이너리" 열이자 "launchd load" 열이자 "bind" 열이 동시에 맞는지 봅니다.

03

세 가지 룰: status·launchd·동기화 먼저, 재설치는 나중

최초: openclaw gateway status의 필드가 plist·launchctl list와 맞는지, 그다음 18789가 표의 주인인지, 그다음 state가 동기화에 안 걸렸는지, 그 뒤에야 .env·프록시·모델을 만집니다. 둘째: 18789 변경은 북마크·헬스프로브·팀의 다른 서비스와 같은 릴스에 묶습니다. 셋째: 상시 감독·재시작은 24시간 OpenClaw 글에 있는 pm2/heartbeat·런북을 따르며, 여기서 launchd·포트·경로 SSoT와 모순 없게 씁니다. 로그에 키가 있으면 첨부 전 마스크·최소행만. 장기 보관은 접근권·삭제기한을 IT 정책에 맞게 씁니다. 반복 장애는 “onboard log 한 줄씩”이 남는지, “같은 태그로 두 번째 머신에 설치”가 됐는지, “재시작 후에도” 같은 status인지의 세 토글로 먼저 잡습니다. 그 와중에 EDR/백신/동기/네트워크 볼륨/사내CA 만료/프록시를 한 티켓에 쓰지 않으면, 금요일에만 터지는 TLS 오류로 일주일을 날립니다. openclaw 바이너리 경로는 launchd와 셸이 같아야 하고, 다르면 “어제는 됐다”는 말이 나옵니다. 동시에, 모델·스킬 버전이 여러 콘솔에 흩어지면, status는 둘인데 응답이 셋인 꼴이 납니다. 그럴 땨 표를 고치기 전에, “누가 어느 셸에서 무엇을”부터 고정하십시오. 마지막으로, 18789를 바꾸면 lsof·status·팀의 다른 문서·프로브·SSH 터널·방화벽이 한 번에 흔들립니다. “급한 kill”이 아닌, 릴스에 박힌 포트이동이 답인 경우가 많습니다. 반대로 kill만 하면, 다음 deploy에 다시 충돌합니다.

또, 동일 머신에 다른 long-running job이 launchd·cron·user login으로 겹칠 땨, "누가 부모인지"를 먼저 씁니다. 부모가 셸이면 아직 dev입니다. 부모가 launchd user agent면, 재부팅까지 포함해 prod 후보입니다. 18789가 아니라 커스텀 포트를 쓴다면, 그 숫자가 팀의 단일 “포트 사전”에 없으면 안 됩니다. 그렇지 않으면, 다음 팀이 같은 숫자를 “빈 것”으로 착각합니다. status 출력의 “마지막 정상” 타임스탬프가 오래됐다면, 프로세스는 살아도 헬스가 죽은 것일 수 있으니, 프로브와의 계약(HTTP? TCP? path?)을 먼저 맞춥니다. 이때 64GB는 “헬스는 초록인데 응답이 가끔 늦다”의 후보이지, “헬스가 빨강”의 1순위는 아닙니다. 1순위는 launchd·포트·경로·sync·CA·Proxy입니다. 이렇게 순서를 쓰면, 온콜이 밤에 덜 지칩니다. 주간에 “재현 안 됨”이 줄어듭니다. 예산表에 M4 Pro만 뜨는 일도 줄어듭니다. 동시에, 동일 runbook이 한국·미국·싱가포르에 있을 때, 리전·프록시·CA만 다르고 나머지는 같아야 “현지化”의 의미가 생깁니다. 아니면 각 지역이 각자 18789·경로·태그를 갖는데 문서엔 “글로벌”이라고 쓰는 최악이 됩니다.

on-call 순서(붙여넣기)
1) openclaw gateway status
2) 18789 lsof(또는 지정 포트)
3) launchctl·plist·설치 prefix
4) state 경로(동기화·NFS·읽기전용)
5) 셸 vs launchd which node/openclaw
6) Git·registry·LLM·TLS·프록시·시간

권고: 포트·state·Node 메이저는 한 변경에 묶고, status가 모두 맞는 뒤에만 본트래픽.

04

여섯 단계: 빈 머신에서 reboot까지 감사 가능

KVMNODE에서 리전·메모리는 짧은 렌로 실측 뒤 가격·주문에 고정하십시오. VNC 켜 둔 채 “수동”으로만 살아남는 건 런북이 아닙니다. cold boot 후 openclaw gateway status가 동일한지, launchctl에 동일한 Label이 뜨는지가 SSoT. 상시·pm2·heartbeat는 24시간 OpenClaw 글에 합류시키고, 이 여섯 단계는 “설치·서비스 등록”까지만. 스킬 동시·브라우저·캐시로 swap이 반복돼 64GB를 논의할 땨, 18789·sync·RTT·launchd를 먼저 잠궜는지가 전제입니다. “재부팅 직전에도 작동”이 없으면 아직 dev입니다. 동시에, “재시작 뒤에도 로그 row 수가 같다”는 건, 롤/보존/용량 owner가 티켓에 있다는 뜻이기도 합니다. 주문·렌트·리전·메모리·디스크를 한 change에 묶는 습관이 있으면, 분기말에 “갑자기 64GB”가 아닌 “3월에 swap 그래프 보고 4월에 승인”이 됩니다. 반대로 주문이 채팅에만 흩어지면, 누가 어느 머신에 올렸는지 감사가 불가능합니다. 18789·state·CA·Proxy를 표에 쓰지 않으면, “우리 쪽은 괜찮은데”가 무한 루프가 됩니다. openclaw 태그·node -v·launchctl print를 스크린샷이 아니라 텍스트로 남기십시오. 스샷은 OCR이 필요합니다. 텍스트는 diff가 됩니다. 마지막으로, 64GB를 “그냥” 올리기 전, 동일 load로 24GB·32GB(가능하다면) 캡처를 해두면, 예산 싸움이 데이터로 갑니다. 동시에, CI와 게이트웨이를 한 OS에 둔다면, “어느 쪽 I/O가 저녁에”를 분리 측정하십시오. 한쪽이 밤에만 쓰는 디스크라도, 둘 다 같은 NVMe이면 쟁탈이 납니다. 그때 64GB로 “동시”를 풀지, “큐/머신분리”로 풀지가 갈립니다. 여기는 비용·보안·운영 셋이 같이 봅니다. 한국어 런북엔, 용어를 한가지로만 써 “게이트웨이/게이트웨이/게이트웨이" 같은 표기 흔들을 막는 것도 짧은 규칙이 필요합니다.

01

Node·path·one-liner vs npm 선언·Wiki 고정·태그 기록, corepack·TLS 사내 루트 포함.

02

CLI openclaw --version를 릴리스와 맞추고, npm이면 launchd 래퍼.

03

openclaw onboard --install-daemon 후 plist·Label·stdout·launchctl list·18789는 충돌 전까지 유지.

04

openclaw gateway status로 bind·부모. 공개 0.0.0.0은 ACL·ZTN 먼저, 아니면 터널.

05

state·로그 로컬, 스냅샷, 임계, CI와 용량 owner 분리, 필요시 64GB 검토.

06

콜드 reboot·status·소부하·상시·pm2는 24h 글로 합류.

05

예산行에 쓰는 세 가지 “정의”

A

재현=두 번째 머신, 같은 tag·Node·onboard, reboot 후 status 동일 아니면 미완.

B

18789(또는 지정)는 서비스명부에 등록·즉흥 kill이 아닌 릴스 이동.

C

리전·메모리·NVMe·RTT·보안·동기화는 열이 다름·한 열에 섞지 않음, 그래야 칩이 아닌 “거리/동기/IO”에 예산 씀.

주의: VNC·셸이 붙잡고만 있는 프로세스는 야간 장애의 가짜 “모델 불량”이 됩니다. launchd가 진실입니다.

흩어진 노트북·수많은 “개인 dev맥”보다, 같은 리전·같은 렌·같은 주문흐름에 묶인 클라우드 Mac Mini M4 / M4 Pro가 OpenClaw 설치·launchd·18789·state를 한 예산行에 쓰기 쉽습니다. KVMNODE의 다지역·다스펙·주문/가격으로 짧은 캐너리 뒤 64GB·렌·리전을 한 번에 올리고, 채팅 “급히 한 대”가 아닌 주문·가격에 흔적을 남기는 편이 감사·SRE·재무에 모두 이득입니다. 24/7·pm2·heartbeat는 24시간 OpenClaw과 합치면, “설치 런북”과 “상시 런북”이 어긋나지 않습니다. 동시에, 포트·경로·태그·리전을 표 한 장에 쓰지 않으면, 64GB·M4 Pro·“클라우드”가 각각 따로 도는 쇼핑이 됩니다. 반대로 표가 있으면, “이번엔 RTT 30ms·swap 0·18789 free·state local”이 한 줄로 남고, 승인이 빨라집니다. 마지막으로, EDR/동기/CA/Proxy를 “나중”에 붙이면, 64GB는 체감이 없을 수도 있습니다. 그래서 설치 1일차에 “보안/네트웍/백업”을 같은 change에, 또는 같은 표에, 넣는 것이 2026년식입니다. “글로벌” 문서는 각 리전 row가 있을 때만 글로벌이 됩니다. 한 row면 그건 한 리전뿐입니다. 그걸 “전사 표준”으로 착각하면, 싱가포르와 버지니아가 같은 18789를 쓰다 충돌하고, “인프라가 이상하다”가 됩니다. openclaw gateway status는 그때 "어느 리전·어느 태그"인지 한 줄이 더 있어야, 비교가 됩니다. 그리고, 최종적으로 “주문”은 사람이 아니라 시스템에 남아야, 다음 분기에 같은 실수를 사지 않습니다. 한 줄 요약: 표·주문·태그·리전·상태·launchd·18789·sync·64GB·RTT를 열로 쓰면, 2026년 OpenClaw를 클라우드 Mac에 “재현 가능”하게 씁니다.