EAS Build 고급 파이프라인
EAS Build 프로파일, 캐시, EAS 환경, 모노레포 설정을 조합해 Expo 엔터프라이즈 빌드 파이프라인을 안정화하는 방법입니다.
핵심 요약
- EAS CLI 19.1.0/SDK 56 기준 Node 22.13.x·Xcode 26.4 기본 이미지를
eas.json의node필드로 고정합니다. - 빌드 프로파일은 development/preview/production으로 나누고 production에
autoIncrement와EAS_GRADLE_CACHE=1을 켭니다. - 환경 변수 visibility는 plain text(공개
EXPO_PUBLIC_*)/sensitive/secret(signing·service account)로 구분해 운영합니다. - 프로덕션 게이트는
npx expo-doctor,npx expo install --check,eas build --profile production을 통과해야 합니다. - Release candidate는 같은
runtimeVersion으로 preview에서 OTA 검증 후 production으로 승격합니다.
EAS CLI 19.1.0 기준 변경사항
| 변경 | 프로덕션 영향 |
|---|---|
| Node 22.13.x 기준 | SDK 56 프로젝트의 CI·EAS Workflows 런타임을 Node 22 계열로 고정 |
| Xcode 26.4 기본 이미지 | SDK 56 iOS build profile에서 image 미지정 시 Xcode 26.4 사용 |
| xcodebuild·Gradle step timing | 빌드 병목을 dashboard에서 단계별로 추적 |
| 프리빌트 Expo Modules | iOS SDK 56+에서 기본 활성화, clean build 단축 |
| 프리빌트 커뮤니티 아티팩트 | react-native-reanimated, react-native-screens 등 주요 라이브러리 빌드 시간 감소 |
| Gradle cache | EAS_GRADLE_CACHE=1로 Android task output cache 사용 |
| EAS Environment variables | Build·Update·Workflows·Hosting에서 환경별 값을 중앙 관리 |
빌드 프로파일 전략
// eas.json
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"env": { "APP_VARIANT": "development" }
},
"preview": {
"distribution": "internal",
"env": { "APP_VARIANT": "preview" }
},
"production": {
"autoIncrement": true,
"node": "22.13.0",
"env": {
"APP_VARIANT": "production",
"EAS_GRADLE_CACHE": "1"
}
}
}
}환경 변수 운영
EAS 환경 변수는 development, preview, production을 기본 환경으로 제공합니다. Enterprise·Production
플랜이라면 custom environment도 쓸 수 있습니다.
eas env:create --name EXPO_PUBLIC_API_URL --value https://api.example.com --environment production --visibility plaintext
eas env:pull --environment production
eas build --profile production| visibility | 사용 위치 | 운영 규칙 |
|---|---|---|
| plain text | EXPO_PUBLIC_*, 공개 API base URL | 클라이언트 번들에 들어가도 되는 값만 |
| sensitive | build config resolution에 필요한 비밀성 낮은 값 | 로그 노출을 줄이되 앱에 포함될 수 있음을 전제 |
| secret | signing, service account, private key | local eval이나 app config에서 읽히지 않는 작업 전용 값 |
모노레포 빌드 최적화
eas.json의node필드와 루트 package manager 버전을 SDK 56 기준으로 고정- workspace lockfile이 캐시 key의 중심이 되도록 lockfile 변경을 PR에서 명시
- custom build를 쓰는 경우
eas/restore_build_cache와eas/save_build_cachestep을 명시 - iOS에서 prebuilt module을 끌 이유가 없으면
EXPO_USE_PRECOMPILED_MODULES를 건드리지 않음 - native module을 직접 수정하는 패키지만
package.json의expo.autolinking.*.buildFromSource로 선택 opt-out
Build gate
프로덕션 profile은 아래 검증을 통과해야 합니다.
npx expo-doctor
npx expo install --check
eas build --profile production --platform all --non-interactiveRelease candidate는 preview profile로 먼저 빌드하고, runtimeVersion이 같은 OTA 후보를
검증한 뒤 production profile로 올립니다.
빌드 캐시 절감 시간
EAS Build 캐시 전략의 ROI를 숫자로 계산합니다.