Feature Flag의 Type

Rachaen·2026년 1월 7일

이 글은 Unleash 공식 문서

What is a feature flag를 읽고,

내용을 정리하고 개인적인 이해를 바탕으로 재구성한 글입니다.

feature-flag-lifecycle-chart

  • 세로축: TTL (존속 기간)
  • 가로축: 변경 빈도(ON/OFF, 비율 변경, 타겟 변경 등)

Release flag(릴리즈 플래그)

새롭거나 아직 완성되지 않은 기능의 배포를 관리하기 위한 플래그입니다.

  • 코드 자체는 이미 main 브랜치에서 합쳐졌지만 사용자에게는 아직 안 보이게 제어하여 배포와 공개를 분리
  • 언제 사용: 신구 기능 개발, 대규모 리팩토링, 실패 리스크가 있는 기능, 점진적 공개가 필요한 경우
  • 특징: 수명은 짧아야 함. 기능이 안정되면 플래그 제거 및 코드 단순화. 오래 남아있으면 기술 부채가 됨

예시

  • 신규 결제 플로우
if (isEnabled("release-new-checkout")) {
    useNewCheckout();
} else {
    useLegacyCheckout();
}
  • 개발 완료
  • 내부 QA → 10% 사용자 → 100%
  • 안정화 후 플래그 삭제

Experiment flag (실험/ A/B 테스트)

서로 다른 사용자 경험을 비교하여 어떤 것이 더 좋은지 실험하기 위한 플래그입니다.

  • 사용자를 여러 그룹으로 나눠 행동 데이터 기반 의사결정
  • 언제 사용: UI/UX 변경 결정 및 사용성 개선
  • 특징: 실험 기간만 존재. 데이터 충분히 수집되면 종료. 오래 끌면 데이터가 오염될 수 있음.

예시

  • 메인페이지 CTA(Call To Action) 버튼
const variant = getVariant("experiment-main-cta");
return variant === "B" ? <NewCTA /> : <OldCTA />;
  • 2주 실험을 통해 전환율 비교하여 플래그 제거

Kill switches (킬 스위치)

심각한 장애나 보안 이슈 발생 시 기능을 즉시 차단하기 위한 스위치입니다.

  • 성능 장애, 외부 API 장애, 보안 취약점 발견, 빠른 대응이 최우선인 경우
  • 언제 사용: 외부 연동(API, 결제, 메시지), 고위험 기능, 장애 시 전체 서비스 보호가 필요한 경우
  • 특징: 장기 또는 영구적으로 항상 존재해야 함. 주기적으로 잘 꺼지는지 테스트 필요

예시

  • 외부 결제 연동 장애
if (!isEnabled("kill-external-payment")) {
    throw new ServiceUnavailableException();
}
  • PG사 장애 발생 시 운영자가 즉시 OFF하여 주문 흐름 보호

Operation flag (운영 플래그)

사용자에게 보이지 않는 기술적 변경을 안전하게 전환하기 위한 플래그입니다.

  • 라이브러리 교체, 알고리즘 변경, 내부 로직 개선 등 기술 구현을 바꿀 때
  • 언제 사용: 라이브러리 업그레이드, 캐시 전략 변경, 알고리즘 개선, 성능 최적화 실험
  • 특징: 짧게 사용하여 검증이 끝나면 제거하기

예시

  • 검색 알고리즘 교체
if (isEnabled("ops-new-search-engine")) {
    return newSearch();
}
return legacySearch();

Permission flag(권한 플래그)

사용자 역할이나 권한에 따라 기능 접근을 제어하는 플래그입니다.

  • 내부 직원, 베타 사용자, 유료 고객 등 기능을 사용하는 그룹을 나눌 때
  • 언제 사용: 베타 기능, 엔터프라이즈 전용 기능, 단계적 권한 확장
  • 특징: 수명은 영구적일 수도 임시적일 수도 있음

예시

  • 프리미엄 대시 보드
if (!isEnabled("permission-premium-dashboard", context)) {
    throw new ForbiddenException();
}

정리

타입목적수명대표 예
Release안전한 배포짧음신규 기능
ExperimentA/B 테스트중간UX 실험
Kill switch장애 대응김/영구외부 API 차단
Operational기술 전환짧음라이브러리 교체
Permission접근 제어다양베타/유료 기능
profile
개발을 잘하자!

0개의 댓글