FEInterview Prep

FEConf · FEConf 2025 2025

Swift·Kotlin 한 줄 없이 만드는 Expo 전용 OTA 업데이트 시스템

Swift/Kotlin 없이 순수 Expo(JavaScript)만으로 OTA(Over-the-Air) 업데이트 시스템을 직접 구현한 경험을 공유합니다.

ExpoOTA 업데이트React NativeEAS Update앱 배포

요약

핵심 토픽

Expo OTA 프로토콜EAS UpdateJS 번들 교체업데이트 메타데이터롤백 전략

학습 포인트

1. OTA 업데이트의 동작 원리

React Native/Expo 앱의 로직은 JS 번들 파일입니다. 앱 시작 시 서버에서 새 번들 버전을 확인하고 다운로드해 교체하면 네이티브 코드(Swift/Kotlin) 변경 없이 앱을 업데이트할 수 있습니다. 네이티브 코드 변경이 없는 한 App Store 심사 없이 즉시 반영됩니다. 단, 네이티브 모듈 추가·변경 시에는 앱 스토어 배포가 필요합니다.

핵심 용어

JS 번들 교체네이티브 코드 경계앱 스토어 우회즉시 배포

2. Expo 업데이트 프로토콜

Expo 앱은 시작 시 `expo-updates` 모듈이 설정된 업데이트 URL로 HTTP 요청을 보냅니다. 서버는 현재 runtimeVersion과 platform에 맞는 매니페스트(JSON)를 반환합니다. 매니페스트에는 JS 번들 URL, 에셋 URL, 체크섬 등이 포함됩니다. 앱은 번들을 다운로드해 다음 실행 시 적용합니다.

핵심 용어

expo-updatesruntimeVersion매니페스트체크섬 검증

3. 롤백과 강제 업데이트 전략

업데이트 후 크래시 발생 시 자동 롤백: 연속 크래시 횟수를 카운트해 임계값 초과 시 이전 번들로 복원. 강제 업데이트: 서버에서 `minimumRequiredVersion`을 반환해 오래된 앱 버전을 강제 업데이트 화면으로 이동시킵니다. A/B 테스트: 특정 사용자 그룹에 다른 번들 버전을 제공해 기능을 점진적으로 롤아웃합니다.

핵심 용어

자동 롤백크래시 감지강제 업데이트점진적 롤아웃

면접 질문

중급

Q1. OTA 업데이트가 앱 스토어 심사를 우회할 수 있는 이유와 한계는 무엇인가요?

힌트

[감점 답변] 정의만 반복하거나 "OTA 업데이트가 앱 스토어 심사를 우회할 수 있는 이유와 한계는 무엇인가요?"에 대해 장단점 없이 단편적으로 답하면 감점 포인트입니다. 면접관은 실무 적용 경험이 부족하다고 판단합니다. [좋은 답변] 앱 스토어 가이드라인은 '네이티브 코드'의 변경을 심사합니다. JS 번들은 앱의 '해석되는 코드'로 기능 변경이 가능합니다. 단, 앱의 핵심 목적을 크게 바꾸거나 새 네이티브 모듈을 추가하는 것은 가이드라인 위반입니다. Apple은 특히 엄격해 OTA로 앱 성격 자체를 바꾸면 계정이 제재될 수 있습니다.

고급

Q2. Expo의 runtimeVersion이 중요한 이유는 무엇인가요?

힌트

[감점 답변] 정의만 반복하거나 "Expo의 runtimeVersion이 중요한 이유는 무엇인가요?"에 대해 장단점 없이 단편적으로 답하면 감점 포인트입니다. 면접관은 실무 적용 경험이 부족하다고 판단합니다. [좋은 답변] runtimeVersion은 JS 번들과 네이티브 바이너리의 호환성을 나타냅니다. 네이티브 모듈을 추가하면 runtimeVersion을 올려야 하는데, 이렇게 하면 이전 버전 앱은 새 번들을 받을 수 없습니다. 네이티브 API가 없는 번들을 구 버전 앱에 배포하면 크래시가 발생하기 때문에 이 버전 관리가 OTA 시스템의 핵심입니다.

중급

Q3. OTA 업데이트 중 앱이 크래시할 경우 어떻게 처리하시겠습니까?

힌트

[감점 답변] 정의만 반복하거나 "OTA 업데이트 중 앱이 크래시할 경우 어떻게 처리하시겠습니까?"에 대해 장단점 없이 단편적으로 답하면 감점 포인트입니다. 면접관은 실무 적용 경험이 부족하다고 판단합니다. [좋은 답변] 방어 전략: (1) 번들 다운로드 완료 후 체크섬 검증, (2) 첫 번째 실행 전 백업 번들 보존, (3) 연속 크래시 횟수 추적(AsyncStorage)으로 임계값 초과 시 이전 번들로 자동 복원, (4) 크래시 리포팅 서비스(Sentry)와 연동해 특정 업데이트 후 크래시율 급등 시 서버에서 강제 롤백.

선행 학습

  • React Native/Expo 기본 개발 경험
  • HTTP API 기초
  • 앱 배포 프로세스 이해(App Store, Play Store)

핵심 타임스탬프

Expo OTA 프로토콜 핵심 구간00:00 - 03:00
EAS Update 핵심 구간03:00 - 07:00
JS 번들 교체 핵심 구간07:00 - 12:00
업데이트 메타데이터 핵심 구간12:00 - 17:00

학습 방법

1단계: Expo 공식 문서의 expo-updates를 읽고 EAS Update 서비스를 기존 프로젝트에 연결해보세요. 업데이트가 어떻게 배포되는지 실제로 경험하는 것이 이해의 시작입니다. 2단계: expo-updates의 `checkForUpdateAsync`, `fetchUpdateAsync`, `reloadAsync` API를 사용해 업데이트 UI를 직접 구현해보세요. 3단계: 커스텀 업데이트 서버를 Node.js로 구현해보세요. Expo 프로토콜 문서를 보면서 매니페스트 응답 형식을 맞추는 것이 핵심입니다. 4단계: 동료에게 "Expo OTA 프로토콜"의 핵심을 5분 안에 설명해보세요. 막히는 부분이 아직 구조적으로 이해되지 않은 지점입니다.