메인 콘텐츠로 바로가기

Capgo에서 실시간 업데이트가 어떻게 작동하는지

Capgo의 실시간 업데이트에 대한 기술 구현에 깊이 파고들어 보자. iOS와 Android 모두의 하드웨어 구현을 이해하는 것은 Capgo의 실시간 업데이트를 이해하는 데 중요하다.

Martin Donadieu

Martin Donadieu

콘텐츠 마케터

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은 개발에서 배포까지 앱 업데이트가 완전히 안전하도록 MILITARY-Grade 보안을 구현합니다. 우리의 암호화 시스템은 전통적인 code 서명보다 더 나은 TRUE ZERO-KNOWLEDGE 보안을 제공합니다.

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

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

  2. ZERO-KNOWLEDGE 아키텍처: Capgo은 다른 OTA 업데이트 솔루션과 달리 업데이트를만들 때 암호화하는 것을 지원합니다.

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

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

자세한 정보는 __CAPGO_KEEP_0__ Live Updates의 암호화 시스템 설명서에서 확인할 수 있습니다. Capgo Live Updates에서 끝에서 끝까지 암호화

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

  1. 파일 암호화:

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

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

    • 업데이트는 암호화된 채널을 통해 전달됩니다
    • 각 앱 인스턴스는 암호화된 데이터의 무결성을 검증합니다
    • __CAPGO_KEEP_0__
  4. 클라이언트 측 보안:

    • 설치 전 업데이트가 검증됩니다.
    • __CAPGO_KEEP_0__
    • 앱의 보호된 저장소에서 안전한 키 저장

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

  • 인터넷 트래픽을 중간에 가로채는 공격
  • 서버 측의 침해
  • 권한이 없는 수정
  • 재생 공격
  • 콘텐츠 조작

업데이트 라이프 사이클

Capgo의 자동 업데이트 프로세스는 기본적으로 자동화되어 있습니다. 자동화된 프로세스는 다음과 같이 작동합니다.

1. 자동 업데이트 확인

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

  • 앱이 시작될 때

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

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

2. 자동 다운로드 getLatest()

새로운 버전이 감지되면,

이 설정이 활성화되어 있다면: autoUpdate 다운로드가 자동으로 시작됩니다.

  1. 다운로드 진행률은 내부적으로 추적됩니다.
  2. __CAPGO_KEEP_0__
  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 __CAPGO_KEEP_0__
  • 앱 배경화면이 발생하면 다음에 directUpdate 설치가 실패하면 자동 롤백이 이루어집니다.
  • 플러그인은 저장소 관리도 자동으로 처리합니다.

__CAPGO_KEEP_1__

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

업데이트 지연

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

// 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: 앱이 백그라운드에 이동할 때 설치
  • date: 특정 날짜/시간 이후에 설치
  • nativeVersion: 다음 네이티브 업데이트 후 설치하세요
  • kill: 앱이 종료된 후 설치하세요

This is useful for:

  • 업데이트를 평소에 사용하지 않는 시간에 스케줄링하는 것
  • 사용자 활동과 업데이트를 동기화하는 것
  • smooth한 업데이트 kinh험을 보장하는 것
  • 중요한 작업 중에 중단되는 것을 방지하는 것

업데이트 상태

자동화된 프로세스 중, 배포물은 다음 상태를 거칩니다:

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

스토어 규정 준수

애플 앱 스토어 ✅

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

“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은 애플리케이션에 다운로드할 수 있지만, 다음 조건을 충족해야 합니다. (a) 애플리케이션의 주 목적을 변경하지 않아야 하며, (b) 다른 __CAPGO_KEEP_2__ 또는 애플리케이션을 위한 스토어 또는 스토어 프론트를 생성하지 않아야 하며, (c) OS의 서명, 샌드박스, 또는 보안 기능을 우회하지 않아야 합니다.

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

실시간 업데이트은 Google Play 정책을 준수합니다. 장치 및 네트워크 방지 정책은 다음과 같이 명시하고 있습니다.

“이 제한은 가상 머신이나 인터프리터에서 실행되는 code에 적용되지 않습니다. 이들 중 하나가 Android API에 대한 간접 접근을 제공할 경우에만 그렇습니다. 예를 들어, 웹뷰나 브라우저에서 JavaScript를 사용하는 경우입니다.”

Capgo은 웹뷰 콘텐츠만 업데이트하므로 이러한 허용된 지침에 따라 적용됩니다.

최선의 방법

  1. 구간 배포: 업데이트 순차적으로 배포
  2. 버전 관리: 배포된 모든 버전 추적
  3. 롤백 지원: 문제 발생 시 빠른 복구
  4. 델타 업데이트: 변경된 파일만 다운로드

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

__CAPGO_KEEP_0__에适합한 경우

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

적합하지 않은 경우

  • code의 네이티브 변경
  • 주 버전 업데이트
  • 네이티브 변경이 필요한 보안 패치

Capgo의 라이브 업데이트가 어떻게 작동하는지에서 계속하세요

__CAPGO_KEEP_0__을 사용하고 있다면 Capgo의 실시간 업데이트 방법 __CAPGO_KEEP_0__과 연결하여 Capgo 플러그인 디렉토리 Capgo 플러그인 디렉토리 내의 제품 워크플로우에 대해 Capacitor 플러그인에 의해 Capgo Capacitor 플러그인에 의해 Capgo의 구현 세부 사항에 대해 플러그인 추가 또는 업데이트 플러그인 추가 또는 업데이트의 구현 세부 사항에 대해 아이오닉 엔터프라이즈 플러그인 대안 아이오닉 엔터프라이즈 플러그인 대안의 제품 워크플로우에 대해 Capgo 네이티브 빌드 Capgo 네이티브 빌드의 제품 워크플로우에 대해

Capacitor 앱의 Live 업데이트

웹-layer 버그가 실시간으로 활성화되면, 앱 스토어 승인까지 며칠 기다리지 않고 Capgo를 통해 패치를 배포하세요. 사용자는 배경에서 업데이트를 받으면서 네이티브 변경 사항은 일반적인 검토 경로에 남아 있습니다.

시작하기

블로그에서 최신 소식

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