EAS Update는 Expo의 공식 OTA 업데이트 서비스로, CodePush의 대안입니다. JS 번들과 에셋을 앱 스토어 심사 없이 즉시 배포합니다.


설치와 설정

BASH
# EAS Update 설정
eas update:configure

# 업데이트 배포
eas update --branch production --message "버그 수정: 로그인 오류"

# 채널별 업데이트
eas update --branch preview --message "새 기능: 프로필 수정"

채널과 브랜치

PLAINTEXT
빌드 프로필과 업데이트 채널 매핑:

development 빌드 → development 채널 → 개발 업데이트
preview 빌드     → preview 채널     → QA 테스트 업데이트
production 빌드  → production 채널  → 사용자 업데이트

같은 빌드에 여러 JS 번들 업데이트를 배포 가능
네이티브 코드가 변하지 않는 한 앱 재빌드 불필요

업데이트 확인과 적용

TSX
import * as Updates from 'expo-updates';

// 자동 업데이트 (기본)
// app.json에서 설정
{
  "expo": {
    "updates": {
      "enabled": true,
      "checkAutomatically": "ON_LOAD",
      "fallbackToCacheTimeout": 0
    }
  }
}

// 수동 업데이트 (커스텀 로직)
async function checkForUpdates() {
  try {
    const update = await Updates.checkForUpdateAsync();
    if (update.isAvailable) {
      await Updates.fetchUpdateAsync();

      Alert.alert(
        '업데이트 완료',
        '새 버전이 적용됩니다. 앱을 재시작합니다.',
        [{ text: '확인', onPress: () => Updates.reloadAsync() }]
      );
    }
  } catch (error) {
    console.error('업데이트 확인 실패:', error);
  }
}

롤백 전략

BASH
# 현재 배포된 업데이트 목록 확인
eas update:list --branch production

# 특정 업데이트로 롤백
eas update:republish --group <update-group-id>

# 브랜치의 업데이트 삭제 (원래 빌드 번들로 복귀)
eas update:delete --branch production

OTA vs 스토어 업데이트 판단 기준

변경 내용배포 방법
텍스트, 스타일 수정OTA
버그 수정 (JS)OTA
새 화면 추가OTA
네이티브 모듈 추가스토어 업데이트
SDK 버전 업그레이드스토어 업데이트
권한 추가스토어 업데이트

정리

  • EAS Update 는 JS 번들만 교체하므로 네이티브 변경에는 사용할 수 없습니다
  • 채널 시스템 으로 개발/QA/프로덕션 업데이트를 분리하세요
  • 문제 발생 시 즉시 롤백 이 가능합니다
  • 스토어 심사 없이 수분 내 배포 가 완료됩니다
  • Apple/Google 정책을 준수하여 핵심 기능 변경은 스토어 업데이트 로 처리하세요
댓글 로딩 중...