티스토리 뷰

Android

Mobile App - Remote Config

구성민 2023. 1. 12. 11:36
반응형

본 문서에서는 빌드-배포 시스템을 따르는 안드로이드 앱을 보다 유연하게 앱을 Dynamic하게 구성할 수 있는 Remote Config 이 필요한 배경과 기능 적용 사례를 공유합니다.

1. Issue Background

1-1. 모바일 앱은 배포 시스템이 너무 무거워요

Android, iOS 앱을 기술적인 오류 또는 사람의 실수, 보안 문제를 빌드 및 QA 과정을 무사히 거치거나 배포이전에 문제를 찾아 수정한다면 Best Case 이지만, 앱을 출시한 이후에 문제를 발견하거나 예상치 못한 유저들의 액션으로 인하여 문제가 발생하는 경우 등 앱을 출시한 이후에 발견되는 문제는 정말 다양합니다. 이러한 문제를 바로 잡으려고 하거나 중요한 정보들의 변경 사항들은 모바일 앱을 구성하는 코드를 수정하여 새로운 버전의 앱을 빌드하고 배포해야 하는데 코드 수정부터 최종 배포까지는 아래 그림과 같이 많은 단계를 거쳐야합니다.

 
 
General Mobile App Deploy Process

안드로이드의 경우에는 개발 → 코드리뷰 → CI 테스트 → QA 테스트 → 빌드 → 스토어 업로드 후 1시간 내외의 승인을 기다려야하고 IOS의 경우에는 스토어 심사과정을 추가로 거쳐야 하기 때문에 출시까지 2-4일 정도 더 소요되기도 합니다.

앱은 클라이언트 코드에의한 다양한 이슈에 대해서 실시간 대응을 하기에는 상당히 무거운 시스템을 지니고 있습니다. 그리고 새로운 버전의 앱을 출시 하였어도 사용자가 새로운 버전의 앱으로 업데이트를 할때까지 기다려야하는 불확실한 구조를 갖고 있습니다.

이슈 대응 혹은 기능상의 필수 업데이트를 이유로 강제 업데이트를 하는 방법이 있는데, 이슈 대응을 위한 잦은 강제 업데이트는 사용자에게 불편한 경험을 제공하게 됩니다.

1-2. 다양한 프로젝트들의 테스트 환경을 유연하게 설정하고 싶어요

모바일 앱을 개발하다보면 개발 단계에 따라 일반적으로 dev, staging, release 의 빌드 프로파일로 나눌 수 있고, 새로운 기능을 개발하는 과정에 따라서 API를 호출하는 Base 주소를 변경하여 사용해야할 때가 있습니다.

개발중인 프로젝트의 테스트를 위해 빌드 버전 및 API 주소 변경이 발생할 때마다 요구되는 프로젝트 환경에 맞춰서 앱을 재빌드하고 배포하는 과정을 반복하게 되는데, 이 과정은 개발자의 업무 생산성을 저해하는 요소 중 하나입니다.

 

2. Remote Config

위와 같이 모바일 앱을 개발할 때에 정적으로 빌드되어 배포되는 환경이라는 특성에서 발생하는 이슈들을 보완하기 위해 웹 개발 형태로 코드의 실행 또는 API 주소와 같은 앱 구성요소를 런타임시에 원격으로 구성하여 제어하는 방법을 Remote Config 라고 부릅니다.

Remote Config는 일반적으로 앱 실행시 Backend Server에서 API 호출을 통해 Configuration 값을 내려줌으로써 이를 통제하며, Google Firebase 및 AWS AppConfig 에서 쉽게 적용할 수 있는 Remote Config 기능을 제공합니다. 앱 실행시 매번 Config Data를 서버에 요청하는 것은 cost 낭비일 수 있기 때문에, 앱내에 Remote Config Data 를 캐싱하여 사용하다가 일정 시간이 지났을 때에 업데이트를 해주는 방법을 사용하기도 합니다.

 
 

3. Remote Config 로 앱 구성 및 제어하기

3-1. 업데이트 관리 ( Service Update Management )

hard update popup
 

모바일 앱을 업데이트 할 때에는 업데이트 내용에 따라서 soft update(비필수 업데이트), hard update(필수 업데이트)로 나뉩니다. soft update 는 업데이트를 하지 않아도 서비스를 이용하는데에 유저와 서비스 제공사입장에서 문제가 없는 업데이트를 의미합니다. hard update는 심각한 에러 또는 서비스를 이용하는데에 있어서 필수로 해야하는 업데이트를 의미합니다. 이 때, Remote Config를 활용한다면 soft, hard 업데이트 안내를 하는데 있어서 유용하게 활용됩니다.

 

앱을 실행하여 아래와 같이 앱 실행 가능여부를 Splash 또는 login 시 Remote Config 를 통해 최소 실행 가능 빌드 버전을 확인하여 필수 업데이트에 대한 고지를 통해 유저에게 업데이트를 안내할 수 있습니다.

Remote Config Response - Json Type example

 
{
  "init" : {
    "required_app_build_version_at_least" : "1.12.4",
    "force_to_update_message" : "앱을 실행하기에 버전이 낮습니다. 업데이트 해주세요.",
  }
}

Check Forece to Update - Sudo code example

checkForceToUpdate(String requiredVersion, String buildVersion){
  if( requiredVersion > buildVersion)
    foreceToUpdate();
}

 

3-2. 기능 사용 제어 ( Function Access Toggle )

서비스 기능 오픈 안내
모바일 앱은 정적 빌드되어 배포되는 시스템이기 때문에 하드코딩되는 리소스 또는 코드에 대해서 주의를 기울여야합니다. 예를 들어, 고객센터 전화번호가 하드코딩하여 배포 하였을 경우 고객센터 연락처가 바뀌었다면 유저들이 새로 업데이트를 할 때까지 운영이슈를 겪게 될 겁니다. 이렇듯, Remote Config를 사용하면 가변적인 value에 대하여 즉각적인 수정이 가능해지는 것 뿐만 아니라, 모바일 앱 내에 탑재된 기능을 점진적으로 오픈하거나 기능을 비활성화 시킬 수도 있습니다. 기능 플래그를 구현하여 새 기능을 점진적으로 출시하는 방법으로 광범위한 출시 전에 안정성과 성능을 확인 할 수 있습니다. 만일 새 기능이 기대에 미치지 못하거나 비정상 종료가 발생하는 경우에는 신속하게 롤백이 가능하며 이를 통해 모든 사용자에게 새 기능이 오픈 될 때에는 이전보다 고품질의 기능만을 출시할 수 있는 보호장치가 되어줄 것입니다.
remote config 를 이용한 고객센터 연락처 수정
 

 

3-3. 사용자 맞춤 설정 ( User Customization )

 

Remote Config를 이용한다면 사용자 맞춤 설정의 분기처리를 더욱 유연하게 구성할 수 있습니다. 프로필, 선호도, 과거 행동, 향후 예측 행동을 기반으로 다양한 사용자 세그먼트에 맞게 앱을 맞춤설정 할 수 있습니다. 또는 애널리틱스로 앱을 제거할 것으로 예상되는 사용자에게 보상을 주어 지속적인 참여를 유도할 수도 있습니다.

3-4. 아이디어 실험 테스트 ( A/B Test )

Remote Config는 A/B 테스팅을 원활하게 작동할 수 있는 솔루션입니다. 실험을 실행하여 아이디어를 테스트하고 주요 측정항목에 미치는 영향을 확인할 수 있습니다. 새 결제 화면이 실제로 더 많은 구매를 유도하고 있는지 확인할 수 있고, 새로운 광고 형식을 사용해 보고 수익이 증가하는지 확인할 수 있는 등. A/B 테스팅과 함께 원격 구성을 사용하면 목표 달성에 도움이 되는 변경사항이 무엇인지 파악하기 쉬워집니다.

4. 마무리..

Remote Config 기능은 특별한 기술은 아니지만 이 기능을 적용함으로써 좀 더 생산성있는 업무를 할 수 있고 다양한 상황에 유연하게 대응 할 수 있는 무기가 되었다고 생각됩니다.

 

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31