2026 소규모 팀 공유 원격 Mac: Nomad식 경량 큐 vs cron 팬아웃 — 지연·선점 격리·빌드 충돌 검수
공유 원격 Mac에 cron만 늘리면 빌드·캐시가 겹칩니다. Nomad식은 동시성·재시작을 선언하지만 Mac은 보통 실행기로 두고 스케줄러는 VM에 둡니다. 본문은 협업·운영용 경계·표·설정·검수·FAQ입니다.
시나리오 경계
cron 팬아웃은 단일 운영 계정·짧은 멱등 잡·flock+벽시계 상한·분 단위 지터 수용이 전제입니다. 다중 스쿼드·우선순위가 생기면 곧 한계입니다.
Nomad식은 레인별 동시성 상한과 선언적 재스케줄이 필요할 때 맞습니다. 노드를 늘린 뒤 큐 정합은 다중 노드 배포·태스크 큐 동기화와 함께 보세요.
같은 가변 경로에 문서화된 락 없이 쓰면 큐+락 영역입니다. 예약·선점은 큐·자리잠금 FAQ를 참고하세요.
큐 모델 비교 표
열은 온콜이 읽을 운영 계약입니다.
| 차원 | cron 팬아웃+래퍼 | Nomad식 경량 큐 |
|---|---|---|
| 첫 실행 지연 | 주기 상한(흔히 60초); 주기 축소 시 떼 지르기. | 큐 기반 픽업; 워머 시 p50 1분 이내 흔함. |
| 동시성 | flock·외부 카운터 드리프트. | 그룹·count 등 한곳에 상한. |
| 선점·격리 | 기본 없음. | 재스케줄·우선·감사 로그. |
| 가시성 | 로그 산재. | 중앙 이력·라벨. |
| 운영 부담 | 도입 가볍·확장 시 드리프트. | 초기 비용↑·장기 예측 가능. |
설정 스니펫
cron 한 레인 예:
*/1 * * * * buildlane /usr/bin/flock -n /var/run/meshmac/build.lane.lock \
timeout 45m /usr/local/bin/run-ci-dequeue.sh >>/var/log/meshmac/dequeue.log 2>&1
dequeue 상단에서 대기열 >20이면 exit 77로 알림. 락 패턴은 flock FAQ.
Nomad 주기 배치(제어 평면 예시):
job "meshmac-mac-build" {
type = "batch"
periodic { cron = "*/2 * * * *"; prohibit_overlap = true }
group "lane" {
count = 1
task "dequeue" {
driver = "exec"
config { command = "/usr/local/bin/run-ci-dequeue.sh" }
resources { cpu = 500; memory = 512 }
restart { attempts = 3; interval = "30m"; delay = "30s"; mode = "delay" }
}
}
}
권한과 락
macOS가 권한을 강제합니다. 비대화형은 buildlane 계정·키체인 분리. LaunchDaemon은 sudo -u buildlane.
- 락: 캐시·시뮬 슬롯별
.lock. - 메타:
job_id·commitJSON. - kill:
trap으로 아카이브·락 정리.
빌드 충돌 검수 체크리스트
- ☐ 동일 경로에서 드라이런 두 개가 쓰기 겹침 없음(또는 flock 구간 120초 이내).
- ☐ CI와 수동 스크립트가 같은 dequeue 진입점만 사용 — 숨은 cron 없음.
- ☐ 락 대기 p95가 15분을 넘기면 알람.
- ☐ 실행 중 잡 강제 종료 후 stale flock 없음(PID 검증·런북).
- ☐ 야간 아카이브 다섯 회 연속 후에도 여유 디스크 15% 이상.
타임아웃·백오프 파라미터
실측 p95로 조정. 기준값: 45m/90m, flock -w 180, 대기 20, 백오프 30·60·120초+지터.
| 파라미터 | cron+셸 기준선 | Nomad식 기준선 |
|---|---|---|
| 잡 벽시계 | timeout 45m / 90m |
kill_timeout 동일; Xcode 30초 기본 금지. |
| 락 대기 | flock -w 180. |
워커에 대기; 재시도 delay ≥30s. |
| 재시도 백오프 | 지수+지터; 예 sleep $((30+RANDOM%30)). |
reschedule·max_delay 5m. |
운영 런북 5단계
- 가변 경로·락·TTL 문서화.
- 큐 깊이 상한·거절 코드·길이 메트릭.
- cron 단일 사용자 또는 Nomad
prohibit_overlap. - SIGKILL 후
trap청소 스모크. - 커밋→시작 p95 추적, 기준 2배 시 노드 분리 검토.
FAQ
Mac에 꼭 Nomad 바이너리를 깔아야 하나요?
아니요. 제어 평면은 리눅스에 둬도 됩니다. 핵심은 선언적 겹침·재시작 계약입니다.
cron이 더 단순한데 큐가 터지는 이유는?
깊이 한도 없으면 숨은 백로그; 주기 축소는 락 경합만 키웁니다.
선점 규칙은 어디에 두나요?
잡은 스케줄러, 사람·VNC는 런북에 명시하세요.
한 줄 정리
cron은 락·타임아웃·깊이가 코드처럼 지켜질 때만 통하고, Nomad식은 동시성·감사가 필요할 때 유리합니다. macOS 권한·flock은 공통입니다.