Firebase Remote Config를 사용하면 앱의 동작과 모양을 유연하게 제어할 수 있습니다. 이를 통해 새 버전을 배포하거나 여러 앱 스토어 업데이트를 탐색하지 않고도 앱의 기능 출시 및 크로스 플랫폼 A/B 테스트와 같은 기능을 사용할 수 있습니다.
프로토타입을 제작하든, 성장하는 스타트업을 운영하든, 대규모 엔터프라이즈 애플리케이션을 관리하든 네트워크 가져오기 볼륨을 관리하는 것은 빠르고 응답성이 뛰어난 사용자 환경을 제공하는 데 중요합니다. 효율적인 구성 관리는 콜드 스타트 지연 시간을 줄이고, 클라이언트 데이터와 배터리 사용량을 절약하며, 불필요한 네트워크 오버헤드를 방지합니다. 또한 향후 사용자층이 빠르게 확대되고 사용량이 증가하는 경우 Remote Config 통합을 간소화하면 사용량이 효율적으로 유지됩니다.
앱이 매개변수를 가져오는 방식과 시점, 매개변수를 활성화하는 시점을 개선하면 클라이언트 측 네트워크 요청 트래픽을 크게 줄일 수 있습니다.
'다음 세션 가져오기' 패턴으로 전환
피해야 하는 일반적인 패턴은 앱이 실행될 때마다 네트워크를 통해 새 값을 가져오고 활성화하는 fetchAndActivate 호출을 이전에 가져온 값의 짧은 캐시 만료 기간 (예: 15분~1시간)과 함께 사용하는 것입니다. 이 접근 방식의 기본 정신 모델은 사용자가 앱을 열 때마다 항상 최신 값이 가져와 적용된다는 것입니다. 일일 할인 캠페인이나 게임 프로모션을 실행하는 등 즉시 업데이트해야 하는 경우가 있지만, 앱의 성능과 가져오기 사용량에 미치는 영향을 고려하여 목표의 균형을 맞추는 것이 중요합니다.
이 접근 방식은 캐시가 만료될 때마다 새로운 네트워크 호출을 강제하여 하루에 여러 번 앱을 여는 사용자의 가져오기 볼륨을 높입니다.
대신 더 높은 최소 가져오기 간격으로 fetch 및 activate 호출을 별도로 사용하여 '다음 세션에서 가져오기' 모델을 채택하는 것이 좋습니다. 캐시가 무효화된 경우에만 fetch 네트워크 요청을 실행하므로 최소 가져오기 간격이 더 높은 fetchAndActivate를 계속 사용할 수 있지만, 두 호출을 별도로 사용하면 패턴을 확고히 하고 애플리케이션 개발 프로세스에서 표준 사례로 설정하는 데 도움이 됩니다. 또한 별도로 활성화하면 세션 중에 구성 값을 적용하여 사용자 환경을 방해할 위험이 없습니다.
이 접근 방식의 작동 방식
- 실행 시 즉시 활성화: 이전 세션에서 캐시된 구성을 즉시 적용합니다 (0ms 네트워크 지연).
- 캐시가 더 긴 백그라운드에서 가져오기 (예: 12시간 또는 24시간 이상): 업데이트된 구성을 비동기식으로 요청하여 다음 세션의 로컬 캐시를 새로고침합니다.
이렇게 하면 가져오기 볼륨이 어떻게 최적화되나요?
최소 가져오기 간격이 길어지면 가져오기 요청이 줄어듭니다. 다음 세션의 새 값을 가져오고 현재 세션의 캐시된 값을 활성화하면 앱이 더 긴 검증 기간 동안 로컬 캐시에서 즉시 로드되어 사용자 환경이 개선됩니다.
예를 들어 minimumFetchInterval를 24시간으로 설정하고 사용자가 하루에 앱을 5~10회 여는 경우 SDK는 로컬 캐시에서 직접 2~10회 실행을 자동으로 충족하여 해당 사용자의 일일 네트워크 요청 수를 10회 이상 가져오기에서 1회로 줄입니다.
다음 예는 Android, Apple 플랫폼, 웹 앱에서 이 구현이 어떻게 표시되는지 보여줍니다.
Android
val remoteConfig = Firebase.remoteConfig // Set a 24-hour minimum fetch interval (86,400 seconds) val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 86400 } remoteConfig.setConfigSettingsAsync(configSettings) // 1. Instantly activate values cached from the LAST session remoteConfig.activate().addOnCompleteListener { applyAppConfigurations() } // 2. Fetch new values in the background for the NEXT session remoteConfig.fetch().addOnCompleteListener { task -> if (task.isSuccessful) { // Optional: Activate values if needed } }
iOS+
let remoteConfig = RemoteConfig.remoteConfig() // Set a 24-hour minimum fetch interval (86,400 seconds) let settings = RemoteConfigSettings() settings.minimumFetchInterval = 86400 remoteConfig.configSettings = settings // 1. Instantly activate values cached from the LAST session remoteConfig.activate { changed, error in guard error == nil else { return } DispatchQueue.main.async { self.applyAppConfigurations() } } // 2. Fetch new values in the background for the NEXT session remoteConfig.fetch { status, error in if status == .success { // Optional: Activate values if needed } }
웹
import { getRemoteConfig, fetchConfig, activate } from "firebase/remote-config"; const remoteConfig = getRemoteConfig(app); // Set a 24-hour minimum fetch interval (86,400,000 ms) remoteConfig.settings.minimumFetchIntervalMillis = 86400000; // 1. Instantly activate values cached from the LAST session activate(remoteConfig).then(() => { applyAppConfigurations(); }); // 2. Fetch new values in the background for the NEXT session fetchConfig(remoteConfig).then(() => { // Optional: Activate values if needed });
조건부 '스마트' 가져오기 구현
'다음 세션 가져오기' 패턴으로 인해 Remote Config 값을 업데이트해야 하는 시점과 클라이언트 앱에서 값을 사용할 수 있는 시점 사이에 지연 시간이 너무 많이 발생하는 경우 조건부 '스마트' 가져오기를 채택하는 것이 좋습니다.
이를 효과적으로 구현하려면 화면이 로드되거나 탭이 전환되거나 뷰가 포커스를 얻는 등 광범위한 UI 수명 주기 후크에 fetch 트리거를 연결하지 마세요.
대신 다음과 같은 명시적인 앱 작업이나 상태에 따라 가져오기 요청을 선택적으로 트리거하세요.
- 사용자 로그인 이벤트
- 매개변수가 사용되는 특정 사용자 흐름으로 전환 (예: 결제 단계 진입 또는 게임에서 레벨업)
반대로 다음과 같은 일상적인 작업에 대한 가져오기 요청은 트리거하지 마세요.
- 사용자가 앱을 열거나 새 세션을 시작하는 경우
- 앱이 백그라운드 상태와 포그라운드 상태 간에 전환될 때
다음 단계
- 실시간 Remote Config을 전략적으로 사용하는 방법을 알아보세요.
- Firebase Remote Config 로드 전략을 살펴봅니다.