Skip to content

Over-The-Air (OTA) Update Implementation

OTA 업데이트 (📡 Over-The-Air Update)

1. 개요 📝

🔹 사용 이유

보카트레인 앱은 하이브리드로 만들어졌으며, 네이티브의 의존성이 높지 않습니다. (스피킹, 파일 권한 등 네이티브 종속 기능보다는 웹 기능 중심)

웹에서 발생한 버그 발생으로 인하여 긴급 패치가 필요할 때에 기존 방식으로 한다면 시간이 너무 오래걸리기 때문에 해당 방식을 사용하려 합니다.

🔹 OTA(Over-The-Air)란?

OTA(Over The Air)는 네트워크 통신을 통해 소프트웨어나 펌웨어를 원격으로 업데이트하는 기술입니다.

사용자가 직접 물리적으로 연결하거나 수동으로 설치하지 않아도 자동으로 최신 버전을 받을 수 있는 방식입니다.

예를 들어, 아래와 같은 솔루션들이 있습니다.

  • 자동차 펌웨어 업데이트
  • code-push : deprecated
  • Expo

🔹 주요 특징

원격 업데이트: 사용자가 별도의 물리적 연결 없이 무선으로 업데이트 가능

실시간 배포: 새로운 기능, 버그 수정 및 보안 패치를 즉시 배포 가능

효율적 관리: 중앙에서 소프트웨어 버전 관리 및 배포 가능

🔹 OTA 방식의 장점

🚀 사용자 편의성: 간편한 업데이트 프로세스로 UX 개선

💰 비용 절감: 물리적 설치나 서비스 방문 없이 유지보수 비용 절감

신속한 대응: 버그 수정이나 보안 패치의 빠른 배포 가능

😊 스토어 가이드라인 충족

OTA 방식은 모바일 앱, IoT 기기, 스마트 자동차 등 다양한 산업에서 활용되며, 현대 소프트웨어 배포의 핵심 기술로 자리 잡고 있습니다.

⚠ 최소 요구사항

  • IOS: 14.0
  • Android: 제약없음

2. 시스템 아키텍처 🏗

OTA 업데이트를 위해 다음과 같은 시스템이 구성되었습니다:

🗄 1) Storage (S3)

  • 버전별 번들(웹 앱) 압축 파일을 저장 및 관리
  • 클라이언트는 해당 파일을 다운로드하여 업데이트 수행

🌐 2) API Server (vocahome)

  • 최신 번들 버전 정보를 제공하는 API 서버
  • 예제 응답(JSON):
json
{
  "bundleId": "0.0.36",
  "version": "0.0.36",
  "url": "https://kr.object.ncloudstorage.com/cdn-irontrain/vocatrain/v2-app/0.0.36.zip"
}
  • 클라이언트는 해당 응답을 기반으로 최신 번들 파일을 다운로드

📱 3) Client Application (vocatrain-client)

  • @capawesome/capacitor-live-update 라이브러리
    • 서버에서 새로운 번들 파일 다운로드
    • 다운받은 번들 파일 unzip, reload
    • origin bundle과 비교
  • @capacitor/app 앱 버전 정보 조회 (build.gradle, Info.plist 참조)
    • 앱 original version 정보 조회

3. 업데이트 프로세스 🔄

Self-hosting 방식으로 OTA 업데이트를 진행하는 전체 흐름은 다음과 같습니다:

0️⃣ 앱 빌드

  • 웹 버전 설정 vite.config.mts
  • 업로드될 앱을 빌드
  • 빌드된 zip 파일 s3 업로드
  • server의 버전 정보 수정
    • To Do : DB 연동 / Remote Config 활용

1️⃣ 앱의 오리지널 빌드 버전 확인

  • Android: app/build.gradleversionName
  • iOS: Info.plistCFBundleShortVersionString
  • 이는 최초 설치된 빌드 버전 (Original)

2️⃣ 로그인 시 최신 버전 정보 요청

  • 서버 API 호출하여 최신 번들 버전과 다운로드 URL 확인

3️⃣ 현재 앱 버전 확인

  • 오리지널 빌드 버전 확인
  • capawesome-live-update에서 리로드된 번들 버전이 있는지 확인
  • 오리지널 빌드 버전과 리로드 버전 비교하여 최신 버전 설정

4️⃣ 최신 버전과 현재 버전 비교

  • 서버의 최신 번들이 현재 앱보다 최신인지 판별

5️⃣ 번들 다운로드 및 압축 해제

  • 최신 버전이 존재하면, 제공된 URL에서 번들(zip) 다운로드 (약 1.6MB)
  • capawesome-live-update에서 다운로드된 번들 압축 해제

6️⃣ 새로운 번들 적용

  • capawesome-live-update에서 압축 해제된 번들을 다음 실행 시 적용하도록 설정

7️⃣ 앱 재시작 후 최신 빌드 적용

  • 앱이 재시작되면 최신 번들 경로로 빌드 패스 변경
  • 새로운 버전으로 실행됨

4. 후속 조치 사항 🛠

리로드 시점 최적화

  • 사용자 경험을 고려한 최적의 리로드 방식 연구
  • 불필요한 앱 재시작 방지

5. 결론 및 기대 효과 🎯

✅ OTA 업데이트 도입으로 사용자 편의성 증대 및 유지보수 비용 절감

✅ 버그 수정 및 보안 패치에 신속한 대응 가능

앱스토어 심사 없이 빠르게 기능 업데이트 제공 가능

IronTrain Tech Blog