React Native와 Expo에서 OTA 업데이트를 이해하는 방법
OTA(Over-The-Air) 업데이트는 앱 스토어 심사를 거치지 않고 설치된 앱의 JavaScript 코드와 에셋을 갱신하는 방식입니다. React Native와 Expo 환경에서는 빠른 버그 수정과 작은 기능 개선에 매우 유용합니다.
OTA로 가능한 것
OTA 업데이트는 네이티브 바이너리를 바꾸지 않는 변경에 적합합니다.
가능한 예시는 다음과 같습니다.
- JavaScript 로직 수정
- React 컴포넌트와 화면 변경
- 스타일 수정
- 문구 변경
- JS 번들에 포함된 이미지 교체
- 기능 플래그 변경
OTA로 불가능한 것
네이티브 앱 자체가 바뀌어야 하는 변경은 OTA로 처리할 수 없습니다.
예를 들어 다음은 스토어 재배포가 필요합니다.
- 네이티브 모듈 추가
- 권한 추가
- Expo SDK 버전 변경
- app.json의 네이티브 설정 변경
- iOS/Android 빌드 설정 변경
runtimeVersion이 중요한 이유
OTA 업데이트는 설치된 앱의 네이티브 런타임과 호환되어야 합니다. 호환되지 않는 JS 번들을 내려보내면 앱이 깨질 수 있습니다.
그래서 Expo에서는 runtimeVersion 또는 SDK 정책을 통해 어떤 앱 버전이 어떤 업데이트를 받을 수 있는지 구분합니다.
배포 전략
안전한 OTA 전략은 다음과 같습니다.
- 작은 변경부터 OTA로 배포한다.
- 네이티브 변경은 반드시 새 빌드로 배포한다.
- 채널을 나누어 staging에서 먼저 검증한다.
- 문제가 생기면 이전 업데이트로 롤백할 수 있게 한다.
- 앱 시작 시 업데이트 확인 타이밍을 사용자 경험에 맞게 조절한다.
실무에서 유용한 경우
- 긴급 문구 수정
- API 응답 처리 버그 수정
- 화면 스타일 미세 조정
- 특정 기능 임시 비활성화
- 작은 비즈니스 로직 변경
듀오랩스가 보는 관점
OTA는 모바일 앱 운영의 속도를 크게 높여줍니다. 하지만 모든 것을 OTA로 해결하려고 하면 위험합니다. “JS 변경은 OTA, 네이티브 변경은 스토어 배포”라는 원칙을 명확히 두는 것이 안정적인 운영의 핵심입니다.
함께 읽기
- Expo SDK 56 앱을 App Store와 Google Play에 배포하기Expo 앱을 배포한다고 하면 보통 eas build 명령 하나를 떠올립니다. 실제 운영 배포는 빌드, 앱 서명, 스토어 업로드, 베타 테스트, 심사, 공개 출시, OTA 업데이트가 서로 다른 단계입니다. 이 구분을 놓치면 CI가 성공했는데 스토어에는 앱이 없거나, JavaScript 수정이라고 생각해 OTA를 발행했는…
- 여러 고객 앱을 운영할 때 계정과 서명 키를 분리하는 방법React Native와 Expo로 여러 고객 앱을 개발·배포한다면 계정, 비용, 서명 키, 스토어 권한을 어떻게 나눌지 초기에 정해야 합니다. 이 구조를 잘못 잡으면 나중에 소유권 이전, 업데이트, 보안 관리가 복잡해집니다.
- Watchman은 React Native 개발에서 왜 필요할까React Native나 Expo로 개발하다 보면 코드를 고쳤는데 앱에 바로 반영되지 않는 경우가 있습니다. 이때 원인 중 하나가 파일 변경 감시 도구인 Watchman 문제일 수 있습니다.
- 모바일 앱 스토어 배포 자동화를 설계할 때 볼 것들모바일 앱 배포는 빌드 파일을 만드는 것에서 끝나지 않습니다. 인증서, 서명 키, 스토어 메타데이터, 심사 정보, 버전 관리, 제출 자동화까지 함께 설계해야 반복 가능한 배포가 됩니다.
- Expo EAS 비용 구조와 절약 전략Expo Application Services(EAS)는 React Native 앱을 빌드, 제출, 업데이트하는 과정을 단순하게 만들어줍니다. 하지만 팀 규모와 빌드 빈도에 따라 비용 구조를 이해하고 써야 합니다.