2026 원격 Mac CI에서 rsync 전송 면 축소: `--files-from`, 계층형 매니페스트, sparse-checkout
원격 Mac 에 Xcode 빌드를 올린 팀이 가장 자주 맞닥뜨리는 함정은 디스크 부족이 아니라 전체 워크스페이스를 rsync 대상으로 삼는 습관입니다. 수만 개의 작은 파일과 캐시가 한 뿌리에 있으면 국경을 넘는 RTT 환경에서 메타데이터 나열이 지배적이 되어 실제로 필요한 수백 메가바이트보다 listing 이 시간을 빼앗습니다. 2026 현실적인 패턴은 경로·해시·크기가 적힌 매니페스트를 계약으로 고정하고 --files-from 으로 허용 목록만 전송한 뒤 staging 에서 검증하고 current 포인터를 바꾸는 흐름입니다.
목차
1. 무분별 동기화가 만드는 세 가지 손실
첫째는 열거 비용입니다. DerivedData 나 SwiftPM 캐시가 산출물과 같은 루트에 있으면 rsync 가 모두 순회합니다. 스캔만으로 수 분이 걸리고 증분 이점이 상쇄됩니다.
둘째는 오전송 위험입니다. 환경 파일이나 상세 로그가 공용 SFTP 영역에 섞이면 최소 권한과 감사 요구를 동시에 깨뜨립니다.
셋째는 릴리스 일관성입니다. 타임스탬프만으로는 부분 실패를 알 수 없습니다. 매니페스트가 있으면 전송 전 기대 상태가 고정됩니다.
- 스캔 폭발: 무관 파일이 늘수록 CPU 와 RTT 가 낭비됩니다.
- 대역 낭비: 바뀌지 않은 에셋 묶음까지 반복 전송될 수 있습니다.
- 운영 충돌: 병렬 잡이 단일 업로드 루트를 공유하면 덮어쓰기 경쟁이 잦아집니다.
2. 아카이브 동기화와 매니페스트 동기화 비교
원격 Mac 이 SSH/rsync 또는 SFTP 형태 업로드를 제공하고 QA 가 releases 트리에서 가져온다는 가정입니다.
| 기준 | 재귀 아카이브 | 매니페스트 + files-from | tarball + 해시 |
|---|---|---|---|
| 경로 통제 | 낮음 | 높음 | 높지만 압축 해제 필요 |
| 스캔 부하 | 폭에 비례 | 매니페스트 길이를 따름 | 단일 파일 전송이 가벼움 |
| 감사 | 별도 도구 필요 | 매니페스트가 증거 | 사이드카 요약 |
| 적합 사례 | 소형 정적 사이트 | iOS/macOS 산출물 | 거대 크리에이티브 번들 |
3. 재현 가능한 일곱 단계
계층 출력 → 매니페스트 → files-from → dry-run → staging 동기화 → 해시 대조 → current 전환 순으로 고정합니다.
rsync -avh --files-from=manifest.txt --checksum --partial \
-e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=4" \
./build/ ci@remote-mac:/srv/releases/staging/build-123/
- 아키텍처·채널별 디렉터리를 분리합니다.
- CSV 또는 JSON Lines 로 sha256 과 크기를 기록하고 실패 시 최대 파일을 출력합니다.
.env와 서명 작업 디렉터리를 명시적으로 제외합니다.- 템플릿 변경 후 첫 주는 반드시
-n을 통과시킵니다. --delete는 staging 잎에만 적용하고 공유 캐시는 읽기 전용으로 마운트합니다.- ServerAlive 와 필요 시
--bwlimit로 대역 공정성을 유지합니다. - 원격 샘플 검사가 매니페스트와 일치하면 컷오버합니다.
4. sparse-checkout 으로 워크스페이스 선제 축소
거대 모노레포에서는 가져올 경로를 줄이는 것만으로 중간 산출물 혼입 확률이 내려갑니다. checkout 후 git sparse-checkout list 를 로그에 남기고 Xcode workspace 참조가 빠지지 않았는지 확인합니다. sparse-checkout 은 매니페스트 대체재가 아니라 길이를 줄이는 전처리입니다.
5. 지표와 롤백 기준
항목 수·매니페스트 총 바이트·rsync 실제 전송 바이트를 매 빌드 기록합니다. 항목이 수만에서 수백으로 줄면 국경 구간에서도 listing 이 분 단위에서 수십 초대로 내려가는 경우가 많습니다. 롤백은 이전 매니페스트 포인터로 되돌릴 수 있는지 검증합니다.
병렬 잡에는 서로 다른 staging 접두사와 job id 를 넣고 의존 캐시는 별 볼륨에 격리합니다.
6. FAQ
Q: 숨김 파일은? A: 생성기에서 명시하고 dry-run 건수로 검증합니다.
Q: GUI SFTP 공존? A: 권위 디렉터리를 하나로 하거나 수동용 서브트리를 분리합니다.
Q: xattr? A: 대상 FS 가 지원하면 -E 를 검토하고 샘플 서명을 확인합니다.
7. 매니지드 원격 Mac 을 고르는 시점
매니페스트 우선 전략은 대역을 의미 있는 바이트에 집중시키지만 안정적인 상행·예측 가능한 IO·상시 가동이라는 전제는 동일합니다.
가정용 회선이나 단일 공유 계정에서는 스크립트가 완벽해도 운영이 자주 무너집니다. 디렉터리 격리와 백본 연결이 있는 SFTPMAC 원격 Mac 은 업로드 계약을 인프라처럼 유지하기 쉽습니다.