메인 콘텐츠로 건너뛰기

Capgo에서 실시간 업데이트 작동 방식

Capgo의 실시간 업데이트 기술 구현에 대한 깊은 이해, iOS와 Android의 하드웨어 구현을 이해하는 방법

마틴 도나디유

마틴 도나디유

마케팅 담당자

Capgo에서 실시간 업데이트 작동 방식

Capgo에서 실시간 업데이트 이해

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

기본 개념

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

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

Capgo의 실시간 업데이트 시스템은 웹 층을 런타임에 교체함으로써 이러한 파일이 앱 바이너리에 컴파일되지 않기 때문에 작동합니다.

기술적 구현

Capacitor 경로

Capgo는 두 가지 중요한 경로를 관리합니다.

  • 현재 서버 경로: 현재 로드된 WebView에 대한 파일을 참조합니다.
  • 다음 서버 경로: 다음 앱 재시작 시 로드될 파일을 참조합니다.

안드로이드 Implementation

안드로이드에서 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 Implementation

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 보안을 제공합니다.

끝-to-끝 암호화 아키텍처

  1. 끝-to-끝 암호화 (E2EE): 개발 환경을 떠나는 모든 업데이트 패키지는 AES-256-GCM 암호화를 사용하여 암호화됩니다. 이 군사급 암호화는 업데이트 패키지의 모든 전송 과정에서 완전히 개인적이고 안전합니다.

  2. Zero-Knowledge 아키텍처: 다른 OTA 업데이트 솔루션만 업데이트를 서명하는 것과는 달리, Capgo는真正의 zero-knowledge 암호화를 사용합니다. 이것은:

    • 업데이트 내용은 업로드하기 전에 암호화됩니다
    • Capgo 서버는 암호화된 데이터만 저장합니다
    • 엔드-유저 기기에서만 암호화가 발생합니다
    • 중간 매체가 업데이트 내용에 접근할 수 없습니다
  3. 안전한 키 관리:

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

__CAPGO_KEEP_0__ Live Updates에서 우리의 암호화 시스템에 대한 자세한 설명을 알아보세요: Capgo Live Updates에서 끝까지 암호화

업데이트 보안 프로세스

  1. 업데이트 전 암호화:

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

    • Capgo의 글로벌 CDN에서 암호화된 패키지가 저장됩니다
    • 플레인 텍스트 데이터는 우리 서버에 절대 닿지 않습니다
    • 서버 침해에도 데이터는 안전합니다.
  3. 보안 배송:

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

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

이 종합 보안 접근 방식은 앱 업데이트가 다음 공격에 안전하도록 보장합니다.

  • 중간자 공격
  • 서버 측 침해
  • __CAPGO_KEEP_0__의 업데이트 프로세스는 기본적으로 자동화되어 있습니다. 자동화된 프로세스는 다음과 같이 작동합니다.
  • 1. 자동 업데이트 확인
  • 플러그인은 다음 상황에서 업데이트를 자동으로 확인합니다.

앱이 시작될 때

Capgo’s update process is designed to be automatic by default. Here’s how the automatic process works:

설정에 의해 제어됩니다.

수동으로 확인할 수도 있습니다.

  • 2. 자동 다운로드

허가되지 않은 수정 autoUpdate 재생 공격

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

콘텐츠 조작 getLatest()

업데이트 라이프 사이클

When a new version is detected, if __CAPGO_KEEP_0__ is enabled: autoUpdate __CAPGO_KEEP_0__

  1. 자동 다운로드가 시작됩니다.
  2. Progress is tracked internally.
  3. 실패한 다운로드는 앱을 열 때마다 자동으로 재시도됩니다.
  4. 성공한 다운로드는 앱 저장소에 저장됩니다.

You can monitor this process through events:

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. 자동 설치

The installation timing depends on your configuration:

// 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)
    }
  }
}

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

  • 즉시 __CAPGO_KEEP_0__가 true일 경우 directUpdate __CAPGO_KEEP_0__
  • 다음 앱이 백그라운드에 있을 때 directUpdate __CAPGO_KEEP_0__이 false일 때
  • 설치 실패 시 자동 롤백

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

  • __CAPGO_KEEP_0__이 실패한 업데이트를 제거합니다. autoDeleteFailed __CAPGO_KEEP_0__이 true일 때
  • __CAPGO_KEEP_0__이 true일 때 autoDeletePrevious 업데이트 지연

업데이트를 설치할 때 지연 조건을 사용하여 언제 설치할지 제어할 수 있습니다.

지연 조건:

// 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'
    }
  ]
});

background

  • __CAPGO_KEEP_0__: 배경에서 앱이 실행될 때 설치
  • 날짜: 특정 날짜/시간에 설치
  • 자연어 버전: 다음 자연어 업데이트 후에 설치
  • 종료: 앱이 종료된 후에 설치

이것은 유용합니다.

  • 업데이트를 평소에 진행하여 사용자 활동에 방해를 주지 않도록
  • 사용자 활동과 업데이트를 동기화하여
  • smooth한 업데이트 경험을 제공하여
  • 중요한 작업 중에 방해를 주지 않도록

업데이트 상태

자동화 프로세스 중인 동안, 번들은 다음 상태를 거칩니다:

  1. 다운로드 중: 다운로드 진행 중
  2. 대기 중: 다운로드 완료, 설치 대기
  3. 성공: 업데이트 설치 및 활성화
  4. 에러: 업데이트 실패 (자동 롤백 트리거)

스토어 규정 준수

Apple App Store

실시간 업데이트(App Store 정책 준수):

“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 Store ✅

실시간 업데이트(Google Play 정책 준수):

‘이 제한은 code이 가상 머신 또는 인터프리터에서 실행될 때, 또는 두 가지가 Android API에 대한 간접 접근을 제공할 때 적용되지 않습니다.’라고 Google Play 정책에 명시되어 있습니다.

Capgo은 WebView 콘텐츠만 업데이트하므로 이러한 허용된 지침에 따라 작동합니다.

최선의 방법

  1. 구간 배포: 업데이트를 점진적으로 배포합니다.
  2. 버전 관리: 배포된 모든 버전을 추적합니다.
  3. 되돌리기 지원: 문제 해결에서 빠른 회복
  4. 델타 업데이트: 변경된 파일만 다운로드

라이브 업데이트 사용 시기

적합한 경우:

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

적합하지 않은 경우:

  • 자연 code 변경
  • 주요 버전 업데이트
  • 자연어 변경이 필요한 보안 패치

Capgo에서 Live Updates가 어떻게 작동하는지 이해한 후 계속 진행하세요.

__CAPGO_KEEP_0__을 사용 중이라면 Capgo에서 Live Updates가 어떻게 작동하는지 이해하세요. __CAPGO_KEEP_0__을 사용하여 네이티브 플러그인 작업을 계획하고 있으시다면, __CAPGO_KEEP_0__ Plugin Directory와 연결하세요. Capgo Plugin Directory에서 Capgo 제품 워크플로우를 확인하세요. Capgo Plugins by __CAPGO_KEEP_1__ Capacitor Plugins by Capgo의 구현 세부 사항을 확인하세요. for the implementation detail in Capacitor Plugins by Capgo, 플러그인 추가 또는 업데이트의 구현 세부 사항을 확인하세요. 플러그인 추가 또는 업데이트 Ionic Enterprise Plugin Alternatives Ionic Enterprise Plugin Alternatives 제품 워크플로우에서 Capgo Native Builds Capgo Native Builds 제품 워크플로우에서

Capacitor 앱용 라이브 업데이트

웹-layer 버그가 라이브일 때, 앱 스토어 승인 대기 없이 Capgo를 통해 패치를 배포하세요. 사용자는 배경에서 업데이트 받으면서 네이티브 변경 사항은 일반적인 리뷰 경로로 남아 있습니다.

시작하기

블로그에서 최신 뉴스

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