Firebase remote cover

Firebase Remote Config로 배포없이 앱 운영하기

안드로이드 개발자들을 위한 수준 있는 독립 컨퍼런스인 Droid Knights에서 “Firebase Remote Config로 배포없이 앱 운영하기”이라는 주제로 강연된 세션입니다.


소개

드라마앤컴퍼니라는 회사에서 리멤버라는 비즈니스 네트워크 서비스를 만들고 있는 안드로이드 개발자 이승민입니다. Firebase의 많은 기능 중에 Remote Config라는 기능에 대해 말씀드리려고 합니다. Remote Config를 어떻게 사용하는지, 어떻게 응용할 수 있는지, 그리고 리멤버에서는 어떤 상황에서 실제로 적용 중인지 그리고 확장해서 응용할 수 있는지 사용 경험을 바탕으로 말씀드리겠습니다.

운영 이슈

앱을 개발해서 서비스하다 보면 운영 이슈가 발생하게 됩니다. 운영 이슈란 사용자의 요구를 최대한 실시간으로 대응해서 불편함을 줄이고 만족도를 늘리는 것인데요. 즉 사용자의 피드백에 따라서 대응을 하는 것으로 좁게 보면 CS, 공지사항, 넓게 보면 장애 모니터링 및 발견 시 대응과 사용자 피드백 수집 후 서비스 개선이라고 할 수 있습니다. 운영은 수집, 분석, 결정, 개발 모든 과정입니다. 이 중 운영팀이 가장 중요하게 생각하는 것은 최대한 실시간에 가깝게 대응하는 것입니다. 하지만 개발, 리뷰, CI 테스트, QA 테스트, 스토어 업로드, 대기 등등 많은 단계의 작업을 실시간으로 대응하기에는 배포가 무겁습니다. 따라서 운영팀은 개발자를 통하거나 코드를 변경하거나 추가로 배포하지 않고 불만을 겪고 있는 특정 사용자만 서비스의 동작을 바꿀 수 있는 것을 꿈꿉니다. 이의 해결책이 될 수 있는 것이 Firebase Remote Config입니다.

Firebase Remote Config

공식문서에 따르면 Firebase Remote Config는 사용자가 앱 업데이트를 다운로드할 필요 없이 앱의 동작과 모양을 변경할 수 있는 클라우드 서비스입니다.

이런 개발 뉴스를 더 만나보세요

사용 시나리오

사용 시나리오는 다음과 같습니다.

  1. Firebase에 앱의 동작을 제어하는 값을 정의한다.
  2. 앱에서 Firebase에 정의된 값을 가져와 적용한다.
  3. 배포없이 업데이트된 새로운 동작을 확인한다.

먼저 파이어 베이스에 앱 동작을 제어하는 어떤 값을 정의해 놓습니다. 그리고 앱에서 그 값을 개발자가 정한 타이밍에 가져옵니다. 그러면 그 값에 따라서 앱의 동작이 변해 있습니다.

이런 마법 같은 일이 완전히 자동으로 이루어지지는 않고, 개발자가 사전에 어떤 값에 따라 어떻게 동작이 바뀌는지 정의해놓아야 합니다. 한번 이렇게 정의해놓으면, 운영팀이 나중에 언제든 그때그때 니즈에 따라 정의해놓은 기능을 변경할 수 있습니다.

실습

다음과 같은 순서로 실습을 진행해보겠습니다.

  1. Firebase 설치
  2. Remote Config 설치
  3. 구글 플레이 서비스 설치 체크
  4. Remote Config Admin 살펴보기
  5. Remote Config 초기화
  6. 값 받아오기
  7. xml로 로컬 기본 값 설정하기
  8. 변경된 값 실시간으로 받아오기
  9. 사용자 조건에 따라 값 가져오기
  10. Test, Product 모드 구분하기
  11. 응용하여 받아오기
  12. 예외상황 처리하기

Firebase 설치

project gradle의 디펜던시에 한 줄만 추가하면 설치할 수 있습니다.

buildscript {
  dependencies {
    classpath 'com.google.com.gms:google-services:3.0.0'
  }
}

또한, app module gradle에는 다음 두 줄을 추가합니다. 맨 아랫줄은 꼭 아래에 추가해주세요.

dependencies {
  complie: 'com.google.firebase:firebase-core:10.0.1'
}

apply plugin: 'com.google.gms.google-services'

다음으로 firebase 홈페이지에서 google-services.json을 다운받아서 프로젝트 레벨에 넣습니다.

Remote Config 설치

다음 한 줄을 app gradle에 추가하면 콘솔에 연결됩니다.

compile 'com.google.firebase:firebase-config:10.0.1'

구글 플레이 서비스 설치 체크

firebase-remote-check

Firebase는 구글 플레이 서비스에 종속적이기 때문에 status를 확인해봅니다.

시연

다음 단계부터는 실제 코드를 보면서 알아보겠습니다. 영상을 확인해주세요.

  • Remote Config Admin 살펴보기
  • Remote Config 초기화
  • 값 받아오기
  • xml로 로컬 기본값 설정하기
  • 변경된 값 실시간으로 받아오기
  • 사용자 조건에 따라 값 가져오기
  • Test, Product 모드 구분하기
  • 응용하여 받아오기

예외상황 처리하기

마지막으로 Application을 extends해서 사용하는 경우 ‘java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn’t exist.’라는 에러가 날 수 있습니다. 멀티 프로세스 때문에 파이어베이스 인스턴스가 꼬이는 문제인데, 가장 좋은 해결방법은 Application을 상속하지 않는 것이고, 만약 Multidex 등의 이유로 상속해야만 한다면, Application onCreate()에 다음과 같은 코드를 추가해주면 깔끔하게 해결됩니다.


public static void initialize(Context context) {
  if (!FirebaseApp.getApps(context).isEmpty()) return;
  FirebaseApp.initializeApp(context, FirebaseOptions, fromResource(context));
}

리멤버 사용사례

firebase-remote-case1

리멤버 앱을 처음 틀면 왼쪽와 같은 공지사항 화면이 나오며, 한번 나왔던 공지사항은 다시 나오지 않습니다. 그 상태에서 어떤 값을 하나라도 바꾸면, 바뀐 공지사항이 다시 오직 한 번 보입니다. 중요한 팝업을 단 한 번 노출할 때 사용합니다. 또한, 오른쪽처럼 추천유도 메세지에도 사용합니다. 저희는 다른 사람의 리뷰를 노출하는 방식으로 추천을 유도하고 있는데, 이런 방식이 단순한 유도 문구보다 단기적으로 효과는 좋지만, 계속 보면 지루하므로 Remote Config로 일주일에 한 번씩 변경하고 있습니다.

firebase-remote-case2

또한 촬영 후 추천을 유도하는 이미지도 마찬가지로 주기적으로 변경하고 있습니다. 명함을 추가하는 가이드 이미지도 Remote Config로 주고 있습니다. 리멤버의 장점은 사람이 해주는 정확한 타이핑이지만, 그것은 곧 입력 시간의 단점으로 비칩니다. 입력 속도는 가장 많은 CS 중에 하나이기도 합니다. 그래서 다양한 문구로 최대한 친절히 안내하기 위해 Remote Config로 주기적으로 변경하면서 사용자에게 입력대기시간을 안내하고 있습니다.

결론

종합적으로 생각해보면 쉽게 어드민까지 구현이 된다는 점입니다. 이런 실시간 운영변수 변경은 사실 자체구축이 가능한 영역이며 실제로 게임 같은 경우 이런 시스템이 엄청 중요하므로 Remote Config보다 더 많은 기능으로 자체 시스템들이 있을 것입니다. 하지만 바쁜 스타트업에게 있어 비개발자가 접근하기 쉬운 어드민까지 자동으로 구현해준다는건 매우 편리한 기능입니다. 게다가 원하는 사용자를 별도의 구현없이 선택할 수 있는 점은 매우 장점입니다. 따라서 점진적으로 Remote Config로 옮겨가고 있습니다.

큰 단점은 없지만, 굳이 꼽으라면 Test, Production의 경계가 모호한 부분이 아쉬웠습니다.

많은 Firebase 기능 중 Remote Config가 가장 중요하면서도 사용하기 쉬운 가성비 최고의 기능이 아닌가 생각합니다. Remote Config를 사용하면서 운영팀의 걱정을 줄여주세요.

발표 슬라이드는 아래에서, 코드는 GitHub에서 볼 수 있습니다.


본 영상과 글은 Droid Knights의 비디오 스폰서인 Realm에서 제공합니다. 모바일 개발자가 더 나은 앱을 더 빠르게 만들도록 돕는 Realm 모바일 데이터베이스Realm 모바일 플랫폼을 통해 핵심 로직에 집중하고 개발 효율을 높여 보세요! 공식 문서에서 단 몇 분 만에 시작할 수 있습니다. 또한 Realm 홈페이지에서는 모바일 개발자를 위한 다양한 최신 기술 뉴스와 튜토리얼을 제공하고 있으니 즐겨찾기하고 자주 들러 주세요!

다음: Realm Java의 새로운 기능을 만나 보세요!

General link arrow white

컨텐츠에 대하여

2017년 3월에 진행한 Droid Knights 행사의 강연입니다. 영상 녹화와 제작, 정리 글은 Realm에서 제공하며, 주최 측의 허가 하에 이곳에서 공유합니다.

이승민

드라마앤컴퍼니에서 리멤버 명함관리 서비스의 안드로이드 앱을 개발하는 이승민입니다.

4 design patterns for a RESTless mobile integration »

close