DevOps 및 감사 2026년 4월 14일

2026 결정 매트릭스: Mac mini M4 CI Runner의 Git Worktree 대 클린 클론

NodeMac Team

빌드 인프라 편집자

체크아웃 전략은 모든 macOS 파이프라인 뒤의 조용한 배수다: 같은 Mac mini M4도 git worktree로는 «충분히 빠름»처럼 느껴질 수 있고, DerivedData가 작업 사이에 새면 «수수께끼처럼 불안정»해진다. 2026년에는 명시적인 worktree 대 클린 클론 정책을 공개하는 팀이 대기 시간 감사 리스크를 줄인다. 이 가이드는 두 매트릭스, 수치 디스크 예산, 여덟 단계 롤아웃, 내부 런북에 붙일 FAQ 구조화 데이터를 제공한다.

본 정책을 디스크·아티팩트 보존, 용량 엔벨로프, Runner 어피니티 규칙과 짝지으세요. 홍콩·일본·한국·싱가포르·미국에 추가 전용 호스트가 필요하면 가격에서 시작하고 SSH/VNC 접근 패턴은 도움말을 열어두세요.

체크아웃 모드가 Git 잡학이 아니라 스케줄링 문제인 이유

셀프호스티드 macOS Runner는 기본적으로 상태가 있다: 전역 캐시, 사용자 수준 키체인 항목, Xcode 기본 DerivedData 위치는 격리하지 않으면 작업을 넘어 살아남는다. 작업마다 클린 클론은 Git 객체를 격리하지만 컴파일러를 자동 격리하지는 않는다. Worktree는 단일 객체 DB를 공유한다—빠르지만—정리 스크립트 실수를 증폭한다. 체크아웃 모드를 비밀과 서명 신원 옆의 폭발 반경 이야기의 일부로 다루세요.

  • Worktree는 많은 브랜치가 같은 리비전 스트림을 빌드할 때 git fetch 바이트를 최소화한다.
  • 클린 클론은 체크아웃 후 훅이 트리 밖 도구를 변경하는 저장소에서 격리를 최대화한다.
  • 규모에서는 하이브리드(따뜻한 베어 미러 + 일시 worktree)가 흔하지만 엄격한 경로 규약이 필요하다.

결정 매트릭스 A: worktree, 클린 클론, 하이브리드 선택

저장소 신호 권장 모드 주의
모노레포, 높은 변경률, 공유 Xcode 버전 하이브리드(베어 미러 + worktree) worktree마다 -derivedDataPath로 DerivedData 고정 필수
소형 앱, 의존성 적음, 재현성 필요 작업마다 클린 클론 LFS 대역폭 주시; 호스트에서 체크섬 검증으로 blob 캐시
하드웨어 결합 신원의 릴리스 서명 전용 호스트 + 클린 클론 신뢰할 수 없는 포크와 worktree 베이스를 공유하지 말 것
외부 기여자의 포크 PR 빌드 고유 경로의 일시 클론 신뢰 경계를 가로지르는 공유 베어 미러 비활성화

결정 매트릭스 B: 캐시 배치 대 누출 리스크

체크아웃 모드는 Git 객체가 어디 사는지를 고르고, 캐시 배치는 다음 작업에 무엇이 살아남는지를 고른다. 둘을 맞추지 않으면 «클린 클론인데도 전역 경로로 컴파일러 상태가 새는» 상황이 생긴다.

캐시 M4 Runner 안전 기본값 누출 증상
Swift Package Manager 작업별로 워크스페이스 임시 아래 SourcePackages lockfile 해시 없이 전역 캐시를 재사용하면 PR 간 버전 기울기
CocoaPods / Bundler 클론 내부 vendor 또는 콘텐츠 주소 tarball 캐시 네이티브 확장이 잘못된 아키텍처 플래그를 집어감
Xcode DerivedData 항상 작업 ID로 경로 범위 다른 브랜치의 부분 인덱스 후 UI 테스트 불안정

실행 가능한 디스크 예산(출발점)

  1. 베어 미러 상한:512 GB 호스트에서 모노레포 미러를 120 GB 아래로 유지; 수동 삭제 대신 감사된 스크립트로 가지치기.
  2. 병렬 worktree:IO 메트릭이 지속 읽기 처리량에 여유를 보이지 않으면 호스트당 최대 4개.
  3. 클린 클론 스크래치:git clone --depth 1와 LFS 피크에 최대 작업 트리의 예약.
  4. 알람:CI 볼륨 여유가 15% 아래로 5분 넘게 떨어지면 페이지.

감사 메모:각 Runner 그룹이 속한 신뢰 등급을 문서화하세요. 포크 PR을 한 번이라도 체크아웃한 worktree 베이스는 문서화된 지우기 없이 나중에 서명 릴리스 아티팩트를 빌드하면 안 됩니다.

여덟 단계 롤아웃

  1. 저장소 분류: 신뢰 내부, 파트너, 공개 포크 등급으로.
  2. 측정: 각 등급에서 두 모드의 p95 체크아웃+컴파일 시간을 한 스프린트 동안.
  3. 경로 규약 구현: 예 /ci/jobs/<id>/tree를 자동화가 독점.
  4. 작업 후 훅 배선: worktree, DerivedData, 작업 ID에 묶인 시뮬레이터 캐시 제거.
  5. 전역 캐시 차단: 콘텐츠 해시 + 신뢰 등급이 키가 아니면.
  6. 메트릭 추가: 체크아웃 초, LFS 메가바이트, 호스트별 디스크 여유율.
  7. 게임 데이: 분기마다 두 번 디스크 풀 시나리오.
  8. 하드웨어 확장: 예산이 위험한 공유를 강요할 때—NodeMac은 리전별 전용 Mac mini M4 노드를 콜로 리드 타임 없이 추가할 수 있습니다.

자주 묻는 질문

공유 Mac mini M4 CI 호스트에서 git worktree는 언제 안전한가?

각 worktree 경로가 작업별로 격리되고, 훅이 통제되며, 서브모듈이 고정되고, 정리가 worktree와 공존 캐시를 모두 제거할 때. 베어 저장소를 대화형 개발 세션과 공유하지 마세요.

클린 클론이 무작위로 실패하는 이유는?

보통 전역 캐시, LFS 네트워크, 출력을 건드리는 스캐너. 캐시를 작업별로 범위를 좁히고 실패를 네트워크 그래프와 상관시키세요.

병렬 worktree에 추가 디스크는 얼마나?

동시 worktree마다 작업 트리와 공유 객체 저장소를, Xcode 프로젝트면 작업별 DerivedData도 예산하세요.

예측 가능한 CI를 위한 전용 Mac mini M4

신뢰 등급별로 호스트를 분리하고, 자동화는 SSH, 두 체크아웃을 시각 비교해야 할 때는 VNC.

NM
NodeMac Cloud Mac
5분 배포

클라우드 전용 Apple Silicon Mac. SSH/VNC 즉시 접속, HK·JP·SG·US 노드.

시작하기