메인 콘텐츠로 바로가기

Capgo의 실시간 업데이트 방법

Capgo의 실시간 업데이트 기능을 이해하기 위해 iOS와 Android의 하드웨어 구현을 깊이 들여다보겠습니다.

마틴 도나디유

마틴 도나디유

콘텐츠 마케터

Capgo의 실시간 업데이트 방법

Capgo의 실시간 업데이트

Capacitor 앱에서 가장 강력한 기능 중 하나인 실시간 업데이트 기능은 앱 스토어 제출 없이 실시간 업데이트 기능을 제공합니다. Capgo이 이 기능을 구현하는 방법에 대해 깊이 들여다보겠습니다.

Core Concepts

Capacitor 앱은 두 개의 주요 층으로 구성됩니다.:

  1. 웹 층: WebView에서 로드되는 HTML, CSS 및 JavaScript 파일을 포함합니다.
  2. 네이티브 층: Android의 경우 Java/Kotlin, iOS의 경우 Swift를 사용하여 플랫폼에 특화된 code을 포함합니다.

Capgo의 라이브 업데이트 시스템은 런타임에 웹 층을 교체하여 앱 바이너리에 컴파일되지 않은 파일을 교체합니다.

기술적 구현

Capacitor의 서버 경로

Capgo은 두 개의 중요한 경로를 관리합니다.:

  • 현재 서버 경로: 현재 WebView에서 로드된 파일에 대한 포인터를 포함합니다.
  • 다음 서버 경로: 앱 재시작 시 로드할 파일을 지시합니다.

안드로이드 구현

안드로이드에서 Capgo은 다음 경로를 관리합니다:

// Store next server path
private void setNextCapacitorServerPath(String path) {
    SharedPreferences prefs = context.getSharedPreferences("CapWebViewSettings", Activity.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("serverBasePath", path);
    editor.apply();
}

// Update current path and reload
private void setCurrentCapacitorServerPath(String path) {
    bridge.setServerBasePath(path);
    bridge.reload();
}

iOS 구현

iOS에서 경로는 다음으로 관리됩니다:

// Store next server path
private func setNextCapacitorServerPath(path: String) {
    KeyValueStore.standard["serverBasePath"] = path
}

// Update current path
private func setCurrentCapacitorServerPath(path: String) {
    bridge.viewController.setServerBasePath(path: path)
}

보안 대책

Capgo은 개발에서 배포까지 앱 업데이트가 완전히 안전하도록 끝에서 끝까지 암호화된 보안을 구현합니다. 우리의 암호화 시스템은 전통적인 code 서명보다 더 나은 진실의 zero-knowledge 보안을 제공합니다.

끝에서 끝까지 암호화된 아키텍처

  1. 끝에서 끝까지 암호화 (E2EE): 개발 환경을 떠나기 전에 업데이트 패키지를 AES-256-GCM 암호화하여 암호화합니다. 이 군사급 암호화는 앱 업데이트가 전달 과정의 모든 단계에서 완전히 개인적이고 안전하도록 보장합니다.

  2. zero-knowledge 아키텍처: Capgo은 다른 OTA 업데이트 솔루션과 달리 업데이트만 서명하는 것에만 중점을 두지 않는다. Capgo은真正의 zero-knowledge 암호화를 사용한다는 것을 의미한다.

    • 업데이트 내용은 업로드하기 전에 암호화된다.
    • Capgo 서버는 암호화된 데이터만 저장한다.
    • 엔드 사용자 기기에서만 암호화가 발생한다.
    • 중간 매체가 업데이트 콘텐츠에 접근할 수 없다.
  3. Secure Key Management:

    • 암호화 키는 CI/CD 환경에서 안전하게 생성되고 저장된다.
    • Capgo 서버에 private 키가 절대 접근하지 않는다.
    • 각 앱 버전은 고유한 암호화 키를 사용할 수 있다.
    • 보안을 강화하기 위해 키 회전 지원

자세한 설명서에서 __CAPGO_KEEP_0__ Live Updates의 암호화 시스템에 대해 자세히 알아보세요. End-to-End Encryption in Capgo Live Updates

보안 업데이트 프로세스 업데이트

  1. 전송 전 암호화:

    • CI/CD pipeline에서 업데이트가 암호화됩니다
    • 각 파일은 개별적으로 암호화됩니다
    • 메타데이터도 완전한 개인정보 보호를 위해 암호화됩니다
  2. 안전한 저장소:

    • Capgo의 글로벌 CDN에서 암호화된 패키지가 저장됩니다
    • 서버에 대한 평문 데이터는 절대 접근하지 않습니다
    • 서버 침해의 경우도 데이터가 안전하게 유지됩니다
  3. 안전한 배포:

    • 업데이트는 암호화된 채널을 통해 전달됩니다
    • 각 앱 인스턴스는 암호화된 데이터의 무결성을 확인합니다
    • 자동 재시도 메커니즘으로 암호화 실패
  4. 클라이언트 측 보안:

    • 설치 전 업데이트가 검증됩니다.
    • 암호화 실패 시 자동 롤백
    • 앱의 보호된 저장소에서 안전한 키 저장

업데이트가 다음 공격에 안전하도록 보장하는 포괄적인 보안 접근 방식입니다.

  • 중간자 공격
  • 서버 측 침해
  • 권한이 없는 수정
  • 재생 공격
  • 콘텐츠 조작

업데이트 라이프 사이클

Capgo의 자동 업데이트 프로세스는 기본적으로 자동화되어 있습니다. 자동화된 프로세스는 어떻게 작동하는지 알아보겠습니다.

1. 자동 업데이트 확인

플러그인은 다음 상황에서 자동으로 업데이트 확인을 수행합니다.

  • 앱이 시작될 때

이 동작은 다음 설정에 의해 제어됩니다. autoUpdate 자동 업데이트 확인을 수동으로 확인할 수 있습니다.

// capacitor.config.json
{
  "plugins": {
    "CapacitorUpdater": {
      "autoUpdate": true // Enable automatic updates
    }
  }
}

2. 자동 다운로드 getLatest()

새로운 버전이 감지되면, 자동 다운로드가 활성화되어 있다면:

다운로드가 자동으로 시작됩니다. autoUpdate 다운로드 진행 상황은 내부적으로 추적됩니다.

  1. __CAPGO_KEEP_0__
  2. 자동 다운로드를 활성화하려면:
  3. 다운로드 실패 시 자동 재시도는 앱 열기마다 발생합니다.
  4. 다운로드 성공 시 앱 저장소에 저장됩니다.

이 프로세스를 이벤트를 통해 모니터링할 수 있습니다.

CapacitorUpdater.addListener('download', (info: DownloadEvent) => {
  console.log('Auto-download progress:', info.percent);
});

CapacitorUpdater.addListener('downloadComplete', (info: DownloadCompleteEvent) => {
  console.log('Auto-download complete:', info.bundle);
});

3. 자동 설치

설정에 따라 설치 시간이 결정됩니다.

// capacitor.config.json
{
  "plugins": {
    "CapacitorUpdater": {
      "autoUpdate": true,
      "directUpdate": false // install update on app backgrounding
      "resetWhenUpdate": true, // reset live updates on native update (true by default)
      "autoDeleteFailed": true, // Auto cleanup failed updates (true by default)
      "autoDeletePrevious": true // Auto cleanup old versions (true by default)
    }
  }
}

설치 시점은 다음과 같습니다.

  • 즉시 설치가 이루어지면 directUpdate is true
  • 다음 앱 배경화면 시 설치가 이루어지면 directUpdate is false
  • 설치 실패 시 자동 롤백

플러그인은 또한 저장소 관리를 자동으로 처리합니다.

  • 실패한 업데이트를 제거합니다. autoDeleteFailed __CAPGO_KEEP_0__
  • 기존 버전을 정리합니다. autoDeletePrevious __CAPGO_KEEP_0__

업데이트 지연

업데이트를 설치하는 시간을 제어할 수 있습니다.

// Delay until app goes to background
await CapacitorUpdater.setDelay({
  kind: 'background'
});

// Delay until specific date
await CapacitorUpdater.setDelay({
  kind: 'date',
  value: '2024-03-20T10:00:00.000Z'
});

// Delay until next native version
await CapacitorUpdater.setDelay({
  kind: 'nativeVersion'
});

// Multiple conditions
await CapacitorUpdater.setMultiDelay({
  delayConditions: [
    {
      kind: 'background'
    },
    {
      kind: 'date',
      value: '2024-03-20T10:00:00.000Z'
    }
  ]
});

지연 조건:

  • 배경: 앱이 배경으로 이동할 때 설치
  • 날짜: 특정 날짜/시간 이후에 설치
  • 네이티브 버전: 다음 네이티브 업데이트 후 설치
  • 종료: 앱이 종료된 후 설치

이것은 유용합니다:

  • 업데이트를 평일 시간대에 스케줄링하는 경우
  • 사용자 활동과 업데이트를 동기화하는 경우
  • smooth한 업데이트 kinh험을 보장하는 경우
  • 중요한 작업 중에 중단을 예방하는 경우

업데이트 상태

자동화된 프로세스 중에, 배ंडल은 다음 상태를 거칩니다:

  1. 다운로드 중: 다운로드 중
  2. 대기 중: 다운로드 완료, 설치 대기 중
  3. 성공: 설치 및 활성화 완료
  4. 오류: 설치 실패 (자동 롤백 트리거)

스토어 준수성

애플 앱 스토어 ✅

라이브 업데이트는 애플 앱 스토어 정책에 완전히 준수합니다. 애플 개발자 프로그램 라이선스 계약에 명시된 바와 같이:

“Interpreted code may be downloaded to an Application but only so long as such code: (a) does not change the primary purpose of the Application by providing features or functionality that are inconsistent with the intended and advertised purpose of the Application as submitted to the App Store, (b) does not create a store or storefront for other code or applications, and (c) does not bypass signing, sandbox, or other security features of the OS.”

Capgo 업데이트는 웹层만 수정하며 모든 플랫폼 보안 경계를 존중합니다.

구글 플레이 스토어 ✅

Google Play 정책에 따라 실시간 업데이트합니다.

“This restriction does not apply to code that runs in a virtual machine or an interpreter where either provides indirect access to Android APIs (such as JavaScript in a webview or browser).”

이 제한은 가상 머신이나 인터프리터에서 실행되는 Capgo에 적용되지 않습니다. 가상 머신이나 인터프리터가 안드로이드 API에 대한 간접 접근을 제공하는 경우입니다. (예: 웹뷰나 브라우저에서 자바스크립트를 사용하는 경우)

Best Practices

  1. Phased Rollouts: 업데이트 순차적으로 배포합니다.
  2. Version Control: 배포한 모든 버전을 추적합니다.
  3. Rollback Support: 문제 발생 시 빠른 복구
  4. Delta Updates: 변경된 파일만 다운로드합니다.

라이브 업데이트를 사용할 때

Perfect for:

  • 버그 수정
  • UI 개선
  • 콘텐츠 업데이트
  • 기능 토글

적합하지 않은 경우:

  • 자연어 code 변경
  • 주 버전 업데이트
  • 자연어 변경이 필요한 보안 패치
라이브 업데이트를 Capacitor 앱에 사용하기

웹-layer 버그가 활성화된 경우 Capgo을 통해修정을 배포하세요. 앱 스토어 승인 대기 없이 사용자에게 배포되며, 네이티브 변경 사항은 일반적인 검토 경로에 남아 있습니다.

시작하기

최신 블로그 글

Capgo은 전문적인 모바일 앱을 만들기 위해 필요한 최고의洞察력을 제공합니다.