Appearance
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.gradle
의versionName
- iOS:
Info.plist
의CFBundleShortVersionString
- 이는 최초 설치된 빌드 버전 (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 업데이트 도입으로 사용자 편의성 증대 및 유지보수 비용 절감
✅ 버그 수정 및 보안 패치에 신속한 대응 가능
✅ 앱스토어 심사 없이 빠르게 기능 업데이트 제공 가능