결정 매트릭스 2026

2026 소규모 팀 공유 원격 Mac: Nomad식 경량 큐 vs cron 팬아웃 — 지연·선점 격리·빌드 충돌 검수

2026.04.10 Meshmac R&D Team 9분 읽기

공유 원격 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·commit JSON.
  • 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단계

  1. 가변 경로·락·TTL 문서화.
  2. 큐 깊이 상한·거절 코드·길이 메트릭.
  3. cron 단일 사용자 또는 Nomad prohibit_overlap.
  4. SIGKILL 후 trap 청소 스모크.
  5. 커밋→시작 p95 추적, 기준 2배 시 노드 분리 검토.

FAQ

Mac에 꼭 Nomad 바이너리를 깔아야 하나요?

아니요. 제어 평면은 리눅스에 둬도 됩니다. 핵심은 선언적 겹침·재시작 계약입니다.

cron이 더 단순한데 큐가 터지는 이유는?

깊이 한도 없으면 숨은 백로그; 주기 축소는 락 경합만 키웁니다.

선점 규칙은 어디에 두나요?

잡은 스케줄러, 사람·VNC는 런북에 명시하세요.

한 줄 정리

cron은 락·타임아웃·깊이가 코드처럼 지켜질 때만 통하고, Nomad식은 동시성·감사가 필요할 때 유리합니다. macOS 권한·flock은 공통입니다.

경합을 늘리기 전에 노드·공유 빌드 자원을 늘리세요

p95가 기준을 넘기면 다중 노드·공유 빌드 자원을 우선 검토하세요. ·구매·가격·도움말은 로그인 없이, 블로그에서 심화를 이어가세요.