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

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

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

---

[Expo enterprise production](/en/courses/expo-production) 3. OTA와 단계적 릴리즈 5 / 9

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

runtimeVersion, branch·channel, rollout·rollback과 테스트 피라미드
Concept 45 XP 9 min

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가 서로 다른 실패를 막는다

[Previous](/en/courses/expo-production/lessons/ex-m2-scenario) Got it · Continue

---

Site guide for agents: https://learning.reopt.ai/llms.txt · Sitemap: https://learning.reopt.ai/sitemap.xml · Contact: https://learning.reopt.ai/contact
