EAS Update OTA 배포 전략
SDK 56 Hermes bytecode diff 기본값, 채널·브랜치 매핑, republish·embedded rollback, fingerprint runtimeVersion, 1·10·50·100% rollout gate로 엔터프라이즈 OTA를 운영하는 방법.
핵심 요약
- SDK 56부터 EAS Update는 Hermes bytecode diff가 기본값이라 전체 번들 대신 binary patch만 내려받아 OTA 크기를 줄이며, 문제 분석 때만
enableBsdiffPatchSupport: false로 opt-out합니다. - production·staging·preview 채널을 각각 동일 이름 브랜치에 매핑하고,
--environment로 환경 변수 집합을 분리해 production·preview API URL이 번들에 섞이지 않게 합니다. - 롤백은 직전 update가 정상이면 republish, OTA 전체를 스토어 내장 번들로 되돌릴 때는 embedded update rollback 두 가지로 나뉩니다.
- runtimeVersion은 fingerprint 정책으로 native에 영향을 주는 변경을 감지해 incompatible update를 막되, build 빈도가 늘 수 있으니 release train·build cache를 함께 설계합니다.
- rollout은 1%(dogfood)→10%(TTI P95 악화 10% 미만)→50%(티켓·백엔드 정상)→100%(release note·rollback point 확정) 게이트로 단계 승격합니다.
Hermes 바이트코드 디핑 기본값
SDK 56에서는 expo-updates와 EAS Update의 Hermes bytecode diffing이 기본값입니다. 클라이언트는
매번 전체 번들을 받지 않고 이전 Hermes bytecode와의 binary patch만 받으므로 OTA 다운로드 크기가 줄어듭니다.
{
"expo": {
"updates": {
"enableBsdiffPatchSupport": false
}
}
}위처럼 opt-out하는 건 문제를 분석할 때뿐입니다. 평소 운영에서는 default를 유지하고, EAS Observe와 update health 지표로 payload size와 startup regression을 함께 살핍니다.
배포 명령 기준
eas update --environment production --branch production
eas update --environment preview --branch preview --message "QA candidate"
eas update --rollout-percentage 10 --branch production--environment는 EAS에 저장한 환경 변수 집합을 update export에 적용합니다. EXPO_PUBLIC_* 값은
번들에 그대로 inline될 수 있으니, production과 preview API base URL이 섞이지 않게 update job을 따로 돌립니다.
채널·브랜치 전략
롤백 전략
eas update:rollback --branch production
eas update:republish --group <update-group-id> --branch production
eas update:edit롤백은 두 가지입니다.
| 방식 | 쓰는 시점 |
|---|---|
| 이전 update republish | JS/asset 오류지만 직전 update가 정상일 때 |
| embedded update rollback | 동일 runtime의 OTA 전체를 중단하고 스토어 빌드 내장 번들로 되돌릴 때 |
Runtime version 정책
엔터프라이즈 앱에서는 native 코드와 JS update의 호환성을 숫자 하나에 맡기지 않습니다. SDK 업그레이드, native module 추가, config plugin 변경, permission 변경이 있으면 새 binary가 필요합니다.
{
"expo": {
"runtimeVersion": {
"policy": "fingerprint"
}
}
}fingerprint 정책은 native runtime에 영향을 주는 변경을 감지해 incompatible update 가능성을 낮춥니다.
대신 새 build가 더 잦아질 수 있으니 release train과 build cache를 함께 설계합니다.
Rollout gate
| 단계 | 기준 |
|---|---|
| 1% | internal dogfood, crash-free session 99.5% 이상 |
| 10% | EAS Observe cold launch·TTI P95가 직전 버전 대비 10% 이상 악화되지 않음 |
| 50% | support ticket·backend error rate 정상 |
| 100% | release note·store metadata·rollback point 확정 |
Rollout 중에는 같은 runtime의 새 update를 덮어쓰지 않도록 eas update:list와 eas update:view로 상태를
확인하고, rollout이 끝나거나 revert한 다음에 새 update를 게시합니다.
OTA 절감 일수
스토어 심사 대비 OTA 배포가 절감하는 시간을 계산합니다.