2026 공유 원격 Mac 빌드 풀: GitHub Actions 셀프 호스트 Runner 라벨 라우팅·동시 대기열·충돌 처리 체크리스트
소규모 팀이 원격 Mac 한 풀에서 팀 CI를 돌릴 때 셀프 호스트 Runner만으로는 부족합니다. 라벨 라우팅으로 잡을 올바른 머신에 붙이고, 동시 대기열·락 규칙으로 충돌을 줄여야 합니다. 아래는 실행 가능한 임계값(큐 분리, 태그 규칙, 동시 상한, 디스크 정리)을 한 페이지에 모은 요약(핵심 서술 약 800–1500자)입니다.
① 공유 풀 목표와 리스크
목표는 PR 피드백 단축, 재현 가능한 릴리스, 공정한 접근입니다. 리스크는 CPU·RAM·디스크·시뮬레이터 경합, 서명·키체인 충돌, 그리고 “queued”만 보이는 불투명 대기입니다. Runner는 멀티테넌트 격리가 아니라 스케줄링 끝점으로 보고, Xcode 고정·업그레이드·드레인 담당을 정하세요.
큐·풀을 나눌 때(결정 체크리스트)
- 분리: 제품마다 Xcode·macOS 기준이 다르면 Runner와 라벨 라우팅을 나눠 잘못된 툴체인 선택을 막습니다.
- 분리: VNC 대화형 작업과 무거운 CI가 겹치면 CI 전용 노드 또는 시간대를 둡니다.
- 분리: 릴리스 아카이브는 PR 잡과 같은 풀을 쓰지 않도록
ci-release등 전용 라벨을 둡니다. - 단일 큐 유지: Xcode 하나·낮은 병렬만 있을 때는 측정 후 구조를 추가합니다.
② 라벨 라우팅 비교 매트릭스
라벨 라우팅은 어떤 셀프 호스트 Runner가 잡을 받을 수 있는지 고릅니다. 닉네임식 태그는 운영 사고로 이어지니 OS·아키·툴체인·역할을 기계적으로 쓰세요.
| 라우팅 패턴 | 적합 | 트레이드오프 |
|---|---|---|
넓은 풀 (macos, arm64) |
동질 플릿, Xcode 단일 고정, 가동률 최대 | 릴리스 전용 용량 예약이 어렵습니다. |
툴체인 스코프 (xcode-16-2 등) |
컴파일러·SDK 핀 고정 저장소 | Runner·라벨 업그레이드 캘린더 관리 부담 |
SLA 레인 (ci-pr, ci-release) |
PR 검증 vs 출시 빌드 분리 | 레인별 하드웨어가 부족하면 잡이 멈춥니다. |
팀·조직 슬라이스 (team-mobile 등) |
과금·블래스트 반경 분리 | 슬라이스가 비면 가동률 저하·운영 증가 |
태그·라벨 명명 규칙(권장)
- 최소 삼총:
os+arch+xcode-<major.minor>(예:macos,arm64,xcode-16-2). - 선택 역할 접미사:
ci-pr,ci-release,experimental— 다른 Xcode에 같은 역할 라벨을 재사용하지 않습니다. - GitHub 기본
self-hosted와 내부 표준 라벨 목록을 위키·저장소 README에 고정합니다.
③ 대기열·락 전략
동시 대기열은 GitHub Runner가 받는 잡 수, 물리 자원, 서명 단계 뮤텍스가 함께 결정합니다. 보수적으로 시작해 메트릭으로만 올리세요. FIFO·우선순위·캡은 공유 Mac 풀 FAQ와 맞춥니다.
| 정책 항목 | 출발 임계값 | 비고 |
|---|---|---|
| 동시 상한(무거운 컴파일·아카이브) | Mac 클래스당 활성 잡 1 | 한 대에서 아카이브 병렬을 늘리기 전에 노드 추가를 검토 |
| 동시 상한(경량 검증) | CPU 지속 ~75% 미만·여유 RAM 8GB+일 때 최대 2 | 워크플로 concurrency:로 오래된 PR 빌드 취소 |
| 풀당 전역 대기 깊이 | 대기 잡 ~20건 초과 시 실패·연기 | 수 시간 적체를 숨기지 않고 알림 |
| 뮤텍스·락 | 키체인당 서명·노터라이즈 시퀀스 1개씩 | 파일·Redis·조직 승인 액션 등으로 비재진입 단계 보호 |
④ 권한·격리 요점
공유 호스트 CI는 권한이 뭉개지면 깨집니다. CI 전용 사용자·분리 홈, 자동화 키체인, 공유 디렉터리 소유권(ACL/setgid)을 문서화하세요.
디스크 정리 임계값: CI 볼륨 여유가 약 15–20% 아래로 떨어지거나, 프로젝트 캐시(DerivedData 등)가 대략 30–80GB를 넘으면 정리를 트리거(SSD 특성에 맞게 조정). ~/Library/Keychains·서명 자산은 보존하고 무분별 rm -rf는 금지. 자세한 격리는 SSH/VNC 공유 빌드 FAQ·권한 격리 가이드를 참고하세요.
⑤ 모니터링·알림
Runner 하트비트, 큐 대기(생성→시작), 포화(CPU·메모리·디스크), 인증 실패(키체인·인증서) 네 가지를 봅니다. PR 대기가 SLO(흔히 10–20분)를 넘거나 여유 디스크가 위 정리 임계값 아래로 오래 머물면 알림을 겁니다.
세션 품질·재연결은 안정성·SLA FAQ·지연·재연결 체크리스트와 풀 정책을 맞추세요.
⑥ FAQ
- 라벨이 큐 제품을 대체하나요?
- 아니요. 저장소 간 우선순위·데드라인·공정 분배가 필요하면 GitHub
concurrency와 외부 조율을 병행하거나 원격 Mac 노드를 나눕니다. - 머신당 Runner는 몇 개가 적당한가요?
- 무거운 iOS/macOS 빌드는 종종 머신당 Runner 1입니다. 여러 개는 동시 잡·디스크·시뮬레이터 경합을 키우므로 상한이 없으면 위험합니다.
- 다중 노드·팀 플랜이 필요한 첫 신호는?
- 큐 SLO 반복 위반, 서명 단계 루틴 충돌, 점검 한 번에 모든 저장소가 멈춤 — 튜닝이 아니라 구조 문제이며 노드·릴리스 전용 호스트로 풉니다.
→ 다음 단계·구매 안내
한 대로 라벨 라우팅과 동시 대기열 요구를 모두 만족하기 어려우면 노드를 늘려 PR·릴리스 풀을 나누고 Xcode를 머신별로 고정하세요. 홈에서 다중 노드·팀 요금을(로그인 없이) 비교하고, 구매·대여 절차를 확인하며, 도움말 센터에서 접속을 익히세요. 심화 글: 블로그 목록, SSH vs VNC 가이드, 부하 분산·장애 조치, Runner vs 대여 Mac 비교.
팀 CI를 다중 원격 Mac 노드로 확장하기
충돌을 줄이고 SLO를 지키려면 풀을 쪼개세요. Meshmac에서 플랜을 비교한 뒤 팀을 초대할 수 있습니다.