단주기 iOS 팀은 PR마다 시뮬레이터 스모크, 릴리스 브랜치마다 아카이브 레인을 원하고 핫픽스는 남의 macOS 대기열 뒤에 묶이길 원하지 않습니다. CircleCI 같은 관리형 macOS 실행기와 일 단위로 임차한 클라우드 Mac에 붙인 셀프 호스팅 Runner는 둘 다 「CI에 Apple 실리콘이 필요하다」는 문제를 풀지만, 비공개 의존성 처리, 동시 실행 상한, 제품 조직에 약속할 수 있는 대기열 SLO에서 갈라집니다. 이 글은 벤더 비교가 아니라 스프린트 단위 매트릭스로 트레이드오프를 정리해, 번인 주 전에 레인을 고르게 합니다.
비공개 의존성: 키는 누가 쥐나
HTTPS SPM, CocoaPods 프라이빗 스펙, 내부 Git 서브모듈은 잡 하나보다 오래 사는 자격 증명이 필요합니다. 관리형 macOS에서는 플랫폼 시크릿 스토어·단기 토큰·이그레스 허용 목록에 기대기 쉬워 배선은 빠르지만, 로테이션 주기와 감사 모델은 플랫폼을 따릅니다. 전용 클라우드 Mac에 붙인 셀프 호스팅 Runner는 조직 키체인 마운트, 리졸버 고정, 읽기 전용 배포 키를 보안 검토에 맞게 둘 수 있어 예측 가능하지만, 로테이션과 블래스트 반경 리뷰는 팀이 집니다.
경험칙: 컴플라이언스가 하나의 중앙 시크릿 브로커와 불변 잡 로그를 원하면 관리형이 서류 싸움에서 유리합니다. VPN 스플릿 터널, 내부 아티팩트 미러, 관리형 이미지가 마찰 없이 닿기 어려운 서브모듈 경로가 필요하면 일 단위 임차 Mac의 Runner가 돌발을 줄입니다. macOS 전용 두 번째 파이프라인을 나누는 결정은 2026년 단주기 스프린트: 두 번째 macOS CI 파이프라인 vs Linux 에이전트 잡 분리 — 대기열 비용·시크릿 격리 매트릭스·FAQ와 함께 읽으면 레인 분리 논리가 맞물립니다.
동시 실행 상한과 대기열 이야기
CircleCI 등은 macOS 용량을 조직 단위 동시성·플랜 티어로 묶습니다. 재무 예측에는 좋고, 버스트 팀에는 가혹합니다: macOS 동시성이 낮으면 뜨거운 브랜치 두 개와 릴리스 컷이 같은 오후에 직렬화될 수 있습니다. 일 단위로 빌린 클라우드 Mac의 셀프 호스팅 Runner는 그 창 동안 전용 코어를 줍니다. 대기 깊이는 주로 「몇 대를 켰는가」이지 「다른 고객이 오늘 오후에 무엇을 돌렸는가」가 아닙니다.
내부 SLO로는 단순 월 빌드 시간이 아니라 웹훅부터 macOS에서 첫 스텝이 돌기까지를 재세요. PR 피드백에 흔히 허용되는 p95 대기(대략 5~10분)를 넘기면 관리형 동시성을 늘리거나, 소수의 고정 태그 뒤에 일 단위 클라우드 Mac Runner 풀을 두는 편이 낫습니다. Shell Executor·캐시 키·태그 전략은 2026년 단주기 버스트 빌드: GitLab CI 셀프 호스팅 macOS Runner를 클라우드 Mac에 붙일 때의 Shell Executor, 캐시 키와 태그 전략——GitHub Actions와 혼용할 때의 의사결정 매트릭스와 실행 가능한 파라미터 FAQ에 자세히 있으며, CircleCI와 다른 시스템을 섞을 때도 같은 태그 규율이 통합니다.
| 축 | 관리형 macOS 실행기(예: CircleCI) | 일 단위 클라우드 Mac 셀프 호스팅 Runner |
|---|---|---|
| 비공개 의존성 / 이그레스 | 플랫폼 템플릿·시크릿 스토어, 커스텀 경로는 적음 | VPN·미러·DNS 전권, 운영은 자체 |
| 동시성 상한 | 플랜·조직 캡, 공유 플릿 노이즈 | 머신별 독점, 노드 수로 스케일 |
| 대기열 SLO 리스크 | 플릿 혼잡 시 급증, 웹훅→시작 p95 관측 | 외부 혼잡은 적음, 디스크·이미지 드리프트 주의 |
| 이미지 위생 | 프리베이크 스택, 스노플레이크 유지보수 적음 | Xcode·CLT 고정, 맞춤 튜닝은 빠름 |
| 비용 모델 | 분·동시성 티어 | 일 임차 + Runner 엔지니어링 시간 |
대기열 SLO 의사결정 매트릭스(실무 FAQ)
관리형에 머물 때: p95 대기가 허용 범위 안이고, 비공개 의존성이 보안팀이 이미 승인한 HTTPS+PAT뿐이며, 특이한 네트워크 경로가 없을 때입니다. 일 단위 클라우드 Mac을 더할 때: 한 스프린트 안에 두 번 SLO를 넘겼거나, TestFlight 핫 레인에 결정적 코어가 필요하거나, 특정 잡 클래스에서 키가 우리가 통제하는 하드웨어를 벗어나면 안 된다고 할 때입니다.
로그할 것: 대기·의존성 페치·컴파일·코드사인/공증을 분리하세요. 많은 「CI가 느리다」 티켓은 DNS나 아티팩트 미러 지연이 빌드 모자를 쓴 경우입니다. 롤백: 셀프 호스팅 스냅샷이 망가지면 관리형 이미지를 핀한 워크플로로 되돌리세요. 폴백 YAML은 매달 한 번 브랜치에서 검증해 화재 진압이 되지 않게 합니다.
mac-managed-pr, 독점을 위한 mac-dedicated-release. 불만 한 번으로가 아니라 SLO 위반일 때 잡을 승격하세요.
2주 번인 체크리스트
예산을 확정하기 전, 정상 스프린트 트래픽으로 두 레인을 14일 계측하세요.
- 워크플로마다 웹훅→Runner 시작을 잡고, 브랜치 패턴(메인 vs 피처)으로 나눕니다.
- 의존성 페치를 컴파일과 분리해 로그해 SPM/CocoaPods 미러 이슈가 「느린 Xcode」로 위장하지 않게 합니다.
- 전용 레인에서 하루 한 번 서명을 돌려 프로비저닝 드리프트를 부하에서 확인합니다.
- 셀프 호스팅 디스크 스냅샷이 깨졌을 때 마지막으로 검증된 관리형 이미지를 핀하는 폴백 YAML을 리허설합니다.
관리형 대기 p95가 계속 녹색이고 비용이 예측 가능하면 릴리스 주에만 작은 셀프 호스팅 풀이면 됩니다. p95가 합의 임계를 자주 넘기면 macOS 분을 전용 하드웨어로 옮기고, 관리형은 안전망으로 두세요. 모든 핫픽스의 기본값이 될 필요는 없습니다.
클라우드 Mac mini에서는 대기열 베팅이 더 설명하기 쉬워집니다
셀프 호스팅 Runner를 붙이든 CI 실패 사이에서 대화형으로 고치든, Apple 실리콘 Mac mini급 하드웨어는 Xcode와 Swift 링커에 숨 쉴 공간을 줍니다. 통합 메모리는 큰 SPM 그래프에서 스왑 스래시를 줄이고, macOS 안정성은 무인 Runner를 지루하게 만듭니다. CI가 그래야 하듯이요. Gatekeeper·SIP·FileVault로 휴지 시크릿 위생을 갖추면 「오늘 공용 플릿이 한가한가 기도」하는 대안이 됩니다.
유휴 전력 약 4W와 소형 무소음 설계는 버스트 팀에도 잘 맞습니다. 릴리스 주에만 켜고 캐시를 따뜻하게 유지한 뒤, 쓰지 않는 금속 비용은 멈출 수 있습니다.
macOS 대기열 리스크에서 벗어날 전용 레인을 재고 있다면, VPSSpark 클라우드 Mac mini M4는 SLO를 증명하기 좋은 출발점입니다——지금 바로 플랜 확인하고 남의 동시성을 기다리지 않는 단주기 릴리스로 이어가세요.