CodePush는 JavaScript 번들만 교체하여 앱 스토어 심사 없이 즉시 업데이트를 배포할 수 있습니다.

버그 수정이나 텍스트 변경을 위해 앱 스토어 심사(1~3일)를 기다리는 것은 비효율적입니다. CodePush는 JS 번들과 에셋만 OTA로 교체합니다.


동작 원리

PLAINTEXT
1. 개발자가 JS 번들 업데이트를 CodePush 서버에 배포
2. 앱 실행 시 CodePush SDK가 서버에 새 버전 확인
3. 새 버전이 있으면 백그라운드에서 다운로드
4. 다음 앱 재시작 시 새 번들 적용

업데이트 가능: JavaScript 코드, 이미지 에셋, JSON 등
업데이트 불가: 네이티브 코드 변경 (Swift/Kotlin)
             → 네이티브 변경은 앱 스토어 업데이트 필요

설치와 설정

BASH
npm install react-native-code-push
# App Center CLI
npm install -g appcenter-cli
appcenter login
TSX
// App.tsx
import codePush from 'react-native-code-push';

const codePushOptions = {
  checkFrequency: codePush.CheckFrequency.ON_APP_RESUME,
  installMode: codePush.InstallMode.ON_NEXT_RESTART,
};

function App() {
  return <MainNavigator />;
}

export default codePush(codePushOptions)(App);

업데이트 전략

TSX
// 1. 사일런트 업데이트 — 사용자 모르게 백그라운드 업데이트
const silentOptions = {
  checkFrequency: codePush.CheckFrequency.ON_APP_RESUME,
  installMode: codePush.InstallMode.ON_NEXT_RESTART,
};

// 2. 즉시 업데이트 — 다운로드 후 바로 적용 (중요 버그 수정)
const immediateOptions = {
  checkFrequency: codePush.CheckFrequency.ON_APP_START,
  installMode: codePush.InstallMode.IMMEDIATE,
};

// 3. 사용자 확인 업데이트 — 다이얼로그로 확인
async function checkForUpdate() {
  const update = await codePush.checkForUpdate();
  if (update) {
    Alert.alert(
      '업데이트 알림',
      `새 버전(${update.label})이 있습니다. 업데이트하시겠습니까?`,
      [
        { text: '나중에', style: 'cancel' },
        {
          text: '업데이트',
          onPress: async () => {
            await update.download();
            await codePush.restartApp();
          },
        },
      ]
    );
  }
}

배포

BASH
# Staging 배포 (테스트)
appcenter codepush release-react -a owner/MyApp-iOS -d Staging

# Production 배포
appcenter codepush release-react -a owner/MyApp-iOS -d Production

# 특정 앱 버전만 대상
appcenter codepush release-react -a owner/MyApp-iOS -t "1.2.*"

# 점진적 배포 (25%만)
appcenter codepush release-react -a owner/MyApp-iOS --rollout 25

# 롤백
appcenter codepush rollback -a owner/MyApp-iOS Production

정리

  • CodePush는 JS 번들만 교체 하므로 네이티브 코드 변경에는 사용할 수 없습니다
  • 사일런트, 즉시, 확인 세 가지 업데이트 전략을 상황에 맞게 선택하세요
  • rollout 옵션으로 ** 점진적 배포** 후 문제가 없으면 전체 배포하세요
  • 문제 발생 시 ** 롤백 **으로 이전 버전으로 즉시 복구할 수 있습니다
  • Apple/Google의 정책상 앱의 ** 핵심 기능 변경은 스토어 업데이트 **로 해야 합니다
댓글 로딩 중...