단주기 릴리스에서 XCTest와 시뮬 부트가 wall time을 잡아먹습니다. 한 대에서 동시 목적지를 최대로 올리면 캐시 히트엔 유리하지만 RAM·디스크 경쟁으로 간헐 타임아웃이 늘고, 일 단위 클라우드 Mac 두 대로 유닛·UI 큐를 나누면 고정비는 오르되 p95와 재시도율이 안정되는 경우가 많습니다. 실패 재시도와 p95 완료를 같은 표에 두세요.
단일 포화 병렬 vs 이중 Runner 큐 분리
단일 포화는 코어에 맞춰 병렬 테스트를 최대로 올리는 방식입니다. 시뮬마다 메모리 예약이 쌓이면 swap이 나고 XCTest 타임아웃이 코드 결함처럼 보입니다. Runner A=스모크·유닛, B=UI·스냅샷처럼 나누면 부트 스톰이 겹치지 않아 같은 vCPU라도 p95가 내려갑니다. 자격 증명은 Fastlane Match·HTTPS·다중 Job 서명 매트릭스(별도 글)와 같이 잠금·읽기 전용 경로를 먼저 맞추세요.
메모리·디스크 간헐 실패 체크리스트
메모리는 vm_stat로 페이지아웃, 디스크는 CoreSimulator·DerivedData가 같은 볼륨을 채우는지 확인하세요. 세션마다 파생 데이터를 비우거나 볼륨을 분리하고, 런타임은 Xcode와 고정 페어로 맞춥니다. EAS·로컬 하이브리드와 분·주 과금은 EAS 로컬 빌드와 일 단위 Mac·캐시 키 매트릭스(별도 글)와 같은 잣대로 맞추면 재작업이 줄어듭니다.
| 신호 | 단일 포화에 유리 | 이중 일 단위 Runner에 유리 |
|---|---|---|
| PR당 테스트 시간 짧고 캐시 히트율 높음 | 고정비 1대로 충분 | 분리 이득 작음 |
| UI 테스트·스냅샷 비중 큼 | 간헐 타임아웃 증가 위험 | 큐 분리로 p95 안정 |
| 야간·릴리스 창에만 부하 | 시간대 스로틀로 커버 가능 | 2대 상시는 과잉일 수 있음 |
| 팀이 동시에 다수 브랜치를 밀어 넣음 | 대기열 꼬리 커짐 | 병렬 큐로 SLA 맞추기 쉬움 |
xcrun simctl shutdown all 후에도 동일하면 런타임·디스크·Keychain 로그를 한 이슈로 묶으세요. 증상만으로 XCTest를 스킵하면 회귀가 숨습니다.
ROI는 「성공 1회 비용」이 아니라 SLO 비용
ROI는 기계 분당 단가만이 아니라 재실행·수동 재트리거·리뷰 지연 인건비를 같은 표에 올리세요. 단일 포화가 주간 SLO를 한 번 깨면 이중 분할이 바로 정당화되는 경우가 많고, 부하가 주 2~3회 짧은 피크뿐이면 일 단위 Runner를 그때만 켜는 하이브리드가 흔한 절충입니다.
클라우드 Mac mini에서 XCTest 병렬이 더 안정적인 이유
시뮬 병렬은 Apple Silicon 통합 메모리와 대역폭이 있어야 스왑 없이 부트 스톰을 견딥니다. 클라우드 Mac mini M4는 Xcode·시뮬·러너를 같은 macOS 스택에서 네이티브로 돌릴 수 있고, 저전력·무팬으로 장시간 부하에도 전력 피크가 작습니다. Gatekeeper·SIP·FileVault로 무인 노드 표면도 줄일 수 있습니다.
범용 PC 대비 운영 리듬이 단순해져 총소유비용 관점에서도 유리한 편입니다.
XCTest 병렬과 시뮬 안정성을 한 번에 끌어올리고 싶다면, VPSSpark 클라우드 Mac mini M4는 지금 시점에서 가장 현실적인 출발점입니다——지금 구매하고 플랜을 확인해 팀의 p95와 재시도율부터 낮춰 보세요.