리모트 컨피그 앱 개발기
안녕하세요. 우아한형제들 배민앱개발팀에서 안드로이드 앱을 개발을 하고 있는 이민형입니다. 배달의민족 앱에서 앱의 다양한 설정 값들을 앱 배포없이 적용할 수 있는 리모트 컨피그 기능에 대해 공유하고 리모트 컨피그를 어떻게 사용하고 있는지에 대한 내용을 공유드리려 합니다.
모바일 앱은 실시간으로 이슈를 대응하기에는 배포가 너무 무거워요.
앱 내부의 사소한 맞춤법 오류, 잘못된 데이터 정보 노출 등 앱을 출시 한 후에야 발견되는 문제 등 정말 다양합니다. 이러한 문제들을 바로 잡으려거나 앱 서비스의 중요한 정보들의 변경 사항들은 해당 부분의 코드를 수정 또는 추가 후 새로운 버전의 앱을 빌드해서 배포를 해야 하는데 코드수정부터 출시까지 많은 단계를 거쳐야합니다.
저희 배달의민족 어플리케이션 배포 프로세스는 아래와 같은 절차로 진행됩니다.
안드로이드 경우에는 개발 > 코드리뷰 > CI 테스트 > QA 테스트 > 빌드 > 스토어에 업로드 후 30분 내외의 업데이트 기다려야 하고 IOS 경우에도 안드로이드 배포 프로세스와 같지만 스토어 심사 절차를 거쳐야 하기 때문에 출시까지 2일 정도 더 소요가 됩니다.
앱은 다양한 이슈에 대해서 실시간으로 대응하기에는 무리가 많이 따릅니다.
그리고 새로운 버전의 앱을 출시를 했어도 사용자들이 새로운 버전의 앱을 업데이트를 할때까지 기다려야만 합니다.
또한 모든 사용자들이 바로 업데이트를 하지 않기 때문에 업데이트가 되기 전까지는 잘못된 정보를 사용해야하는 문제가 발생 될 수 있습니다.
강제 업데이트를 하는 방법이 있는데 이 방법은 사용자에게 불편한 경험을 느끼게하는 단점이 있습니다.
그리고 배포마다 매번 강제 업데이트를 유도한다면 당연히 좋지 않는 피드백으로 이어질 수도 있으니 이 부분은 매우 조심스럽습니다.
그래서 앱 배포 없이 사용자가 올바른 서비스를 이용할 수 있도록 유연하게 대처할 수 있는 방법이 필요했습니다.
개발중인 다양한 프로젝트들의 테스트 환경을 맞추기가 쉽지 않아요.
배달의민족 앱의 각 페이지들의 정보는 API를 호출해서 데이터를 가져온 후 사용자에게 정보를 노출하게 되는데 해당 페이지 정보의 데이터 고도화 및 신규 기능으로 인하여 API 주소가 변경 되어야 할 경우가 있습니다.
그래서 개발중인 프로젝트 테스트를 위해 API 주소 변경에 대한 요청이 발생되는데 그럴때 마다 프로젝트 환경에 맞춰서 앱에서 API들을 재설정을 해서 배포하게 됩니다.
문제는 다수의 프로젝트에서 API 주소 변경 요청 건들이 온다면? 각각의 프로젝트를 위해 API 정보들을 재설정 후 빌드 배포하는 행위를 반복적으로 하게 될겁니다.
그래서 앱의 API 정보 변경이 필요하면 앱 빌드와 배포 없이 간단한 설정으로 API 정보 변경을 할 수 있도록 하여 개발자들의 업무 생산성이 나아지는 방법이 필요했습니다.
배달의민족 앱 리모트 컨피그 구조 및 기능
배달의민족 앱이 실행되면 앱은 Remote Config Server로 부터 앱의 설정 값들을 제공 받게 됩니다.
제공받은 Remote Config Data를 App Remote Cache 영역에 저장 / 업데이트 하게 되고 배달의민족 각 페이지의 정보들은 Remote Cache에 저장 된 설정 값들에 의해서 새로운 데이터로 로드하게 됩니다.
배달의민족 앱은 Remote Config Admin에서 데이터 수정 만으로 앱 배포없이 정보를 쉽게 업데이트 할 수 있게 되었습니다.
배달의민족 RemoteConfig Fetch하는 Data 구조는 아래와 같은 역할을 담당하고 있습니다.
모델 | 역할 |
---|---|
domain | 배달의민족 각 페이지의 API 정보 설정 |
feature | 배달의민족 기능에 대한 정보 설정 |
urgentNotice | 배달의민족 공지사항에 대한 정보 설정 |
serviceCenter | 배달의민족 고객센터 정보 설정 |
테스트로 간단하게 앱 정보를 변경해 볼께요.
Remote Config Admin에서 사용자에게 노출 할 공지사항 노출 여부와 내용, 그리고 ‘확인’ 버튼 선택 시 발생 될 이벤트에 대한 Action들을 정의할 수 있습니다.
저희 배달의민족 고객센터 정보들을 변경할 수 있습니다.
예를들어 고객센터 전화번호가 변경을 해야할 경우로 가정했을때, 앱에서 이 번호를 가지고 있었다면 고객센터 전화번호를 수정 후 배포하게 될 겁니다.
하지만 배포버전의 앱을 사용자가 업데이트 하지 않는다면 이전 고객센터 번호로 전화가 걸리는 불편한 상황을 겪게 됩니다.
뿐만 아니라 앱에서 하드코딩으로 서비스 정보를 가지고 있고 정보 변경 건이 앱 코드 수정과 배포 방식으로 이루어 진다면 앱 버전에 대한 대응책이 계속해서 필요하게 되고 운영이슈가 계속 발생하기 마련입니다.
배달의민족 앱은 Remote Config 적용으로 앱 버전과 상관없이 새로운 데이터로 변경될 수 있도록 하였습니다.
Remote Config Profile 설정으로 간단하게 앱 테스트 환경을 변경합니다.
Beta 빌드 버전에서만 제공되는 프로파일 변경 기능을 통해 원하는 테스트 환경을 선택하여 프로파일에 정의된 Remote Config Data를 재로드하게 됩니다.
Remote Config Profile 업데이트 기능을 통해서 코드 수정과 빌드 없이 다양한 환경을 테스트 해볼 수 있어서 개발자 또는 QA팀에서 배달의민족 앱 테스트를 진행하는데에 많은 도움을 주고 있습니다.
테스트를 진행하다 보면 내가 어떤 프로파일을 설정하고 앱을 사용하고 있는지 잊어버리는 경우에가 있기 때문에 친절하게(?) 배달의민족 앱 하단에 설정 된 프로파일 이름을 노출하고 있습니다. (실제로 제가 다른 환경의 프로파일을 설정하고 원인을 찾은 경험이…ㅠㅠ)
마무리하며..
리모트 컨피그 기능은 특별한 기술은 아니지만 이 기능을 적용함으로써 좀 더 생산성있는 업무를 할 수 있었고 다양한 상황에 유연하게 대응 할 수 있는 무기가 되었다고 생각됩니다.
사실 다른 서비스도 이와 비슷한 기능들을 구현하고 적용했을 것 입니다. 적용하는 방식과 방법은 다르지만 앱 운영이슈를 최대한 줄이는 것에 대한 목적은 같을 것 입니다.
파이어베이스에서 리모트컨피그 클라우드 서비스를 제공하고 있는 것도 마찬가지 목적입니다.
저희도 동일한 목적으로 배달의민족 리모트 컨피그 기능을 적용하였고 운영하면서 경험한 부분에 대해서 공유를 하면 좋지 않을까? 라는 생각으로 글을 올리게 되었습니다.
저는 앱 관점의 리모트 컨피그 기능에 대해서 공유드렸지만, 배민주문서버개발팀의 강홍구님께서 공유해 주셨던 리모트 컨피그 서버 구축기도 같이 보시면 배달의민족의 리모트 컨피그 기능에 대한 전반적인 내용에 대해서 이해하시는데 도움이 될 것 같습니다.
부족한 글을 읽어 주셔서 감사합니다.