Feature Flag가 필요한 순간
새 기능을 만들었는데 일부 사용자에게만 먼저 보여주고 싶을 때가 있습니다. 또는 특정 기능에 문제가 생겨서 긴급히 꺼야 할 때도 있겠죠.
앱 업데이트 없이 이런 제어를 할 수 있는 게 Feature Flag예요. Firebase Remote Config로 간단하게 구현돼요.
앱 업데이트 없이 이런 제어를 할 수 있는 게 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 클래스 조합이면 충분합니다.
Google Analytics 이벤트와 연동하면 어떤 변형이 전환율이 높은지 측정할 수도 있어요. 별도의 A/B 테스트 도구 없이도 Firebase 안에서 다 해결돼요.
핵심은 Feature Flag를 한 곳에서 관리하는 겁니다. Remote Config + FeatureFlags 클래스 조합이면 충분합니다.