Mac mini M4 임대에서 Xcode를 돌릴 때 잘못된 -jobs, 부트 볼륨 Derived Data, 크로스 리전 RTT로 시간을 잃는 경우가 많습니다. 여기서는 통합 메모리 대비 병렬도, 전용 APFS 외장 SSD, IO·열 한계, 일·한·홍콩·싱·미서부 워커 배치를 표로 정리합니다. 심화는 리전·지연·TCO, 스테이징·디스크는 다운로드 매트릭스, 접속은 SSH·VNC 체크리스트를 보세요.
티켓에서 자주 보는 세 가지 실패 모드:
- 통합 메모리 절벽 — 추가 clang 작업이 링커 RSS를 압축 영역으로 밀어 넣음.
- 부트 볼륨 Derived Data — 인덱스·Swift 중간 산출물이 OS와 IOPS를 다툼.
- IO·열 — 랜덤 쓰기 버스트가 클럭을 떨어뜨리므로 병렬도 상한이 필요함.
① 컴파일 병렬화와 메모리 피크
xcodebuild의 -jobs N은 목표치가 아니라 상한으로 두세요. 출발점은 성능 코어 수이고, Swift 인덱싱·테스트 러너 여유를 빼면 됩니다. 아래 표는 출발 가이드이며, 가장 무거운 스킴으로 실측해 보정해야 합니다.
| 호스트 프로필 | 시작 -jobs | RAM 피크 신호 | 조정 시점 |
|---|---|---|---|
| M4 16GB, 단일 스킴 CI | 4–6 | 10분 내 메모리 압박 노란색 | jobs 2 감소 또는 컴파일 중 병렬 테스트 묶음 비활성화. |
| M4 16GB, ObjC·Swift 혼합 대형 | 3–4 | 링커 상주 집합이 12–14GB 부근으로 급증 | 링크 직렬화·타깃 분할; 24GB 티어 권장. |
| M4 24GB, 모듈형 앱 | 6–8 | 압박이 지속적으로 녹색 | 외장 Derived Data로 부트 볼륨 사용률 70% 미만일 때만 증가. |
| M4 24GB, 템플릿 많은 모노레포 | 5–7 | 유니티 빌드 구간에서 가끔 노란색 | 빌드 설정에서 Swift 동시 프론트엔드 작업이 노출되면 별도 상한. |
앵커: Derived Data 볼륨 APFS 여유 ~15% 이상, 메모리 압박이 수 분 노란색이면 -jobs 상향 중단.
② Derived Data 외장 경로와 권한
NVMe 외장(USB4·TB급)에 Derived Data 전용 APFS 볼륨. 레포가 대소문자 구분을 가정할 때만 외장도 동일하게—아니면 모듈맵 충돌·재빌드 루프.
런북 파라미터: 암호화 여부, SSD당 단일 볼륨, CI 시 스냅샷 끄기 검토. 시스템·Xcode는 내장, 외장은 중간 산출물 위주.
export DERIVED_DATA_PATH=/Volumes/XcodeDerived/DD
xcodebuild -derivedDataPath "$DERIVED_DATA_PATH" -jobs 6 …
권한: CI 사용자 소유, chmod 777 금지. 공유 호스트는 브랜치별 하위 폴더.
- 1분 순차 쓰기 프로브로 인클로저를 검증합니다.
- APFS 볼륨을 만들고 대소문자 정책을 위키에 기록합니다.
- 부팅 시 또는 오케스트레이터로 매번 동일 경로에 마운트합니다.
- 에이전트 환경에 DERIVED_DATA_PATH(또는 Xcode 사용자 설정)를 export합니다.
- 이전 후 한 번 클린, 낮은 -jobs로 재빌드한 뒤 점진적으로 올립니다.
③ IO 쿼터와 온도(스로틀) 임계
디스크 지연 백분위 확대·CPU 클럭 진동이면 IO·열 병목입니다. 표는 자동화 트립와이어용입니다.
| 신호 | 임계 | 완화 |
|---|---|---|
| 외장 볼륨 큐 깊이 | 3–5분 이상 지속 포화 | -jobs 1 감소; 링커 무거운 타깃 시간 분산. |
| 내장 SSD 사용률 | 컴파일 중 대략 70% busy 초과 | 중간 산출물을 더 외장으로; 빌드 중 타임머신 일시 중지. |
| CPU 패키지 온도 추세 | 클럭 하락과 함께 급격한 진동 | 20분간 병렬도 하향; 렉 사진에서 흡기 통풍 확인. |
| 캐시까지 네트워크 페치 | 높은 RTT·작은 TCP 윈도 | 러너를 아티팩트 리전에 배치—아래 리전 절 참고. |
④ 일본·한국·홍콩·싱가포르 vs 미서부 노드 선택
Git·캐시·공증 출구가 쓰는 리전에 워커를 맞추세요. RTT는 본토 팀 기준 시사치—VPN에서 재측정 필수.
| 러너 리전 | 도쿄 오브젝트 스토어 대표 RTT | 미서부 코드 호스트 대표 RTT |
|---|---|---|
| 도쿄 | 1–5 ms(동일 메트로) | 110–150 ms |
| 서울 | 25–40 ms | 130–170 ms |
| 홍콩 | 35–55 ms | 140–180 ms |
| 싱가포르 | 65–90 ms | 160–200 ms |
| 미서부 | 120–160 ms | 1–8 ms(동일 메트로) |
비용: 짧은 스파이크는 일 임대, 월 8–10일 이상 연속 가동이면 월 약정이 단가 완화되는 경우가 많습니다. SKU는 야간 링크 등 최악 부하 기준. 단가는 가격·TCO 글.
⑤ 실패·재시도 FAQ
137 / 링커 killed: OOM—-jobs↓, 시뮬레이터 부담↓ 또는 24GB.
간헐 I/O error: 케이블·재마운트·여유 공간→스킴 폴더 정리→-jobs 1 1회 후 병렬 복구.
로컬 서명 OK·임대만 실패: 키체인·security·비대화형 인증서 확인.
LFS·SPM 타임아웃: 블롭 리전 불일치—in-region 미러 또는 표 기준 근접 노드.
정리
요약: -jobs 보수·외장 APFS Derived Data·IO·열 임계. 리전은 소스·캐시에 맞추고 피크는 일, 상시 부하는 월을 검토하세요.