Visual Studio App Center는 빌드·배포·디스트리뷰션을 한 화면에 묶어 준 레거시 허브였습니다. 서비스가 단계적으로 종료되면서 팀은 「짧은 주기로 여러 브랜치를 동시에 돌리던 관성」을 그대로 새 스택으로 옮겨야 하고, 특히 iOS는 Apple Silicon과 코드 서명 규칙 때문에 Linux 에이전트만으로는 끝나지 않습니다. Microsoft Learn 기준으로 핵심 기능은 2025년 3월 31일 이후 로그인·API 접근이 중단되는 방향으로 정리되었고, Analytics·Diagnostics 등 일부 영역은 별도 연장 일정이 공지된 바 있어 전송 계층과 관측 계층을 분리해 로드맵을 세우는 편이 안전합니다.
2026년까지 남은 「마이그레이션 창구」를 어떻게 읽을까
실무에서 「창구」는 단순히 공식 일정표가 아니라 팀의 리스크 버짓입니다. 저장소 정리·OAuth 재발급·내부 패키지 레지스트리 방화벽·스토어 업로드 자격 증명까지 한 번에 움직이면 장애 표면이 넓어집니다. 우선 App Center가 대신 하던 작업을 빌드, 아티팩트 저장, 테스트 오케스트레이션, 배포 알림 네 갈래로 쪼갠 뒤, 각 갈래마다 책임자와 롤백 스위치를 하나씩만 두세요. Analytics 연장이 있다 하더라도 빌드 파이프라인은 더 이상 같은 엔드포인트에 의존할 수 없으므로, PR 단위 빌드의 트리거·큐잉·재시도 정책을 새 CI에 먼저 이식하는 것이 비용 대비 효과가 큽니다.
단주기 빌드: 관리형 macOS CI vs 일 단위 클라우드 Mac 자체 호스팅 Runner
관리형 CI는 동시 실행 상한·큐·미리 깔린 Xcode 조합까지 플랫폼이 대신 관리해 줍니다. 반면 일 단위로 임차하는 클라우드 Mac 위에 Runner를 올리면 디스크 캐시 정책·방화벽 egress·내부 Git 미러를 팀 규칙 그대로 적용할 수 있습니다. 단주기 팀에게 결정적인 차이는 대기열 SLO와 비공개 의존성 페치 지연입니다. 호스팅 큐가 길면 컴파일 자체는 빨라도 리드 타임이 깨지고, 전용 노드는 고정 비용 대신 대기 분산을 삽니다. 유사한 트레이드오프를 CircleCI 중심으로 풀어본 글이 있습니다: 2026년 단주기 iOS 빌드 대안: CircleCI 클라우드 macOS 실행기 vs 일 단위 자체 호스팅 클라우드 Mac Runner——비공개 의존성·동시 실행 상한·대기열 SLO 의사결정 매트릭스 FAQ.
| 관점 | 관리형 macOS CI | 일 단위 클라우드 Mac + 셀프 호스팅 Runner |
|---|---|---|
| 대기열·버스트 | 공유 풀·동시 실행 요금제에 좌우 | 전용 코어·로컬 DerivedData로 꼬리 지연 완화 |
| 규제·egress | 허용 IP·아티팩트 보존 정책을 플랫폼에 맞춤 | VPC·프록시·내부 레지스트리와 동일 구성 재현 |
| 운영 부담 | 이미지 업그레이드는 간단, 커스텀은 제한 | Xcode·Ruby·JDK 버전 핀닝은 직접 책임 |
| 비용 곡선 | 분·동시 슬롯 단위로 예측 가능 | 유휴 시간 최소화 설계가 관건 |
비공개 의존성: 레지스트리·토큰·미러링 의사결정
NPM 사설 스코프, Maven Nexus, Swift 패키지 레지스트리, 내부 CocoaPods 스펙 저장소처럼 「인터넷에 없는 모듈」은 Runner 네트워크 경로를 바꾸는 순간 깨집니다. 관리형 CI에서는 세분화된 OIDC·vault 통합을 쓰고, 자체 호스팅에서는 ~/.netrc·환경 변수 대신 단기 토큰과 읽기 전용 미러를 선호합니다.
| 신호 | 권장 패턴 | 피해야 할 것 |
|---|---|---|
| 다중 레지스트리 혼합 | 단일 egress 프록시 뒤에서 도메인 화이트리스트 | Runner 홈 디렉터리에 장기 평문 비밀번호 |
| 대용량 바이너리 의존성 | 지역 캐시 또는 아티팩트 스토어 프리페치 | 매 빌드 전체 재다운로드 |
| Git 서브모듈·LFS | 미러 클론과 얕은 서브모듈 전략 분리 | DNS만 보고 컴파일 지연으로 오판 |
코드 서명 주입 FAQ: 키체인·match·CI 변수
iOS에서 App Center가 해 주던 서명 단계를 어디로 옮기나요?
대개 Xcode 빌드 단계 전에 인증서와 프로비저닝 프로파일을 임시 키체인에 넣고, 빌드 후 파기합니다. 팀 정책이 허용한다면 Fastlane match나 내부 PKCS#12 저장소와 KMS를 조합하고, 그렇지 않으라면 최소 권한 전용 키만 Runner 볼트에 탑재하세요.
Android는 서명이 더 단순해 보이는데 왜 같은 매트릭스가 필요할까요?
플레이 앱 서명을 켠 상태에서는 업로드 키 회전과 구형 APK 서명 스킴 혼재가 빌드 행렬을 복잡하게 만듭니다. `.jks` 파일을 저장소에 두지 말고, CI 비밀과 분리된 KMS 연동을 문서화하세요.
관리형과 자체 호스팅 중 어디가 서명 사고 면적이 더 작나요?
관리형은 표준 템플릿으로 빠르지만 플랫폼 장애 시 대안 Runner가 제한됩니다. 자체 호스팅은 격리 VM마다 키체인을 초기화할 수 있어 반복 재현성은 높지만 운영 실수 면적도 넓습니다. 어느 쪽이든 동일 해시의 성공 빌드 로그를 남기는지가 감사 포인트입니다.
병행 운영 체크리스트와 Xcode Cloud 분 한도 시그널
App Center에서 Xcode Cloud·GitHub Actions·GitLab Runner로 갈라지는 팀은 종종 「관리형 분 패키지 한도」와 「전용 Mac 한 대」 사이에서 요동칩니다. Archive·공증·TestFlight까지 한 노선으로 묶을지, 호스팅 큐에 남길지 판단할 때는 분 단위 포화 신호를 별도 KPI로 두는 것이 좋습니다. 관련 신호와 롤백 매트릭스는 다음 글에서도 같은 프레임으로 다룹니다: 2026 Xcode Cloud 분 패키지·동시 실행 한도 포화 이후: 일 단위 클라우드 Mac이 Archive·공증·TestFlight을 받을 전환 신호, 경로 계획과 롤백 의사결정 매트릭스 FAQ.
- 산출물 동일성 — 해시·dSYM·Proguard 매핑까지 동일 규칙으로 업로드
- Webhook 지연 — 큐 깊이와 별도로 이벤트 재전송 창을 모니터링
- 비상 릴리스 — 한 실행기만 남긴 채 인증서 만료 대응 연습
클라우드 Mac mini에서 마이그레이션 검증이 더 빨라지는 이유
App Center 이후 파이프라인은 결국 「동일한 Xcode·동일한 서명 주입 스크립트」를 반복 검증하는 게임입니다. 클라우드 Mac mini(M4)는 Apple Silicon 통합 메모리로 링커·Swift 컴파일 병렬성을 살리면서도 유휴 전력이 매우 낮아 단발성 마이그레이션 부팅과 장시간 큐 모니터링을 같은 노드에서 처리하기 좋습니다. macOS 네이티브 툴체인과 Gatekeeper·SIP 덕분에 서명 키가 섞이는 면적도 줄일 수 있습니다.
Docker·SSH·Homebrew까지 한 OS 안에서 정리되므로 Runner 스크립트를 옮길 때 「리눅스 에이전트 + 원격 Mac」 이중 호핑을 줄일 수 있고, 무팬 저소음 폼팩터는 사무실 없이도 재현 환경을 길게 띄워 두기에 적합합니다.
관리형 큐와 자체 호스팅을 병행 검증할 안정적인 Apple Silicon 노드가 필요하다면, VPSSpark 클라우드 Mac mini M4는 단계적 전환 비용을 낮추는 현실적인 출발점입니다——지금 플랜을 확인하고 서명·비공개 의존성 리허설을 같은 환경에서 끝내 보세요.