EAS 배포와 앱 이관: 새 컴퓨터에서 빌드는 왜 쉬울까?
모바일 앱의 운영 환경을 정리하다 보면 Android Keystore, iOS 인증서, Provisioning Profile 같은 낯선 자격 증명을 만나게 된다. 이런 파일을 보고 있으면 새로운 컴퓨터에서 앱을 다시 빌드하는 일이 상당히 복잡할 것처럼 느껴진다.
하지만 Expo Application Services(EAS)가 정상적으로 구성된 프로젝트라면 실제 과정은 생각보다 단순하다. 앱 서명 자격 증명과 빌드 환경을 개발 컴퓨터가 아니라 EAS가 원격으로 관리할 수 있기 때문이다.
다른 컴퓨터에서 배포하는 것은 이관이 아니다
먼저 세 가지 상황을 구분해야 한다.
| 상황 | 난이도 | 필요한 핵심 요소 |
|---|---|---|
| 다른 컴퓨터에서 빌드 | 낮음 | 소스 코드와 Expo 계정 접근 |
| 다른 팀원이 배포 | 낮음 | Expo 조직 멤버 권한 |
| EAS·스토어 소유권 이전 | 높음 | 프로젝트, 서명 키, 스토어 계정 이전 |
컴퓨터만 바뀌는 경우 앱 자체의 소유권은 그대로다. 새 컴퓨터는 기존 EAS 프로젝트에 접속해서 빌드를 요청하는 역할만 한다. 따라서 이를 앱 이관이라고 부를 필요는 없다.
새 컴퓨터에서 EAS 빌드하기
기본 절차는 다음과 같다.
git clone <repository>
cd <project>
npm ci
npm install -g eas-cli@latest
eas login
eas whoami
eas project:info프로젝트가 기존 EAS Project ID와 연결되어 있다면 별도의 eas init도 필요하지 않다. 프로젝트가 정한 Node 버전과 패키지 잠금 파일을 그대로 사용하는 것이 중요하다.
이제 필요한 프로필로 빌드를 요청하면 된다.
# Android 내부 테스트 APK
eas build --platform android --profile preview
# Android 운영 AAB
eas build --platform android --profile production
# iOS 운영 빌드
eas build --platform ios --profile productionEAS 클라우드 빌드에서는 Android Studio나 Xcode를 새 컴퓨터에 설치할 필요가 없다. 운영 서명 자격 증명을 EAS가 원격 관리 중이라면 JKS, P12, Provisioning Profile도 매번 내려받을 필요가 없다.
Expo는 원격 관리 방식과 로컬 자격 증명 방식을 모두 지원하며, 별도 설정이 없으면 원격 자격 증명을 기본으로 사용한다. Expo 로컬 자격 증명 안내
서명 키를 복원하지 않아도 되는 이유
EAS가 관리하는 자격 증명은 개발 컴퓨터가 아니라 EAS 프로젝트에 연결된다.
대표적으로 다음 항목이 있다.
- Android Keystore와 비밀번호
- iOS Distribution Certificate
- iOS Provisioning Profile
- App Store Connect API Key
- 푸시 알림을 구성했다면 FCM·APNs 자격 증명
새 컴퓨터는 Expo 계정으로 로그인한 뒤 EAS에 빌드를 요청한다. 실제 서명은 EAS가 보관 중인 자격 증명을 사용해 수행한다.
그래서 운영 JKS와 P12 백업은 일상적인 빌드를 위한 파일이라기보다, EAS 프로젝트가 삭제되거나 계정을 이전해야 할 때 사용하는 비상 복구 자산에 가깝다. EAS 원격 자격 증명은 필요할 때 eas credentials로 내려받거나 다시 업로드할 수 있다. EAS 자격 증명 동기화
EXPO_TOKEN은 언제 필요한가?
개발 컴퓨터에서는 일반적으로 다음 명령으로 로그인하면 된다.
eas loginEXPO_TOKEN은 GitHub Actions처럼 사람이 로그인할 수 없는 CI 환경에서 주로 사용한다.
EXPO_TOKEN=<token> eas build \
--platform android \
--profile production \
--non-interactive즉 EXPO_TOKEN은 앱 서명 키가 아니라 EAS에 접근하기 위한 자동화용 출입증이다. 토큰을 교체해도 이미 설치된 앱은 영향을 받지 않는다. 다만 CI에 올바른 토큰이 없으면 신규 빌드, EAS Update, 자동 제출이 실패할 수 있다.
스토어 자동 제출은 별도 자격 증명이 필요하다
앱을 빌드하는 것과 앱스토어에 제출하는 것은 서로 다른 단계다.
Android 자동 제출에는 Google Play 접근 권한을 가진 서비스 계정 키가 필요하다. iOS 자동 제출에는 App Store Connect API Key 또는 Apple 계정 인증이 필요하다.
eas build \
--platform android \
--profile production \
--auto-submit따라서 새 컴퓨터에서 AAB나 IPA를 만드는 것은 쉽지만, 스토어 자동 제출까지 수행하려면 제출 자격 증명도 EAS에 등록되어 있거나 안전한 저장소에서 복원할 수 있어야 한다. EAS Submit 안내
EAS Update도 컴퓨터에 종속되지 않는다
JavaScript와 에셋 변경만 배포하는 EAS Update 역시 특정 컴퓨터에 종속되지 않는다.
eas update \
--channel production \
--message "오류 수정" \
--environment production중요한 것은 배포 컴퓨터가 아니라 채널과 Runtime Version이다. 설치된 앱은 자신과 호환되는 Runtime Version의 업데이트만 적용한다.
네이티브 모듈이나 권한처럼 앱 바이너리에 영향을 주는 변경은 새로운 스토어 빌드가 필요하다. 반면 호환되는 JavaScript 변경은 EAS Update로 전달할 수 있다. EAS Update 배포 구조
진짜 앱 이관은 무엇이 다른가?
컴퓨터 교체와 달리 다음 상황은 실제 이관에 해당한다.
- 개인 Expo 계정에서 조직 계정으로 프로젝트 이전
- 개발사 계정에서 고객사 계정으로 소유권 이전
- Google Play 개발자 계정 간 앱 이전
- Apple Developer 팀 간 앱 이전
- 기존 EAS 프로젝트를 폐기하고 새 프로젝트로 재구성
EAS 프로젝트와 Google Play·App Store의 앱 레코드는 서로 독립된 자산이다. EAS 프로젝트를 이전해도 스토어 앱 소유권이 자동으로 이전되는 것은 아니다. Expo 앱 이전 개요
EAS 프로젝트는 Expo 대시보드의 Project settings → General → Transfer project에서 이전할 수 있다. Expo 공식 안내에 따르면 원본과 대상 계정 양쪽에서 Owner 또는 Admin 권한이 필요하며 프로젝트 이전 횟수에도 제한이 있다. 이전 후에는 앱 설정의 소유자와 프로젝트 연결이 새 계정에 맞는지도 확인해야 한다. Expo 계정과 프로젝트 이전
이관을 위해 백업할 항목
Android
credentials.json- Keystore
.jks - Keystore 비밀번호
- Key Alias와 Key 비밀번호
- Google Play 서비스 계정 키
iOS
credentials.json- Distribution Certificate
.p12 - 인증서 비밀번호
- Provisioning Profile
.mobileprovision - App Store Connect API Key
.p8 - Key ID와 Issuer ID
공통
- Expo 프로젝트 소유 계정
- EAS Project ID
EXPO_TOKEN- 빌드 프로필과 Update 채널
- 환경변수 목록
- Apple·Google·Expo 계정의 MFA 및 복구 수단
이 파일들은 소스 저장소에 커밋하면 안 된다. 암호화된 Vault에 파일과 메타데이터를 함께 보관하고 어떤 프로젝트와 앱 식별자에 사용하는 키인지 기록해야 한다.
배포 컴퓨터를 바꿀 때 체크할 것
새 컴퓨터에서는 다음 정도만 확인하면 된다.
- 소스 저장소에 접근할 수 있는가?
- 올바른 Node와 패키지 버전을 사용하고 있는가?
- Expo 조직과 프로젝트에 접근할 수 있는가?
eas project:info가 기존 프로젝트를 가리키는가?- 빌드 프로필과 앱 식별자가 기존 운영 앱과 일치하는가?
- 자동 제출을 한다면 스토어 자격 증명이 준비되어 있는가?
- EAS Update 채널과 Runtime Version이 맞는가?
JKS나 P12부터 무조건 복원할 필요는 없다. EAS 원격 자격 증명이 정상이라면 별도의 로컬 복원 없이 빌드하는 것이 더 안전하다.
듀오랩스가 보는 관점
다른 컴퓨터에서 EAS 앱을 배포하는 과정은 본질적으로 단순하다.
소스 코드 준비
→ Expo 계정 로그인
→ 기존 EAS 프로젝트 확인
→ 빌드 프로필 선택
→ EAS 클라우드 빌드복잡해지는 시점은 컴퓨터가 바뀔 때가 아니라 프로젝트 소유권이나 앱스토어 계정까지 바뀔 때다.
운영 서명 키 백업은 매번 빌드하기 위한 준비물이 아니다. EAS 프로젝트가 사라지거나 앱을 다른 조직으로 이전해야 하는 상황에서도 동일한 앱을 계속 업데이트할 수 있도록 보장하는 복구 수단이다.
이 차이를 이해하면 일상적인 배포 절차는 단순하게 유지하면서도 실제 이관과 장애 상황에는 훨씬 안전하게 대비할 수 있다.
함께 읽기
- Expo EAS 운영 자격 증명, 무엇을 어떻게 백업할까Expo EAS를 사용하면 모바일 앱의 빌드와 스토어 제출을 자동화할 수 있다. 편리한 만큼 운영에 필요한 자격 증명이 여러 곳에 나뉘어 저장되기 때문에, 각각의 역할을 구분하지 않으면 토큰 하나만 보관하고도 백업이 끝났다고 생각하기 쉽다.
- Flutter 앱 배포, `flutter build` 한 줄이면 끝인 줄 알았습니다Flutter 앱의 빌드 명령은 간단합니다. Android는 flutter build appbundle, iOS는 flutter build ipa로 결과물을 만들 수 있습니다. 그러나 팀이 반복해서 사용할 수 있는 배포 체계를 만들려면 그 뒤에 있는 서명, 권한, 스토어 API, 심사와 출시 절차까지 함께 설계해야 합니…
- Expo 앱은 만들었는데 출시가 안 됩니다: `eas build`보다 먼저 준비할 것들Expo를 사용하면 네이티브 빌드 과정이 크게 단순해집니다. 하지만 앱스토어 출시까지 명령어 한두 줄로 끝나는 것은 아닙니다. 실제 자동 배포를 만들려면 앱 등록, 서명 자격 증명, 스토어 API 권한, CI/CD 승인 절차가 먼저 준비되어야 합니다.
- 같은 Expo 앱인데 배포 방식은 달랐습니다: iOS와 Android 심사 제출 비교기앞선 글에서는 이미 TestFlight에 올라간 iOS 빌드를 AI가 App Store 심사까지 제출한 과정을 다뤘습니다.
- 코드는 그대로인데 앱 심사는 제출됐습니다: AI에게 Expo 배포를 맡겨본 기록코드를 한 줄도 수정하지 않았는데 TestFlight에 올라가 있던 앱이 App Review 제출 상태로 바뀌었습니다. 얼핏 보면 AI가 앱을 새로 빌드해서 배포한 것처럼 보이지만, 실제로는 이미 준비된 빌드와 스토어 정보를 확인한 뒤 App Store Connect의 심사 절차를 진행한 것입니다.