빌드 호스트는 싱가포르에 두고 오케스트레이션과 산출물 이그레스는 미국·EU에 두었나요? 이 가이드는 원격 Mac에서 XCTest 단위·UI 테스트를 병렬화하는 팀을 위해 “로컬은 초록, CI는 빨강”이 플레이크처럼 보이게 만드는 여섯 가지 오해, M4·M4 Pro, 시뮬레이터 수, DerivedData 디스크 여유, 렌탈 기간을 한데 묶는 두 개의 표, 붙여 넣을 수 있는 xcodebuild 플래그·디스크 점검 명령·6단계 런북을 다룹니다. 읽은 뒤에는 워커 수, 디스크 알림 임계값, 러너 타임아웃 조정과 지역 이동 중 무엇이 맞는지 근거를 제시할 수 있습니다.
다음으로 메모리·디스크·네트워크를 함께 놓고, 매개변수화할 표로 이어집니다.
병렬 단위 테스트는 CPU와 RAM 피크를 밟고, 디스크 쓰기는 DerivedData 인덱스와 빌드 산출물에 몰립니다. 캐시가 따뜻하면 링크 버스트와 프로세스 수가 순수 클럭보다 먼저 상한을 만집니다.병렬 UI 테스트는 시뮬레이터 그래픽, WindowServer, 임시 파일을 더합니다. N번째 병렬 레인이 꼬리 지연을 키우기 시작하면 선형 이상의 가속은 끝납니다.
DerivedData 성장은 모듈 캐시, 병렬 컴파일, 정리 빈도를 따릅니다. 디렉터리 크기와 빌드 케이던스를 월 임대료만이 아니라 FinOps 신호로 추적합니다.크로스 리전 링크는 로컬 디스크 필요를 줄여 주지 않지만 결과·로그의 꼬리 지연을 키웁니다. “xcodebuild는 성공”과 “파이프라인 단계는 성공”을 분리하지 않으면 잘못된 층을 의심합니다.
러너 라벨·동시성 글과 재현 가능한 빌드·DerivedData 체크리스트와 함께 읽으세요. 작업 라우팅, 빌드 루트 봉인, 시뮬레이터 상한은 서로 다른 손잡이입니다.
| 차원 | Mac mini M4(기준) | Mac mini M4 Pro(더 높은 병렬) |
|---|---|---|
| 전형적 목표 | 단위 테스트 워커 2–4개; UI 병렬은 더 낮게 또는 시간 분할 | 단위 테스트 워커 4–8개; UI 병렬은 소크 후에만 상향 |
| 메모리 스트레스 신호 | 스왑, 느린 시뮬레이터 부팅, 부하 시 UI 끊김 | 같은 동시성에서 스왑 가능성은 낮음; 디스크 IO가 여전히 상한일 수 있음 |
| 디스크 가이드 | 512 GB는 브랜치가 많으면 빨리 찹니다; 병렬·다브랜치면 1 TB를 계획 | 병렬 UI와 여러 Xcode 버전이면 2 TB 선호 또는 공격적 정리 |
| 적합 | 작은 저장소, 단위 비중, 야간 단일 스윕 | 대형 모노레포, UI 팩 다수, 잦은 PR 빌드 |
| 렌탈 짝짓기 | 월 기준선 + 릴리스 주 단기 버스트 | 피크 경합을 피하려면 월·분기 고정 |
UI가 있는 xcodebuild test에서는 컴파일 병렬과 테스트 병렬을 분리합니다. 빌드에는 -parallelizeTargets를 올릴 수 있지만, -parallel-testing-enabled와 -maximum-parallel-testing-workers는 별도 소크가 필요합니다. GUI로 짧게 분석해야 할 때는 SSH vs VNC 가이드와 짝을 이루어 WindowServer에 UI 병렬을 24시간 고정하지 않는 편이 낫습니다.
| 시나리오 | 병렬 전략 | 원격 Mac에서의 추가 점검 |
|---|---|---|
| 순수 단위 테스트, 짧은 스위트 | 보통 수준 워커, RAM 피크에 맞춰 샘플링 | DerivedData 성장 곡선 관찰 |
| 무거운 UI 테스트 | 낮은 병렬 + 큐된 시간 창; 필요 시 스킴 분할 | 시뮬레이터 정리·WindowServer 재시작 정책을 문서화 |
| 모노레포, 다수 브랜치 | 러너 라벨로 격리, DerivedData 루트 분리 | 러너 체크리스트와 시크릿·동시성 상한을 맞춤 |
| 글로벌 팀, 느린 로그 이그레스 | 로컬 테스트 병렬은 유지, 집계·업로드만 스로틀 | HTTP/SSH 타임아웃·재시도 조정; 다지역 렌탈 가이드로 지역 재검토 |
| 야간 전체 매트릭스 + 주간 PR | 야간에 높은 병렬, 주간에는 메인 브랜치 보호 | 비피크에 딥 클린 예약 |
# 예: 병렬 테스트 워커 상한(프로젝트·하드웨어마다 다름—맹목적 복사 금지) xcodebuild test \ -scheme YourScheme \ -destination 'platform=iOS Simulator,name=iPhone 16,OS=18.4' \ -parallel-testing-enabled YES \ -maximum-parallel-testing-workers 4 \ -resultBundlePath ./TestResults.xcresult
# DerivedData / 시뮬레이터 발자국 감사(임계값은 디스크 %로 직접 정하세요) du -sh ~/Library/Developer/Xcode/DerivedData 2>/dev/null du -sh ~/Library/Developer/CoreSimulator 2>/dev/null df -h /
참고: 단일 워커 기준선과 현재 동시성을 나란히—총 시간, 테스트당 P95, 피크 RAM, 디스크 쓰기—캡처한 뒤 튜닝을 완료했다고 선언합니다.
-maximum-parallel-testing-workers에 적용하고, 단계마다 연속 세 번 초록을 요구합니다.이 글은 한 대의 원격 Mac에서 병렬 테스트를 얼마나 밀어붙일지에 답합니다. 다지역 노드 가이드는 호스트를 어디에 둘지, 제로 트러스트 접근 체크리스트는 트래픽이 어떻게 닿는지에 답합니다. 지역·기간 → 연결·러너 → 병렬 테스트 용량 순으로 읽으면, 흔들리는 경로 위에 동시성을 쌓지 않게 됩니다.
노트북은 절전, 가정용 네트워크, 패치 드리프트를 물려 받아 팀 SLA에 맞기 어렵습니다. 병렬도를 올리면 열·디스크 압력이 커지는데, 본래 CI 워커로 크기가 잡힌 기기가 아닙니다. 전용 원격 Mac은 실행을 개인 기기에서 분리해 계약으로 자동화 표면을 안정화합니다.
지역 배치, 피크용 렌탈 거버넌스, OpenClaw 같은 장수 에이전트와 깨끗이 공유할 호스트가 필요하면 불안정한 노트북에 워커를 쌓는 대신 MACCOME 클라우드 Mac에서 병렬 테스트를 돌리기 쉽게 승인받을 수 있습니다. 먼저 대여 요금을 확인하고, 주 사용자 지역 결제 페이지를 여세요—싱가포르, 도쿄, 서울, 홍콩, 미국 동부, 미국 서부. 연결 분류는 고객 센터에서 SSH나 터널 키워드로 찾습니다.
자주 묻는 질문
M4에서 안전한 병렬 시작점은 어떻게 잡나요?
인터넷 속설을 그대로 복사하지 말고 소크 테스트로 검증합니다. 워커 두 개에서 시작해 RAM과 디스크를 샘플링한 뒤, 위 표를 따라 승격합니다. 렌탈 티어는 Mac mini 대여 요금 페이지에서 비교합니다.
DerivedData가 거의 찼을 때 무엇을 먼저 바꾸나요?
묵시적 정지를 피하려면 먼저 병렬도를 낮춘 뒤 정리를 실행합니다. 디렉터리 경계는 재현 가능한 빌드·DerivedData 체크리스트와 맞춥니다.
CI는 실패인데 로컬은 통과—어디를 봐야 하나요?
업로드·집계 타임아웃을 테스트 실패와 분리합니다. 노드 배치는 다지역 노드 가이드로 검증합니다.
플레이크가 폭증했을 때 즉시 머신을 늘려야 하나요?
단일 워커 대조와 리소스 모니터로 경합을 먼저 배제한 뒤, 코어 추가나 M4 Pro·2 TB 업그레이드를 검토합니다.