Expo Application Services(EAS)는 Mac 미니 랙을 직접 들이지 않고도 iOS 산출물을 예측 가능하게 만들려는 React Native 팀의 기본 온램프입니다. 2026년 단주기 릴리스 트레인——이틀·삼일 심사 창, 병렬 피처 브랜치, 핫픽스 레인——에서는 호스팅 iOS 빌더 대기열이 곧 일정표가 됩니다. TypeScript가 아니라 macOS 용량을 기다리는 셈이죠. 대기 깊이가 튀면 eas build --local이 탈출구인데, Expo 서명 흐름 안에 자격 증명을 두면서 컴파일만 제어 가능한 하드웨어——스프린트 동안 SSH로 붙는 일 단위 클라우드 Mac Runner——로 옮길 수 있습니다.
호스팅 대기열이 단주기를 해치는 이유, 로컬이 바꾸는 것
호스팅 EAS iOS 빌드는 이미지 유지보수와 Apple 실리콘을 수많은 고객에 분산한다는 점에서 매력적입니다. 대신 동시성과 공정성이 트레이드오프입니다. 동시에 여러 릴리스 후보와 야간 프리뷰가 돌면 우선순위나 추가 동시성을 사지 않는 한 타 테넌트 뒤로 밀릴 수 있습니다. 로컬 실행은 벽시계 리스크를 오후에 예약할 수 있는 머신으로 옮깁니다. 산출물 메타데이터는 여전히 EAS에 올리지만 Xcode는 Runner에서 돕니다. Linux 에이전트가 린트·단위 테스트를 맡는 구조와 잘 맞고, 플릿 형태 논의는 2026년 단주기 iOS 빌드 대안: CircleCI 클라우드 macOS 실행기 vs 일 단위 자체 호스팅 클라우드 Mac Runner——비공개 의존성·동시 실행 상한·대기열 SLO 의사결정 매트릭스 FAQ와 같은 맥락입니다.
eas build --local 전체 실행 횟수로 클라우드 Mac을 산정하세요.
이미지에 비밀을 구워 넣지 않고 자격 증명 주입하기
Runner 이미지는 처분 가능하게 유지하고, 세션 시작 시 비밀을 주입하세요. 최소 권한의 EXPO_TOKEN(CI 역할, 개인 계정 아님), EAS 자격 증명으로 관리하는 Apple 배포 자격(eas credentials), 써드파티 키는 오케스트레이터 비밀 저장소——GitHub Encrypted Secrets, GitLab 마스킹 변수, Vault——에서 잡 셸 수명 동안만 export합니다. .p12를 커밋하지 말고, CLI가 준비하는 일시 키체인에 EAS가 서명 자산을 내려받게 두세요. 베어 RN과 Expo config plugin이 섞인 저장소는 로컬 셸이 개발자 .env를 실수로 CI에 합치지 않도록 EXPO_NO_DOTENV 동작을 명시하세요. 계약자 이탈 시 토큰 순환은 단주기에서 더 잦아집니다. 자동화·다중 잡 충돌 매트릭스는 2026년 단주기 iOS 서명 자동화: 일 단위 클라우드 Mac Runner·Fastlane Match·암호화 Git, 읽기 전용 HTTPS, 다중 Job 인증서 충돌 매트릭스에서 더 깊게 다룹니다.
# 클라우드 Mac에서 체크아웃 직후 CI export EXPO_TOKEN="<비밀 관리자에서>" export CI=1 pnpm install --frozen-lockfile eas build --platform ios --profile production --local --non-interactive
SSH 임대는 키만 쓰고, SSD 워크스페이스를 빠르게, 스쿼드가 한 대를 공유할 때는 macOS 사용자·키체인을 분리해 Fastlane과 EAS 캐시가 섞이지 않게 하세요.
캐시 키: 지문이 움직일 때 같이 깨져야 할 것
EAS 로컬 빌드도 여전히 고전 Xcode 작업입니다. rsync한 DerivedData, CocoaPods tarball, CDN 미러 등 원격 캐시에는 네이티브 변경과 함께 움직이는 검증 튜플이 필요합니다: Expo SDK, expo prebuild 해시, Xcode 메이저·마이너, Node LTS 계열, JS 잠금 파일 digest입니다. 지문을 빼면 CI는 통과해도 헤더가 따뜻한 탓에 오래된 네이티브 바이너리가 나갈 수 있고, pod install이 EAS 캐시 밖에서 돌면 Ruby/CocoaPods 버전도 넣으세요. 모노레포 캐시는 앱 슬러그별 네임스페이스를 권장합니다.
expo install만 올리고 네이티브 프로젝트를 다시 만들지 않으면 Podfile.lock과 JS 잠금 파일이 엇갈릴 수 있습니다. JS 테스트가 초록이어도 네이티브 모듈 버전을 올릴 때는 캐시 무효화 이벤트로 취급하세요.
의사결정 매트릭스: EAS 분 패키지 vs 주 단위 클라우드 Mac 임대
아래 표는 재무 가드레일입니다——Apple 심사 마감이 바뀌면 셀을 바꿔도 됩니다.
| 스프린트 패턴 | 호스팅 EAS에 기대기 | 클라우드 Mac에 --local 추가 |
주 단위 Mac 임대가 유리할 때 |
|---|---|---|---|
| iOS 빌드 주 1–2회, 대부분 JS | 작은 분 패키지 | 드물게 필요 | 과소비 위험 |
| 병렬 RC + 야간 프리뷰 | 동시성 + 분 구매 | RC 레인용 일 단위 Mac | Mac 사용일 > 주 4일 |
| 네이티브 모듈 스파이크(지도·영상) | 대기열 폭발 | Xcode 고정·캐시 예열 | 콜드 리빌드 > 3야간 |
| 엔터프라이즈 서명 감사 | 메타데이터는 여전히 적합 | 벤더별 격리 키체인 | 비상 하드웨어별 저렴 |
Expo 네이티브 단계는 Xcode가 프로덕션과 맞는 곳에서
eas build --local의 정직함은 그 아래 호스트에 달려 있습니다. 클라우드 Mac mini M4는 Expo 호스팅 빌더가 겨냥하는 Apple 실리콘 메모리 대역폭에 가깝게 맞춰 Hermes·Swift 컴파일·에셋 패키징이 스왑과 싸우지 않게 합니다. macOS는 React Native가 기대하는 툴체인을 그대로 제공하고(WSL 번역 없음), Gatekeeper·SIP·FileVault는 장기 CI 토큰 위생을 Windows 점프박스보다 낫게 만듭니다.
유휴 전력 약 4W는 스프린트 사이에 프리페치 데몬과 증분 캐시를 따뜻하게 두어도 팬 소음 없이 유지하기 좋습니다. 재활용 PC 대비 통합 GPU와 Neural Engine은 에셋 카탈로그 썸네일·PM이 실제로 보는 온디바이스 스모크 클립 가속에도 도움이 됩니다.
EAS 대기열에서 벗어나면서도 Expo 서명 인체공학을 버리지 않으려면, VPSSpark 클라우드 Mac mini M4가 로컬 레인에 적합한 선택입니다——지금 바로 플랜 확인하고 지문·캐시·자격 증명을 릴리스 매니저가 신뢰하는 금속 위에 맞추세요.