Flutter 개발

Firebase Remote Config로 Feature Flag 관리하기

앱 업데이트 없이 기능을 켜고 끄는 방법

John Doe
2026년 2월 8일
7분 읽기
41

Feature Flag가 필요한 순간

새 기능을 만들었는데 일부 사용자에게만 먼저 보여주고 싶을 때가 있습니다. 또는 특정 기능에 문제가 생겨서 긴급히 꺼야 할 때도 있겠죠.

앱 업데이트 없이 이런 제어를 할 수 있는 게 Feature Flag예요. Firebase Remote Config로 간단하게 구현돼요.

Remote Config 초기 설정

Dart
// pubspec.yaml
dependencies:
  firebase_remote_config: ^5.0.0

// 초기화 코드
final remoteConfig = FirebaseRemoteConfig.instance;

await remoteConfig.setConfigSettings(RemoteConfigSettings(
  fetchTimeout: const Duration(minutes: 1),
  minimumFetchInterval: const Duration(hours: 1), // 프로덕션
));

// 기본값 설정 (네트워크 실패 시 사용)
await remoteConfig.setDefaults({
  'new_checkout_enabled': false,
  'max_cart_items': 10,
  'maintenance_message': '',
});
minimumFetchInterval은 개발 중에는 짧게, 프로덕션에서는 1시간 이상으로 설정해요. 너무 자주 fetch하면 쿼터를 소진하죠. 기본값 설정은 필수입니다. 네트워크 문제로 fetch가 실패해도 앱이 죽으면 안 되니까요.

Feature Flag 패턴 구현

Dart
class FeatureFlags {
  static final _config = FirebaseRemoteConfig.instance;

  // 앱 시작 시 한 번 호출
  static Future<void> initialize() async {
    await _config.fetchAndActivate();
  }

  // Feature Flag 접근자
  static bool get isNewCheckoutEnabled =>
      _config.getBool('new_checkout_enabled');

  static int get maxCartItems =>
      _config.getInt('max_cart_items');

  static String get maintenanceMessage =>
      _config.getString('maintenance_message');

  // 점검 모드 여부
  static bool get isUnderMaintenance =>
      maintenanceMessage.isNotEmpty;
}
FeatureFlags 클래스로 감싸면 접근이 깔끔해집니다. 앱 전체에서 FeatureFlags.isNewCheckoutEnabled 이렇게 쓸 수 있겠죠.

UI에서 분기 처리

Dart
// 위젯에서 Feature Flag로 분기
Widget build(BuildContext context) {
  // 점검 모드면 점검 화면 표시
  if (FeatureFlags.isUnderMaintenance) {
    return MaintenanceScreen(
      message: FeatureFlags.maintenanceMessage,
    );
  }

  return Scaffold(
    body: Column(
      children: [
        // 새 결제 플로우 Feature Flag
        if (FeatureFlags.isNewCheckoutEnabled)
          NewCheckoutButton()
        else
          LegacyCheckoutButton(),
      ],
    ),
  );
}

실시간 업데이트 리스닝

Dart
// Remote Config 변경 실시간 감지
remoteConfig.onConfigUpdated.listen((event) async {
  await remoteConfig.activate();
  
  // UI 갱신 (Riverpod이면 ref.invalidate)
  // setState나 상태관리 도구로 리빌드 트리거
  debugPrint('Config updated: ${event.updatedKeys}');
});
Firebase Remote Config는 실시간 리스너도 지원해요. 서버에서 값을 바꾸면 앱을 재시작하지 않아도 바로 반영됩니다. 긴급 점검 모드 전환 같은 시나리오에 유용해요.

A/B 테스트 연동

Firebase Console에서 Remote Config 조건을 설정해요. '사용자의 10%에게만 new_checkout_enabled = true' 같은 퍼센트 롤아웃이 가능해요.

Google Analytics 이벤트와 연동하면 어떤 변형이 전환율이 높은지 측정할 수도 있어요. 별도의 A/B 테스트 도구 없이도 Firebase 안에서 다 해결돼요.
핵심은 Feature Flag를 한 곳에서 관리하는 겁니다. Remote Config + FeatureFlags 클래스 조합이면 충분합니다.
#Firebase
#Remote Config
#Feature Flag
#A/B Test