지연 예산 · 동기 경계 · 잠금 리스 · 검증 가능한 Mac Mesh 릴레이
테크 리드와 모바일 플랫폼 담당자가 여러 원격 Mac 메시에서 일할 때 카피 변경은 로컬에서 끝났는데 다른 노드에서 컴파일만 실패하는 상황이 자주 납니다. 동기 경계가 불명확하거나 DerivedData 포인터가 남지 않거나 핸드오프 중 잠금 리스가 만료된 경우가 많습니다. 이 글은 가벼운 로컬 편집으로 충분한 경우와 무거운 빌드를 원격 세션에 고정해야 하는 경우를 나누고, README에 둘 지연 예산 세 가지, 저장소·키·파생 경로 경계, 6단계 Runbook과 노드 전환 표를 제시합니다. 분리 체크리스트 원안, Mac Mesh 오케스트레이션, SSH 대 VNC 릴레이와 함께 읽으세요.
가벼운 편집은 바이너리 계약을 바꾸지 않는 변경입니다(주석, 카피, 에셋 교체, 작은 설정 토글). ABI·매크로·Swift 모듈 경계·서명 파이프라인을 건드리면 노트북과 메시 노드 간 드리프트를 피하기 위해 원격 CI 세션으로 옮겨야 합니다. 공유 빌드 러너 풀은 그 분리를 큐 비용에 녹입니다.
숨은 캐시: 로컬 Xcode 인덱스와 원격 DerivedData가 달라 로컬은 초록·CI는 빨강.
중간 포인터: 브랜치 이름은 맞지만 아카이브 경로가 이전 노드 임시 폴더를 가리킴.
키체인 맥락: 로컬에서만 키체인을 열어 두면 무인 원격에서 첫 서명이 실패.
큐 경합: 두 엔지니어가 같은 메시 노드에 올라 리스를 갱신하지 않고 빌드를 밟음.
리전 간 RTT: README에 상호작용 예산이 없어 원격 IDE 지연을 스펙 부족으로 오해.
안내: 전송 방식 비교가 목적이면 먼저 SSH 대 VNC 글을 보세요. 여기서는 어디서 컴파일할지만 다룹니다.
리뷰에서 표를 그대로 쓰고, 숫자는 다중 리전 메시에서 흔한 계획 구간입니다. 자체 트레이스로 바꾸고 샘플링 방법도 남기세요.
| 관점 | 로컬 경량 편집 | 원격 중빌드 | 하이브리드 |
|---|---|---|---|
| 맞는 변경 | 카피·설정·에셋 교체 | ABI·서명·아카이브·성능 크리티컬 | 로컬 PR, 야간 전체 빌드는 원격 |
| 자격 정보 | 서명 맥락 생략 가능 | 프로파일과 키체인 게이트 정렬 필수 | 핸드오프 봉투에 아티팩트 해시 |
| 실패 형태 | 대부분 머지 충돌 | 큐 타임아웃·잠금 드리프트·캐시 오염 | 포인터 부패 또는 리스 불일치 |
| 메시 결합 | 오프라인 가능 | 노드 ID와 리전 고정 필수 | 오케스트레이션 메타데이터 의존 |
분리 품질은 노드 전환 후 몇 분 안에 중간 포인터와 잠금 소유자를 설명할 수 있는지로 평가합니다. 로컬 빌드가 가끔 통과하는지가 아닙니다.
아래 여섯 단계는 기존 분리 체크리스트와 함께 씁니다. 그 글이 행렬 필드를 정의하면 본문은 잠금 리스와 임계값 명령 형태를 추가합니다.
워크로드 등급 선언: MR 템플릿에서 카피 전용·ABI 영향·서명 영향을 체크.
대상 풀 고정: region + pool_id를 남기고 “빈 Mac 아무나” 표현 금지.
핸드오프 봉투 발행: 브랜치 HEAD, derived_slice_token, queue_ticket_id.
잠금 TTL 선언: 컴파일 P95에 맞추고 +10분 하드 상한.
프로브: 노드가 인덱스 다이제스트와 여유 디스크 가드를 기록하고 임계 미만이면 큐 수락 거부.
사후 필드: 실패 시 봉투 해시와 잠금 소유자가 필수. xcodebuild 꼬리만으로는 불충분.
export HANDOFF_JSON="$(jq -nc \
--arg head "$(git rev-parse HEAD)" \
--arg slice "${DERIVED_SLICE_TOKEN}" \
--arg ticket "${QUEUE_TICKET_ID}" \
--arg pool "${MAC_MESH_POOL_ID}" \
'{git_head:$head, derived_slice:$slice, queue_ticket:$ticket, pool:$pool}')"
curl -sf -X POST "${MESH_HANDOFF_URL}" -d "${HANDOFF_JSON}" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: ${QUEUE_TICKET_ID}"
대부분의 실패는 “Git이 맞다”와 “전체 상태가 맞다”를 혼동해서 생깁니다. 프로파일 세부는 프로비저닝 거버넌스 글을 보세요.
| 경계 | 맞춰야 할 것 | 전형적 실패 신호 |
|---|---|---|
| Git | 브랜치·서브모듈·LFS 포인터 | 빌드가 오래된 submodule SHA 참조 |
| DerivedData | 이름 붙인 슬라이스나 캐시 네임스페이스 | Swift 모듈 표면 불일치 |
| 키와 프로파일 | 프로파일 매니페스트 해시·키체인 잠금 해제 정책 | 무인 환경에서 첫 서명 실패 |
| 큐 | ticket_id 갱신과 소유자 | 유령 빌드가 CPU 점유 |
주의: DerivedData를 공유 볼륨에 복사한다면 보존 기한과 GC 정책이 필수입니다. 없으면 긴 휴가 뒤 메시가 동시에 붕괴합니다.
포인터 동결: 중간 경로와 큐 토큰을 트레이스 ID와 함께 로그.
잠금 해제: 빌드 중지 또는 러너 작업 취소, 좀비 xcodebuild 없음 확인.
디스크 확인: 대상 노드 여유 공간이 파생 피크 예산보다 커야 함.
세션 재구성: 새 노드에서 CI 사용자 맥락과 키체인 정책 재생성.
프로브 재생: 전체 파이프라인 전에 최소 타깃 컴파일.
봉투 다시 쓰기: 핸드오프 JSON의 pool·ticket 필드 갱신.
아래 숫자는 엔지니어링 검토용 구간입니다. 자체 텔레메트리로 바꾸고 관측 창도 적으세요.
| 팀 규모 | 배포 빈도 | 리전 간 비중 | 먼저 안정적인 선택 |
|---|---|---|---|
| 소 | 주 여러 번 | 낮음 | 고정 원격 세션 + 명시 TTL |
| 중 | 매일 | 중간 | 하이브리드 + 자동 봉투 검증 |
| 플랫폼 | 지속 | 높음 | 전용 원격 워크스테이션 + 잠금 지표 대시보드 |
개인 노트북에 원격 중빌드를 맡기면 절전·OS 업데이트·감사 불가 키체인 확인으로 큐 SLO가 무너집니다. 완전 로컬 풀 빌드만 고집하면 아카이브 피크에서 대역과 발열이 더 악화됩니다.
계약 수준 가동 시간과 전용 노드 경계가 필요한 메시 전역 컴파일에는 즉흥 하드웨어로 감사 가능한 SLA를 내기 어렵습니다. iOS CI/CD와 AI 에이전트 릴레이 자동화에는 VpsMesh Mac Mini 클라우드 대여가 보통 더 적합합니다. 리전과 사양을 고르고 노드를 전용으로 두며 큐 정책을 운영 계약에 적으세요.
이전 분리 체크리스트가 행렬과 포인터를 정의하면 본 글은 2026 메시를 위해 README 지연 예산 세 가지와 잠금 리스 Runbook을 추가하고 태스크 오케스트레이션과 연결합니다. 전용 노드는 클라우드 주문 페이지에서.
UX 지연을 스펙 부족으로 오해하고 큐 SLO 위반이 숨습니다. 플레이북과 고객 센터 연결 항목 옆에 예산을 적으세요.
요금은 요금 페이지, 구매 대비 3년 TCO는 사거나 빌리거나 행렬을 보세요. 상시 원격 세션은 주문 흐름에 바로 얹기 좋습니다.