본문으로 바로가기
리옵트 핸드북
리옵트 핸드북
Expo 엔터프라이즈 프로덕션

New Architecture

SDK 56 브레이킹 체인지 총정리New Architecture 딥다이브React 19.2 동시성 패턴

네이티브 확장

Ch4. Expo UI — SwiftUI·Compose 선언형 네이티브Ch5. expo-widgets 홈 화면 위젯Expo Modules API v2 네이티브 확장

빌드·배포

EAS Build 고급 파이프라인EAS Update OTA 배포 전략보안·코드 서명·컴플라이언스

운영·품질

성능 모니터링·프로파일링테스트 전략 — E2E·네이티브·비주얼엔터프라이즈 앱 배포·MDM 통합

부록

검증 리포트업데이트 내역
핸드북›Expo 엔터프라이즈 프로덕션›EAS Update OTA 배포 전략
한국어English

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 republishJS/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 배포가 절감하는 시간을 계산합니다.

분기 절감 일수=(스토어 심사 일수−OTA 배포 시간(일))×긴급 패치 횟수/분기\text{분기 절감 일수} = (\text{스토어 심사 일수} - \text{OTA 배포 시간(일)}) \times \text{긴급 패치 횟수/분기}분기 절감 일수=(스토어 심사 일수−OTA 배포 시간(일))×긴급 패치 횟수/분기

관련 문서

테스트 전략 — E2E·네이티브·비주얼

Maestro·Detox E2E, 네이티브 모듈 유닛 테스트, 비주얼 리그레션

엔터프라이즈 앱 배포·MDM 통합

App Store·Play Store 심사, 엔터프라이즈 사이닝, MDM 배포 자동화

EAS Build 고급 파이프라인

커스텀 빌드 프로파일, 캐시 전략, 모노레포 빌드 최적화

보안·코드 서명·컴플라이언스

Store signing·OTA code signing·secrets·runtime config 네 경계로 본 Expo 보안. expo-updates codesigning, EAS 변수 visibility, App Attest·Play Integrity, 릴리스 승인 체크리스트.

On this page

Hermes 바이트코드 디핑 기본값배포 명령 기준채널·브랜치 전략롤백 전략Runtime version 정책Rollout gateOTA 절감 일수