2026 소규모 팀 공유 원격 Mac: 빌드 산출물 rsync·NFS 캐시 결정 매트릭스
공유 원격 Mac 풀에서 iOS·macOS 빌드 산출물을 안전히 배포하려면 rsync 직접 전송·증분 동기화·NFS 마운트 캐시 중 무엇을 택할지가 갈립니다. 본문은 동시 빌드·권한 격리·충돌 회피를 전제로 비교표·결정 매트릭스·실행 단계·FAQ를 압축합니다. 홈과 블로그 목록에서 인접 주제를 이어 읽을 수 있습니다.
산출물 경로에서 자주 터지는 지점
- 보이지 않는 레이스: 두 잡이 동시에
latest/나 공용 export에 쓰면 반쓰기 파일·POSIX ACL이 뒤섞입니다. - 권한 드리프트: 개인 계정 umask
077과 서비스 계정022가 섞이면 같은 볼륨의 다운스트림 읽기가 깨집니다. - 네트워크 착시: NFS는 로컬 같다가 락 경합·attr 캐시·지터에서 깨지고, rsync는 체크섬 비용을 무시하면 느리게 느껴집니다.
① 대상·핵심 키워드
대상: SSH·CI가 섞인 공유 빌드기를 운영하는 소규모 팀 기술 리더. Mac 메시 다중 노드 협업 글과 맞물리는 운영 결정을 다룹니다.
핵심 키워드: 공유 원격 Mac, rsync, NFS, 빌드 산출물, 권한 격리, 동시 빌드, 스테이징.
② rsync 직접·증분 동기화·NFS 마운트 캐시
점대점 승격에는 rsync 직접(SSH 또는 데몬)이 명시적 삭제·검증에 강하고, 증분은 타임스탬프·크기 또는 --checksum으로 대역폭을 아낍니다. NFS는 동일 웜 레이어를 여러 Mac이 읽을 때 캐시 적중과 운영 단순성이 장점입니다. Git worktree·락파일 매트릭스와 병행하면 소스 트리와 산출물 경로를 동시에 분리합니다.
| 방식 | 잘 맞는 신호 | 주의 |
|---|---|---|
| rsync 직접 | 릴리스 승격·에어갭·감사 로그가 필요 | 동시 쓰기 목적지·--inplace 남용 금지 |
| 증분 동기화 | 대용량 아티팩트 반복 전송·WAN 비용 절감 | 클럭 드리프트 시 타임스탬프만 믿지 말 것 |
| NFS 캐시 | 다수 빌더가 동일 캐시·레이어 읽기 | 락·attr 캐시·필러 SLO에 의존 |
③ 결정 매트릭스
| 신호 | 참이면 선택 | 실행 힌트 |
|---|---|---|
| 소비자가 한 필러만 봄 | NFS 읽기 전용 마운트+캐시 워밍 | 필러 지연·가용성 SLO를 먼저 고정 |
| 릴리스마다 검증 필요 | rsync+체크섬·버전 접두사 게시 | 스테이징 완료 후 원자적 rename |
| 다중 망·방화벽 홉 | SSH 위 rsync 단일 채널 | Jump Host·인증서 로테이션과 정렬 |
| 큐·쿼터 이슈 | 풀 정책 문서화 | 공유 풀 FAQ의 대기·쿼터 기준 참고 |
④ 동시성: 디렉터리 락·umask·SSH 인증서 역할
- 디렉터리 락: 잡 시작 시
flock또는 전용 스테이징 하위 경로/artifacts/staging/<job-id>로 격리 후 게시. - umask: 팀 그룹 공유면
027+볼륨 주 그룹 고정, 공개 읽기 필요 시에만022. - SSH CA 역할:
ci-sync는 읽기 전용 rsync,builder는 잡 범위 쓰기, 관리는 별도 CA·짧은 TTL.
⑤ 충돌 회피 rsync 매개변수
동시 독자가 있을 때 --inplace는 피하고, temp 디렉터리에 완료 후 rename 하세요. 삭제는 --delete-delay처럼 배치 끝에 모으거나 별도 정리 잡으로 분리합니다. 무결성이 중요하면 --checksum을 릴리스 경로에만 켜 비용을 제한합니다.
⑥ FAQ
- 동시 잡이 하나의 rsync 목적지를 공유해도 되나요?
- 아니요. 잡별 스테이징 후 원자적 게시가 기본입니다.
- NFS가 항상 더 빠른가요?
- 웜 캐시·다독기에는 유리하고, 승격·오프라인 검증에는 rsync가 낫습니다.
- umask는 무엇을 기본으로 할까요?
- 027과 그룹 정렬을 권장, 022는 공개 읽기가 정말 필요할 때만.
- SSH 인증서를 어떻게 쪼갤까요?
- ci-sync·builder·관리 CA를 분리하고 강제 명령·ACL로 쓰기 범위를 제한하세요.
⑦ 롤아웃 단계
1
산출물 네임스페이스·스테이징·live 트리를 문서화하고 팀 그룹을 볼륨에 고정합니다.
2
CI에 잡별 하위 경로·락 스크립트를 넣고 게시 전 검증 훅을 둡니다.
3
rsync 프로필을 읽기 전용 승격용·쓰기 배포용 두 벌로 나눕니다.
4
NFS를 쓰면 마운트 옵션·캐시·필러 SLO를 합의하고 실패 시 rsync 폴백을 정의합니다.
5
SSH CA principal·TTL·강제 명령을 배포하고 분기마다 로테이션 드릴을 기록합니다.
인용 가능한 숫자·기준
- 스테이징 상한: 잡당 고유 경로·동시 live 쓰기 금지
- umask 기본: 팀 공유 027, 공개 읽기 예외만 022
- SSH TTL: 운영 합의로 수 시간~1일 이하 권장
- 체크섬 rsync: 릴리스 경로에만 선택 적용해 비용 제어