Firebase Remote Config 란?

Harry The Great
해리의 유목코딩
4 min readDec 10, 2018

파이어베이스를 쓴다면 Remote Config는 정말 빠질 수 없는기능입니다. 정말 여러모로 활용할곳이 많습니다. 앱을 강제로 업데이트 시켜주어야할때 특정 이벤트기간에만 보여주어야하는 내용이 있을때 그리고 특히 A/B테스트를 할때 아주 유용하게 쓸 수 있습니다.

간단한 튜토리얼

firebase 인스턴스를 가져온 후

remoteConfig.getString(MIN_VERSION_CODE)

간단히 getString을 통해 가져올 수 있습니다. 이때 값이 없다면 빈스트링값을 리턴하게되며 파이어베이스 콘솔에서는

이와같이 JSON 형태의 데이터도 쉽게 설정할 수 있도록 도와주고있습니다.

디폴트 값이 필요하다면?

FirebaseRemoteConfig.getInstance().apply { setDefaults(R.xml.remote_config_defaults)

위와같이 setDefaults로 앱네 xml파일에서 데이터를 가져올 수 있습니다. 하지만 위에서 언급한 내용대로만 설정을하면 최신데이터를 가져오지 않는데

firebaseRemoteConfig.fetch()

fetch를 사용하여 데이터를 업데이트 시켜주어야합니다. 기본값은 12시간이며 fetch(3600)으로 설정하면 3600초 즉 1시간의 캐싱타임을 가집니다. 이렇게 fetch가 되어도 새로 받은 데이터값이 나타나지는 않습니다.

remoteConfig.fetch(3600).addOnCompleteListener {
if (it.isSuccessful) remoteConfig.activateFetched()
}

ActivateFetched가 실행된 다음에아 값이 적용됩니다.

그럼 fetch값을 무조건 0 초로 해야 좋은거 아니에요?

네 맞습니다.. 하지만 0초로 해도 생각보다 0초의 성능으로 refresh되지는 않으며 이렇게 자주 호출할경우 때에따라(잘나가는 앱이라면…) Remote Config 사용이 제한됩니다. 그 이유는 Firebase 홈페이지에도 당당하게 적어두었지만 너무많은 네트워크 호출로인해 Firebase 서버에 과부하가 걸리는것을 막기위함이며 지금처럼 계속 무료로 Firebase Remote Config를 유지하기 위함입니다. (무료니까 당연히 이해이해..)

도식화를 해보면 서버에서 받은값이 있다면 그 값을 보내줍니다. 하지만 없다면 디폴트로 설정한 값을 찾고 그 값도 없다면 빈값을 보내줍니다.

그럼 Fetch는 언제하는게 좋을까?

파이어베이스에서는 크게 4가지 방법을 제안하고있습니다.

1. 앱 실행 후 activatFetched적용

앱이 실행된 후 Fetch와 activateFetched를 통해 데이터를 업데이트합니다. 하지만 앱 사용중에 원격구성값이 바뀐다면 원치 않은 혼돈이나 에러를 발생시킬 수 있습니다.

2. 로딩화면에서 적용

로딩화면에서 fetch를 실행한 후 activateFetched로 데이터를 바꾸어주는 방법입니다. 저도 처음 앱을 구성할땐 Splash 화면을 만들어서 사용을 했지만 분명 좋은방법은 아니었습니다. 가장 큰 이유는 네트워크 환경에따라 Fetch를 안하는것보다 반드시 더 많은 딜레이 타임이 생기고 UX에 좋지 않은 영향을 끼치기 때문입니다.

3. 다음 실행때 적용하기

앱을 실행시키자마자 activateFetche를 실행합니다. 이 경우 fetch를 시킨 값이 있다면 최신 데이터를 보여줄것이고 그렇지 않다면 이전에 캐싱된 데이터 혹은 기본값을 보여줍니다. 그리고 앱이 실행된 후 fetch를 실행합니다. 이 경우 앱을 다시시작 할때까지는 새로운 데이터를 보여주지 않습니다.

4. FCM을 이용

아무래도 가장 좋은 방법이 아닐까싶습니다. 물론 모든 디바이스에 변경값을 바꾸어줄 수 있는건 아니지만 대부분의 디바이스에 변경값을 적용할 수 있습니다. Data Notification을 통해 데이터를 변경합니다. 자세한 내용은 제가 이전에 작성한 글에서 확인하실 수 있습니다.

마치며

다른 많은 Firebase 기능들과 마찬가지로 Analytics, A/B Testing과 같은 도구와 함께쓸수록 더 큰 시너지를 발휘하는 기능 같습니다. AWS SDK를 쓰다가 Firebase SDK나 Document를 보면 확실히 앱에서 만큼은 Google Cloud가 독보적임을 다시한번 느낄 수 있었습니다.

--

--

Harry The Great
해리의 유목코딩

Android & IOS Developer 😀 미디움 이외에 스니펫이나 디버그노트로 활용하는 https://www.harrymikoshi.com/ 블로그도 운영하고있습니다.