Mac mini 빌드 호스트는 스케줄 가능한 노드이지 애완 서버가 아닙니다—그런데 오케스트레이터를 드레인하지 않고 재부팅하면 Slack은 여전히 빨간색으로 물듭니다. 이 2026 플레이북은 신규 작업을 멈추고, 진행 중 잡을 안전하게 마치고, 대체 용량으로 라벨을 넘기며, 개발자가 플랫폼 팀을 신뢰하도록 일정을 소통하는 방법을 정의합니다. GitHub Actions 스타일 셀프호스티드 플릿과 다른 macOS 대기열에도 옮길 수 있는 비교 표 두 개, 수치 드레인 임계값, 순서가 있는 아홉 단계를 제공합니다.
러너가 아직 등록되지 않았다면 Mac mini M4 셀프호스티드 GitHub Actions부터 시작하세요. 유지보수가 더 큰 이미지 승격 뒤에 이어진다면 호스트를 승격 도중에 드레인하지 않도록 캐너리·블루그린 컷오버 이후에 순서를 맞추세요. 창 동안 대기가 치솟으면 “느린 패치”를 탓하기 전에 대기열 깊이·대기 시간 SLO로 지표를 해석하세요.
팀이 공식 드레인을 건너뛸 때의 실패 모드
- 강제 종료된 컴파일 잡:
xcodebuild도중 재부팅은 벽시계 15~40분을 날리고 수 주간 개발자 신뢰를 망칩니다. - 고아 워크스페이스 잠금: 급작스러운 종료는 오래된
.lock파일이나 시뮬레이터 프로세스를 남겨 다음 수십 개 잡을 실패시킵니다. - 시크릿 순환의 깜짝 상황: 유지보수에는 키체인·API 키 갱신이 흔합니다. 실행 중 잡은 깔끔히 끝날 때까지 예전 자격 증명을 붙잡을 수 있습니다.
인수인계 전략 매트릭스
| 접근 | 추가 용량 | 사용자 가시 위험 |
|---|---|---|
| 라벨 드레인 + 웜 스탠바이 | 1:1 대체 풀 | 스탠바이가 미리 웜이면 낮음 |
| 시간 제한 드레인만 | 없음 | 중간—대기열이 길어짐 |
| 강제 중지·재부팅 | 없음 | 높음—실패 잡 |
계속 기다릴지 강제 완료할지
| 관찰 | 임계값 | 조치 |
|---|---|---|
| 가장 오래 실행 중인 잡 나이 | < 50분 | 대기—정상적인 긴 테스트일 가능성 |
| 가장 오래 실행 중인 잡 나이 | > 95분 | 소유자 호출; 취소 후 신규 호스트에서 재시도 검토 |
| 대기열 깊이 대 SLO | p95 대기 +25% | 오버플로 라벨 또는 임시 클라우드 Mac 임대 활성화 |
| 보안 패치 심각도 | CVSS ≥ 9 | 경영진 승인 취소 창 |
라벨의 진실: 드레인은 호스트를 유입 셀렉터에서 빼는 것이지 바이너리를 삭제하는 것이 아닙니다. 유지보수가 밀리면 몇 분 만에 다시 켤 수 있도록 서비스는 설치된 채 두세요.
아홉 단계 유지보수 인수인계 체크리스트
- 변경 티켓 열기: 호스트명, 유지보수 유형, 예상 소요, 롤백 담당을 적습니다.
- 일찍 공지: 업무 시간 작업은 최소 24시간 전, 다지역 드레인은 72시간 전에 개발자 채널에 게시합니다.
- 스탠바이 용량 확인: 대체 러너가 오케스트레이터 UI에서
Idle인지 확인합니다. - 드레인 대상을 기본 라벨에서 제거: 신규 잡 스케줄을 멈추고 실행 중 잡은 끝나게 둡니다.
- 실행 개수 감시: 5분마다 새로고침하고 이상 징후를 기록합니다.
- 개수가 0이 되면: 러너 서비스를 정상 종료하고 마지막 로그를 남깁니다.
- 유지보수 수행: OS 패치, 디스크 정리, Xcode 설치—CMDB용 메모를 남깁니다.
- 재가동 전 스모크 테스트: 컴파일·서명·업로드를 건드리는 고정 워크플로를 실행합니다.
- 트래픽이 낮을 때 라벨 재부착: 티켓을 닫기 전 60분간 p95 대기를 모니터링합니다.
사람을 정직하게 만드는 자동화 훅
수동 드레인 체크리스트는 당직 엔지니어가 신입이거나 피곤할 때 실패합니다. API로 오케스트레이터 라벨을 토글하고 변경 티켓을 열며 미리 쓴 Slack 공지를 올리는 잡으로 해피 패스를 코드화하면 분산이 줄어듭니다. kill -9 경로 앞에는 사람 게이트를 두세요—running_jobs > 0인데 비상 사고 ID 없이 호스트를 재부팅하는 자동화는 없어야 합니다. 이렇게 연결한 팀은 누구도 Mac용 kubectl 단계를 기억에서 다시 치지 않아도 되어 유지보수 중앙값이 18~30% 줄어듭니다.
- 드레인 시작 웹훅: 호스트명과 예상 종료 시각을 메트릭 스택으로 보냅니다.
- 실행 잡이 20분 동안 변하지 않으면 알림: 긴 컴파일이 아니라 멈춘 실행기를 뜻합니다.
- 유지보수 모드 자동 만료: 라벨이 4시간 넘게 분리된 채 종료 없이 남으면 호출—누군가 마지막 플립을 잊었습니다.
자동화를 “실행되는 문서”로 다루세요. 모든 분기는 구조화된 JSON을 남겨 사후 분석에서 SSH 발굴 없이 타임라인을 재생할 수 있게 합니다. 임시 오버플로 Mac을 빌릴 때 CMDB에 자동화가 기대하는 라벨 접두사와 같이 태그하세요—임시 호스트명이 중복 러너를 풀에 두 번 붙여 대기열 절반을 가져가는 흔한 원인입니다.
지역 스탠바이와 버스트 임대
Mac 풀이 한 도시에만 있으면 드레인은 필연적으로 대기열 사건이 됩니다. 홍콩, 일본, 한국, 싱가포르, 미국에 Mac mini M4 스탠바이 노드를 두면 노트북을 배송하지 않고도 유지보수를 흡수할 수 있습니다. NodeMac 지역별 요금은 이런 겹치는 창을 위한 단기 임대를 지원합니다. 패치 후 대화형 검증이 필요하면 SSH/VNC 도움말과 함께 쓰세요.
티켓을 줄이는 커뮤니케이션 템플릿 조각
복붙 규율이 중요합니다. 매번 네 가지를 넣으세요: 영향 라벨, UTC·현지 시작·종료 창, 실시간 대기열 깊이를 보는 곳, 공지 창을 넘긴 잡이 붙었을 때 엔지니어가 할 일. “붙은 잡” 안내를 빼면 첫 시간에 중복 IT 티켓이 3배 늘어납니다—한 번 재면 그 줄은 다시 안 빠집니다.
큰 드레인 뒤 15분 회고를 하세요: 실제 다운타임이 추정을 넘었는지, 팀이 하드코딩된 러너 이름으로 라벨을 우회했는지, 오버플로 용량이 실제로 트래픽을 받았는지. 답을 다음 유지보수 RFC에 넣어 분기마다 처음부터가 아니라 누적되게 하세요. 티켓에 오케스트레이터 “실행 중 잡” 그래프 스크린샷을 하나 넣어 이후 검토자가 기억이 아닌 증거를 보게 하세요.
자주 묻는 질문
릴리스 동결 주에도 드레인해야 하나요?
꾸미기용 패치는 미루는 편이 낫습니다. 보안이 강제하면 호스트를 미리 더 두고 드레인 창을 짧게 하세요. 절차 자체를 건너뛰지는 마세요.
유지보수가 변경 창을 넘기면?
먼저 스탠바이 라벨 라우팅을 연장하고, 새 ETA가 담긴 “아직 안전 아님” 업데이트를 보냅니다. 임원이 CI가 건강하다고 가정하는 동안 대기열을 조용히 굶기는 것보다 이전 이미지로 롤백하는 편이 싸게 먹힙니다.
Mac mini M4 하드웨어는 드레인 계산을 예측 가능하게 합니다. Apple Silicon은 혼합 컴파일·시뮬레이터 부하에서 전력을 안정적으로 쓰고, 통합 메모리는 긴 드레인 동안 스왑 관련 멈춤을 줄이며, 물리적 격리는 스탠바이 호스트가 노트북 열 스로틀 중간 대기열이 아닌 프로덕션처럼 동작하게 합니다. NodeMac은 홍콩·일본·한국·싱가포르·미국에서 SSH와 VNC로 전용 Mac mini를 제공해 스탠바이 풀이 공유 VM이 아닌 실제 데이터센터 노드가 되게 합니다. 버스트 용량 임대는 유지보수 시즌을 컷오버·감사 옆에 일정할 수 있는 운영비 항목으로 바꿉니다.