오늘은 Firebase의 Cloud서비스인 remote config에 대해 알아보겠습니다.
Remote Config??
Remote Config란 앱을 재배포 하지 않고도 앱 내의 구성요소들을 원격으로 변경할 수 있게 해주는 Firebase의 서비스 입니다.
이러한 Remote Config를 사용하면 재배포 없이 앱 내의 구성요소를 자유자재로 바꿀 수 있기 때문에 여러가지 상황에 유연하게 대응 할 수 있습니다.
이제 Remote Config를 연동해볼까요??
Remote Config연동하기
프로젝트가 Firebase에 연동되지 않았다면 먼저 연동을 진행하도록 합시다! Firebase를 내 프로젝트와 연동하기
0. Firebase Console에서 Remote Config 구성 추가
먼저 연동이 완료된 Firebase 프로젝트를 열어줍니다, 이후 왼쪽 사이드바의 출시 및 모니터링에서 Remote Config를 클릭합니다.
이후 나오는 대시보드 페이지에서 구성 만들기 버튼을 클릭해줍니다.
각 인풋 칸에 자신이 원하는 값을 채워 구성을 만들어주시면 됩니다.
1. Remote Config 라이브러리 추가하기
Remote Config 사용에 필요한 라이브러리들을 gradle에 추가합니다.
dependencies {
// Import the BoM for the Firebase platform
implementation(platform("com.google.firebase:firebase-bom:32.7.1"))
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation("com.google.firebase:firebase-config")
}
+ 각 라이브러리 버전을 명시하여 사용해도 되지만 Firebase Bom을 사용하면 Firebase 라이브러리들간의 호환성을 지키지 간편하게 때문에 사용해주었습니다.
2. RemoteConfigWrapper 클래스 생성
private val remoteConfig = Firebase.remoteConfig
가장먼저 Firebase의 Remote Config객체를 가져와 줍니다.
/* case 1 : map */
remoteConfig.setDefaultsAsync(
mapOf(
"key" to "value",
"key" to "value"
)
)
/* case 2 : XML File */
remoteConfig.setDefaultsAsync(XML 파일)
이후에는 가져올 매개변수에 대한 기본값을 설정할 수 있는데, 간단하게 map을 사용할수도 있고 아니면 XML파일로 데이터를 작성하여 사용할 수도 있습니다.
XML 파일같은 경우에는 아래 코드와 같은 포맷으로 작성하여 사용하시면 됩니다.
<?xml version="1.0" encoding="utf-8"?>
<defaultsMap>
<entry>
<key>key</key>
<value>value</value>
</entry>
<entry>
<key>key</key>
<value>value</value>
</entry>
</defaultsMap>
3. 원격에서 데이터 가져오기
Firebase 콘솔, 내 프로젝트에서 모두 세팅을 끝냈다면 이제 데이터를 불러올 차례입니다.
remoteConfig.fetchAndActivate().addOnCompleteListener { task ->
if (task.isSuccessful) {
val updated = task.result
Log.d("RemoteConfig", "Config params updated: $updated")
} else {
Log.d("RemoteConfig", "Failed")
}
}
Remote Config를 가져올 때에는 fetch와 active 두가지 함수를 사용합니다, fetch는 값을 불러오는 역할을 active는 값을 활성화 시키는 역할을 합니다. 만약 이 두 과정을 한번에 진행하고 싶다면 fetchAndActive함수를 사용할 수 있습니다.
해당 함수들에는 리스너를 추가하여 성공, 실패 여부를 판단할 수 있습니다.
이렇게 값을 활성화 시켰다면, 값을 꺼내와야 합니다. 값을 꺼내올 때는
remoteConfig.get자료형("key")
위 코드처럼 get[자료형] 함수를 통해 꺼내, 사용할 수 있습니다.
Remote Config 제한 정책
콘솔에서 값을 바꿨는데 반영이 안돼요!!
제가 Remote Config를 개발하고 테스트를 하던 도중에 firebase콘솔에서 값을 변경해도 실제 앱에서는 바뀌지 않는 이슈가 있었습니다. 해당 이슈와 관련하여 좀더 찾아보니 Firebase Remote Config의 제한 정책이 있더라구요, 해당 정책은 Firebase에서는 값을 가져오는 요청에 제한을 두는 정책이였습니다.
그럼 테스트 하려면 몇시간씩 기다려야하는건가요??
그건 아닙니다! Firebase에서도 개발단계에서 테스트를 위해 minimumFetchIntervalInSeconds라는 속성을 만들어 놓았습니다. 이 속성은 요청의 제한시간을 조절해줄 수 있는 속성으로 기본값으로는 12시간이 설정되어있습니다.
따라서 개발단계에서 해당 속성을 설정해주지 않으면 아무리 fetch를 해도 12시간동안은 전에 캐싱되어있던 예전의 값을 가져옵니다.
private val configSettings = remoteConfigSettings {
minimumFetchIntervalInSeconds = 3600 // 단위: 초
}
remoteConfig.setConfigSettingsAsync(configSettings) // 세팅 적용
속성 설정은 위처럼 코드를 작성 한 후 setConfigSettingAsync함수를 호출하여 세팅을 적용해주시면 됩니다.
한가지 주의해야 할 점이 있는데, 해당 세팅코드를 프로덕션에 배포할때는 신중하게 사용해야 합니다. 사용자가 100만, 500만씩 되는 앱에서 요청의 제한시간이 짧게 설정되어있어 많은 양의 요청을 보내게 되면, 할달량에 도달하여 firebase측에서 Remote Config의 사용을 중지할 수 있기 때문입니다.
따라서 위 속성의 시간을 설정할때에는 요구사항과 앱의 여러 환경들을 잘 고려하여 사용해야합니다.
마무리
오늘은 Firebase의 Remote Config에 대해 알아보았습니다, 잘못되었거나 궁금한점이 있으시면 댓글로 남겨주시면 감사하겠습니다!
reference
https://firebase.google.com/docs/remote-config/get-started?hl=ko&platform=android
'Android' 카테고리의 다른 글
[Android/Basic] 3. Activity의 State Changes 알아보기 (0) | 2024.08.21 |
---|---|
[Android/Basic] 2. Activity의 LifeCycle 알아보기 (3) | 2024.07.22 |
[Android/Basic] 1. Android 4대 컴포넌트 알아보기 (1) | 2024.07.22 |
[Android/Thread] 2. Thread간의 통신과정 알아보기 (1) | 2024.06.05 |
[Android/Thread] 1. Android의 Thread환경 (0) | 2024.05.16 |