"2026 GitHub CI/CD가 깨진다"를 보여주는 네 가지 숫자
불안을 정량화하는 것이 출발점입니다. 커밋 양: COO Kyle Daigle와 CTO Vlad Fedorov는 4월에 "AI 에이전트가 매주 GitHub로 약 2.75억 커밋을 푸시하며 연간 140억 커밋에 도달할 전망"이라고 밝혔습니다. 2025년 전체 10억 커밋의 14배 규모입니다. 요청 양: AI 에이전트가 생성한 PR은 2025년 9월 월 400만 건에서 2026년 3월 1,700만 건으로 4배 늘었습니다. 컴퓨트: GitHub Actions 주간 사용 시간은 2023년 5억 분에서 2026년 4월 단일 주 21억 분으로 폭증했습니다. 안정성: 2월 한 달 동안 37건의 플랫폼 사고가 발생했고, 4월 9–13일 에이전트 세션 대기 시간이 평소 15–40초에서 54분까지 늘었으며 실패율은 최대 97.5%까지 치솟았습니다. 5월 6일 Copilot Cloud Agents 장애 동안 Actions Runner 전체 실패율은 약 17.1%로 기록됐습니다.
GitHub 측도 이를 인정했습니다. Fedorov는 용량 계획을 10x에서 30x로 다시 그렸고, 성능 민감 경로를 Ruby에서 Go로 옮기고, Git와 Actions 서비스를 분리했으며, Stacked PRs를 출시해 대형 에이전트 제출을 검토 가능한 단위로 쪼개고, 메인테이너가 PR을 비활성화할 수 있는 옵션을 검토 중입니다. 그러나 공급 측 확장은 단기 처방이 아니므로, 2026년 하반기 동안 큐 꼬리 지연과 산발적 실패는 iOS 파이프라인의 기본값이 됩니다. "이번 파도만 지나가면 괜찮아질 것"이라는 기대는 더 이상 유효하지 않습니다.
주 275M 커밋: AI 에이전트 쓰기 부하가 2025년 전체의 14배입니다. 한 PR이 Actions, 머지 가능성 체크, 웹훅, 캐시에 동시에 전파돼 부하가 가중됩니다.
월 17M 에이전트 PR: 4월 23일 단일 머지 큐 사고는 658개 저장소와 2,092개 PR을 동시에 묶었습니다.
주 21억 Actions 분: AI 자동화가 컴퓨트와 Runner 풀을 기하급수적으로 소진하며, macOS 풀이 받는 압력은 Linux보다 훨씬 큽니다.
17.1% 실패율 사건: 5월 6일은 Runner 할당 서브시스템이 burst를 따라가지 못한 중앙집중형 CI 임계점의 전형적 사례입니다.
30x 용량 목표: 10x 계획이 4개월 만에 부족해진 점에서, 혼잡은 2027년 신규 데이터센터 가동까지 구조적으로 지속됩니다.
2월 37건 사고: SLA 사고 모델을 "드물게 발생"에서 "이틀에 한 번씩 무언가 터진다"로 갱신하십시오.
네 가지 숫자가 함께 가리키는 결론은 분명합니다. 파이프라인의 안정성을 단일 중앙 Runner 풀에 묶어두는 비용이 AI 에이전트 시대에 재가격되고 있습니다. 다음 두 절에서는 macOS와 "인간 대 에이전트" 두 축으로 좁혀 살펴봅니다.
호스팅 macOS Runner가 먼저 무너지는 이유: 풀 규모와 단가, retry 폭풍의 중첩
GitHub 호스팅 Linux Runner는 대규모 범용 x86_64 풀 위에서 동작해 용량 베이스가 크고 스케줄링 자유도가 높습니다. macOS Runner는 Apple Silicon 물리 머신 공급과 소프트웨어 라이선스 제약으로 풀 규모가 Linux 대비 훨씬 작고, 분당 단가는 약 10배입니다. AI 에이전트 참여가 미미했던 2024–2025년에는 큐 인식과 retry로 변동을 흡수할 수 있었습니다. AI 에이전트 시대에는 같은 저장소에서 야간 리팩터 하나가 수 시간 안에 수십 개의 PR을 만들어 내고, 각 PR이 lint, unit, integration, archive, notary 워크플로를 차례로 트리거합니다. macOS Runner 활용도 ρ는 손쉽게 1에 근접하고, 큐잉 이론상 평균 대기 시간은 ρ가 1에 도달하기 한참 전에 폭발합니다. P50은 초에서 분으로, P95는 10분대 후반까지 늘어납니다.
더 까다로운 문제는 retry 폭풍과 콜드 스타트의 중첩입니다. 자주 흔들리는 테스트가 한 번 실패하면 에이전트가 자동 재시도로 다시 Runner를 요청하고, 여러 에이전트가 "요청–실패–재요청" 루프에 동시에 들어가면서 Runner 할당 서비스에 thundering herd를 형성합니다. 호스팅 macOS Runner의 콜드 스타트는 60–120초로, lint와 PR 체크 같은 짧은 작업에는 오버헤드가 막대하고, archive, TestFlight 업로드, notary 같은 긴 작업에는 큐에서 십수 분을 기다린 뒤에야 실행이 시작돼 타임아웃을 끌어올립니다. 아래 비교표는 AI 에이전트 부하 아래에서 Linux, 호스팅 macOS, 그리고 KVMNODE 전용 셀프 호스트 macOS의 차이를 정리한 것으로, RFC와 조달 문서에 그대로 붙여 쓸 수 있습니다.
| 항목 | GitHub 호스팅 Linux | GitHub 호스팅 macOS | 전용 셀프 호스트 macOS (KVMNODE) |
|---|---|---|---|
| 풀 규모 | 대규모, 다중 지역 | 소규모, Apple 공급 제약 | 주문 단위로 전용 확보 |
| 분당 단가 | 낮음(약 $0.008/min) | Linux 대비 약 10배 | 일/주/월 정액. 부하 클수록 유리 |
| 에이전트 부하 시 큐 꼬리 | 분 단위 변동 | 5–10분 이상 진동이 일상 | 자가 Runner, 업무 일정으로 통제 |
| 콜드 스타트 | 10–30초 | 60–120초 | 상주 Runner, 초 미만 |
| 자격 증명 격리 단위 | 워크플로 단위 | 워크플로 단위 | 계정, 키체인, 프로파일까지 |
| 아카이브/notary 영향 | 적음 | 큼(긴 작업이 큐를 증폭) | 전용 노드에서 시간 윈도 고정 |
2026년 macOS Runner의 문제는 "느리다"가 아니라 "언제부터 느려질지 알 수 없다"입니다.
이미 GitHub Actions 셀프 호스트 Runner 가이드에 따라 조직 수준 Runner와 동시성 그룹 분리를 완료한 팀이라면, 다음 단계는 "AI 에이전트 PR과 인간 PR의 Runner를 레이블로 분리하는 것"입니다. 아직 완전 호스팅 상태라면 §4의 이전 임계값과 결정 트리를 확인하십시오.
AI 시대 CI/CD 보안의 새 축: Mini Shai-Hulud, Megalodon, 그리고 "PR 리뷰"의 한계
2026년 5월, CI/CD와 AI 도구 체인을 노린 두 건의 공급망 공격이 "자동화 커밋은 감사 면제"라는 암묵적 전제를 완전히 깼습니다. Mini Shai-Hulud는 npm 웜으로, GitHub Actions OIDC 토큰을 탈취해 정상 SLSA/Sigstore provenance를 위조하고, 피해자 환경에서 장기 잠복하기 위해 ~/.claude/settings.json, .vscode/tasks.json 같은 AI 에디터와 에이전트가 신뢰하는 설정 파일에 악성 후크를 작성했습니다. Linux 환경에서는 gh-token-monitor.service를 함께 설치해 개발자가 GitHub 토큰을 교체하면 홈 디렉터리를 파괴하는 트립와이어를 심었습니다. Megalodon은 더 직접적입니다. 5월 18일 11:36–17:48 UTC 단 6시간 동안 build-bot, auto-ci, ci-bot, pipeline-bot 같은 위조 아이디로 5,561개 저장소에 5,718건의 악성 커밋을 푸시하고 GitHub Actions 워크플로를 교체해 OIDC 토큰, SSH 키, Docker 자격, 클라우드 비밀을 216.126.225.129:8443으로 유출시켰습니다. 두 공격의 공통점은 커밋 메시지와 author 필드가 평소 CI 자동 관리와 거의 같아 보인다는 점, 그리고 의도적으로 저신호 구간을 노린다는 점입니다.
iOS/macOS 팀에 대한 함의는 분명합니다. Match keychain, App Store Connect API Key, notary 자격, profile, provisioning이 모두 macOS Runner와 keychain에 집중돼 있으며, 이는 곧 OIDC 토큰과 워크플로 주입 공격이 가장 노리는 자산입니다. "PR을 리뷰어가 본다"는 방어선은 AI 에이전트 트래픽 앞에서 사실상 작동하지 않습니다. 리뷰어가 주당 수백 개의 에이전트 PR을 마주하면 주의력이 분산되고, 정상 에이전트도 워크플로 파일(actions 버전 업, cache key 조정)을 자주 수정하므로 시각적으로 정상과 악성을 구분하기 어렵습니다. 아래 여섯 개의 정책은 방어선을 파이프라인 자체로 내리기 위한 최소 집합으로, 플랫폼 엔지니어링 분기 로드맵에 그대로 적용하시기 바랍니다.
워크플로 deny-by-default: 저장소 기본을 permissions: {}로 설정하고 잡 단위에서 최소 OIDC scope만 명시합니다. pull_request_target은 비활성화하거나 필수 리뷰를 요구합니다.
AI 에이전트 author 검증: 모든 에이전트 커밋에 GPG/SSH 서명과 SSO 도메인 내 author email을 요구하고, CI에서 익명 author의 macOS 아카이브와 notary 트리거를 거부합니다.
자격 증명 샌드박스: macOS Runner 키체인, App Store Connect Key, Match 비밀 키를 에이전트 Runner와 완전히 분리합니다. fork PR의 서명 트리거를 금지합니다.
OIDC scope와 PAT 수명: PAT를 fine-grained와 단명 TTL로 통일하고, OIDC subject를 repo:org/repo:environment:prod로 좁히며 광범위한 workflow_dispatch를 회수합니다.
워크플로 감사 베이스라인: .github/workflows/*.yml을 보호 파일로 다루고, 에이전트 변경은 보호 브랜치와 2인 리뷰를 거치게 합니다. 개발자 단말의 ~/.claude/settings.json, .vscode/tasks.json은 EDR 감시 대상에 포함합니다.
아웃바운드 최소화: 셀프 호스트 macOS Runner에서 GitHub, Apple, 모델 API만 outbound 허용 목록에 두고, 미상 IP로의 TCP 8443/443을 차단해 Megalodon식 C2 경로를 봉쇄합니다.
각 정책 자체는 새로운 것이 아닙니다. 새로운 것은 AI 에이전트 시대에 이 모든 항목이 "실행하지 않으면 사고를 떠안는다"는 의무 항목으로 격상됐다는 점입니다. 100% 호스팅 Runner에서는 기본 정책의 깊이가 제한되지만, 전용 셀프 호스트 노드에서는 위 여섯 항목 전체를 macOS 키체인, launchd, pf 방화벽, Actions Runner 레이블 레이어에서 실제로 구현할 수 있습니다.
호스팅 Runner 이탈 결정 트리와 KVMNODE 6개 지역 × M4/M4 Pro 선정
모든 프로젝트가 즉시 GitHub 호스팅 macOS Runner를 떠나야 하는 것은 아닙니다. 다음 네 가지 정량 임계값으로 평가하십시오. ① 월간 macOS Runner 청구액이 동등한 전용 Mac Mini 월 구독을 넘는가, ② P95 큐 대기가 평일 피크에 10분을 넘겨 머지 흐름을 가로막는가, ③ 자격 증명 집중도가 여전히 여러 워크플로가 단일 키체인과 넓은 OIDC scope를 공유하는 수준인가, ④ AI 에이전트 PR 비율이 저장소 전체의 30%를 넘었는가. 두 항목 이상 해당되면 다음 분기 기술 로드맵에 전용 셀프 호스트 macOS Runner를 포함하시기 바랍니다. 아래 결정 트리는 그대로 계획 문서에 복사해 사용하시면 됩니다.
임계값 평가: 청구액, P95 대기, 자격 증명 집중도, 에이전트 PR 비율을 점수화해 2개 이상 해당되면 이전 절차로 진입합니다.
지역 선정: Git 저장소와 아티팩트 스토어 주요 지역에 맞춰 싱가포르/일본/한국/홍콩/미국 동부/미국 서부 중 KVMNODE 노드를 선택해 clone과 cache 꼬리 지연을 줄입니다.
1주 파일럿: M4 16GB·256 또는 24GB·512를 야간 spike Runner와 주간 PR Runner로 동시에 운영하며 같은 PR 세트의 P50/P95를 호스팅과 비교합니다.
이중 Runner 큐: 같은 전용 노드에 actions-runner 인스턴스를 두 개 등록하고 self-hosted, macos, human, self-hosted, macos, agent 레이블로 PR author 종류에 따라 라우팅합니다.
자격 증명 샌드박스: 에이전트 Runner는 별도 macOS 계정과 별도 키체인을 사용하고, 서명/notary/TestFlight 업로드는 human 레이블 Runner와 environment의 수동 승인만 통과시킵니다.
업그레이드 트리거: 야간에 xcodebuild 3개 이상 병렬, 시뮬레이터 매트릭스, 에이전트 회귀 테스트가 동시간대에 겹치면 M4 Pro 64GB·2TB로 승급하거나 두 번째 노드를 병렬 추가합니다.
name: ios-ci
on: [pull_request]
permissions: {}
jobs:
lint-and-unit:
runs-on: [self-hosted, macos, agent]
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- run: ./scripts/lint.sh
- run: ./scripts/test-unit.sh
archive-and-notary:
if: github.event.pull_request.user.type != 'Bot'
runs-on: [self-hosted, macos, human]
permissions:
id-token: write
contents: read
environment: prod-signing
steps:
- uses: actions/checkout@v4
- run: ./scripts/archive.sh
- run: ./scripts/notarize.sh
위 최소 골격은 세 가지 정책을 20여 줄 안에 담고 있습니다. 최상위 permissions: {}로 deny-by-default, 레이블로 lint/unit과 archive/notary 분리, 그리고 if: github.event.pull_request.user.type != 'Bot'으로 에이전트 PR의 프로덕션 서명을 차단합니다. 호스팅 Runner에서도 표면적으로 적용 가능하지만, 전용 노드에서만 macOS 키체인, launchd, pf 아웃바운드 화이트리스트와 실제로 연동됩니다. 다중 좌석 SSH 거버넌스의 좌석과 큐 명명 규약과 결합하면 "인간 + AI 에이전트 + 다중 개발자"가 같은 전용 노드를 공유하는 완전한 Runbook이 완성됩니다.
사이징은 다음을 따르십시오. PR 검증 중심에 인간 개발자가 소수, AI 에이전트 PR이 간헐적인 중규모 iOS 저장소는 M4 16GB·256 또는 24GB·512, 월간 베이스라인과 피크 일 spike 조합이면 충분합니다. 시뮬레이터 매트릭스, 야간 에이전트 회귀, 같은 노드의 OpenClaw Gateway가 함께 도는 혼합 부하는 처음부터 M4 Pro 64GB·2TB를 선택하십시오. 다국가 팀이라면 6개 지역 선정과 임차 조건의 RTT와 동일 지역 원칙에 따라 Git 주요 지역에 정렬하고, 예산이 허용되면 다른 지역에 두 번째 노드를 페일오버로 배치해 단일 지역 장애에 대비하십시오.
조달 문서에 옮길 세 가지 기준과 대안 비교
앞 네 절을 조달 문서와 플랫폼 엔지니어링 분기 계획에 그대로 반영할 수 있는 세 가지 강제 기준으로 압축합니다. ① AI 에이전트 Runner는 전용 레이블과 전용 키체인/계정으로 인간 개발자 Runner와 분리합니다. ② OIDC scope와 PAT는 단명 TTL, 최소 권한, 자동 회전을 의무화하고, 프로덕션 서명 잡은 environment 보호로 개발 잡과 물리적으로 분리합니다. ③ AI 에이전트 커밋은 verified author를 필수로 하고, 모든 .github/workflows/*.yml 변경은 보호 브랜치와 2인 리뷰, 필수 lint를 거치게 합니다. 어느 한 항목만 빠뜨려도 다음 Mini Shai-Hulud/Megalodon급 공격에 노출될 확률이 기하급수적으로 커집니다.
4월 9–13일 에이전트 세션: 대기 54분, 실패율 최대 97.5%. 릴리스 윈도를 평일에 고정한 팀에는 이중화 경로가 필수입니다.
5월 18일 Megalodon: 6시간에 5,561개 저장소에 워크플로가 주입됐습니다. 자격 증명 샌드박스와 deny-by-default만이 확장 가능한 차단면입니다.
macOS Runner 콜드 스타트 60–120초: 아카이브/notary 장기 작업과 겹치면 체감은 "PR이 30분 동안 멈춰 있다"가 됩니다. 상주 전용 Runner가 직접적인 해답입니다.
유의 사항: 호스팅을 벗어나면 macOS 업데이트 주기, Xcode 버전, 커맨드라인 도구, 서명 프로파일의 유지 관리를 직접 책임지셔야 합니다. 주간 업데이트 윈도를 고정하고, Xcode 베타 릴리스 노트를 기준으로 ABI 변경을 추적하며, OpenClaw 진단 사다리의 스크립트 골격을 Runner 헬스 프로브로 재활용하시기 바랍니다.
대안도 함께 비교해야 합니다. 100% GitHub 호스팅을 유지하면 청구액과 큐 꼬리가 에이전트 트래픽에 따라 선형 또는 지수적으로 늘고, 자격 증명 샌드박스가 워크플로 단위로 제한되며, Megalodon급 공격 시 플랫폼 공지를 기다려야 합니다. 닫혀 있는 Mac mini나 사물 개조 머신으로 Runner를 운영하면 물리 안정성이 낮고 launchd와 원격 관리 도구가 부족해 연휴 네트워크 단절에서 출하가 멈춥니다. 일반 클라우드 VM(Apple 하드웨어가 아닌 환경)에서 macOS를 실행하는 것은 Apple 라이선스 위반이며 성능 저하도 큽니다. iOS/macOS CI/CD와 AI 에이전트 자동화가 공존해야 하는 프로덕션에서는 KVMNODE Mac Mini 클라우드 임대가 일반적으로 더 나은 답입니다. 전용 Apple Silicon, 7×24 가동, 6개 지역 선택, 일/주/월 탄력 계약 위에 이중 큐, 자격 증명 샌드박스, OIDC 강화를 같은 변경 티켓에서 처리할 수 있습니다. 가격은 가격 페이지, 운영 가이드는 고객 센터, 노드 주문은 주문 페이지에서 확인하시기 바랍니다.