# OTA는 코드 배포가 아니라 호환 계약이다

> runtimeVersion, branch·channel, rollout·rollback과 테스트 피라미드

- Canonical: https://learning.reopt.ai/courses/expo-production/lessons/ex-m3-concept
- Language: ko-KR
- HTML: https://learning.reopt.ai/courses/expo-production/lessons/ex-m3-concept

---

[Expo 엔터프라이즈 프로덕션](/courses/expo-production) 3. OTA와 단계적 릴리즈 5 / 9

# OTA는 코드 배포가 아니라 호환 계약이다

runtimeVersion, branch·channel, rollout·rollback과 테스트 피라미드
개념 학습 45 XP 9분

EAS Update는 심사 없이 JS와 asset을 바꾸지만 설치된 binary의 native API는 바꾸지 못합니다. runtimeVersion이 호환성 경계를 나타내고 branch는 업데이트 흐름, channel은 binary가 바라보는 흐름을 정합니다. 이 세 축을 섞으면 실행 직후 crash가 납니다.
호환되지 않으면 새 binary native module·permission·config plugin·SDK runtime이 바뀌면 OTA가 아니라 store binary를 배포합니다. OTA는 internal→canary→확대 순으로 진행하고 crash-free·startup·핵심 전환 지표를 gate로 둡니다.

| 변경 | 배포 경로 | 필수 gate |
| JS 로직·호환 asset | 같은 runtime OTA | smoke·crash-free·business KPI |
| Native dependency·permission | 새 store binary | device E2E·review |
| 긴급 JS hotfix | 제한 OTA canary | owner·rollback update |
| Runtime 전환 | 새 channel·binary | 구 runtime 지원 기간 |

- 1 변경 분류 JS-only와 native-affecting 변경을 자동·수동으로 판정합니다.

- 2 호환성 지정 runtimeVersion 정책과 지원 중인 binary 범위를 기록합니다.

- 3 소규모 배포 internal·canary cohort에서 핵심 journey를 검증합니다.

- 4 확대·복구 지표 gate를 통과해 확대하고 이전 update를 즉시 republish할 수 있게 합니다.

실무에 남길 기준

- channel은 binary에 연결되고 branch는 update history를 가진다
- rollback도 동일 runtime의 안전한 update가 준비되어 있어야 빠르다
- unit·integration·device E2E·release smoke가 서로 다른 실패를 막는다

[이전](/courses/expo-production/lessons/ex-m2-scenario) 이해했어요 · 계속

---

에이전트용 사이트 안내: https://learning.reopt.ai/llms.txt · 사이트맵: https://learning.reopt.ai/sitemap.xml · 문의: https://learning.reopt.ai/contact
