codingstairs
노트에듀라이프연락
⌕검색⌘K
koen

Navigation

  • Intro
  • Blog
  • Life

연락하기

로그인 없이도 보낼 수 있어요. 답변이 필요하면 이메일을 함께 적어 주세요.

  • 익명 폼으로 의견 남기기 →
  • ✉ warragon112@gmail.com
  • 카카오톡 오픈채팅 ↗

© 2026 codingstairs

  • 노트
  • 에듀
  • 검색
  • 라이프
  • 연락
  • 약관
  • RSS
  • GitHub
노트›philosophy

피처 플래그를 차분히 보기

2026-04-28 게시· 2026-05-18 갱신·0회 조회

피처 플래그를 차분히 보기

피처 플래그 (feature flag · feature toggle) 는 큰 회사 사례에서 자주 인용되는 패턴. 작은 팀에서도 같은 무게의 기대를 거는 경우가 있는데, 비용과 이득은 환경에 따라 다릅니다. 이 글은 사실 기준으로 정리.

1. 피처 플래그에 대한 이야기

코드의 분기점에 켜고 끌 수 있는 토글을 두어, 배포 (deploy) 와 출시 (release) 를 분리하는 기법. 코드는 운영에 배포돼 있지만 특정 사용자 · 조건에 한해서만 동작.

대표 도구:

  • LaunchDarkly (2014, Edith Harbaugh 등) — SaaS. 가장 널리 알려진 상용.
  • Unleash (2014, FINN.no 발) — 오픈소스 코어. 자체 호스팅 가능.
  • Flagsmith (2018) — 오픈소스 코어 + SaaS.
  • Split (2015) · GrowthBook (2020) · PostHog (피처 플래그 모듈 포함, 2020) 등.

Martin Fowler 와 Pete Hodgson 의 글 "Feature Toggles (aka Feature Flags)" (2017) 가 토글의 분류를 정리한 글로 자주 인용.

2. 토글의 분류

Hodgson 의 분류는 네 가지:

종류 수명 의도
Release toggle 짧음 (며칠 ~ 몇 주) 미완성 기능을 운영 코드에 두되 비활성. 머지 후 점진 출시.
Experiment toggle 짧음 A / B 테스트. 사용자 그룹별 다른 경로.
Ops toggle 가변 사고 시 기능 일시 차단 (killswitch).
Permission toggle 김 사용자 / 플랜별 기능 노출.

각 종류의 운영 비용이 다름. Release toggle 은 수명이 짧을수록 좋고, Permission toggle 은 사실상 권한 시스템이라 다르게 다뤄야.

3. Trunk-Based Development 와의 관계

trunkbaseddevelopment.com 은 미완성 기능을 trunk 에 두기 위해 피처 플래그를 권장. 짧은 피처 브랜치 + 플래그로 가린 미완성 코드 = 잦은 머지 + 안전한 출시.

이 조합이 큰 팀의 CI / CD 파이프라인에서 자주 채택되는 이유:

  • 머지가 늦어질수록 충돌 비용이 커짐.
  • 매일 머지하면 충돌이 작은 단위로 해결.
  • 미완성 기능을 가리는 안전 장치가 필요하므로 플래그 도입.

4. 작은 팀에서의 비용 / 이득

피처 플래그는 코드에 분기를 더함. 분기는 다음을 부름:

  • 테스트 매트릭스 증가 — 한 플래그가 두 경로를 만들고, 두 플래그가 네 경로를 만듦.
  • 코드 노이즈 — if flag.is_on('x') ... 가 곳곳에 흩어짐.
  • 수명 관리 — 출시가 끝난 release toggle 은 제거해야 하는데 잊히기 쉬움. LaunchDarkly 등 도구가 "stale flag" 알림을 제공하는 이유.
  • 운영 의존 — 플래그 평가 서비스가 죽으면 어떻게 동작할지 미리 정해 두는 편이 안전. 보통 fallback 값을 코드에 박아 둠.

작은 팀 (개발자 5 명 이하 · 일배포 빈도 낮음 · 사용자 베이스 작음) 에서는 다음이 자주 동등 효과:

  • 짧은 피처 브랜치 + PR + 빠른 머지.
  • 환경변수 한두 개로 가린 단순 토글.
  • 베타 사용자에게는 별도 환경 / 도메인 제공.

대규모 도구 (LaunchDarkly · Unleash) 의 풍부한 기능 (타겟팅 · 세그먼트 · A/B 통계) 이 정작 쓰이지 않는다면 비용 대비 이득이 작아진다는 평.

큰 팀에서 효과가 분명한 신호:

  • 일배포 빈도가 높음 (여러 회 / 일).
  • 동시에 여러 미완성 기능이 trunk 에 머지.
  • 사용자 세그먼트별 점진 출시 (canary · ring) 가 일상.
  • 사고 시 기능 단위 빠른 차단이 필요.

5. 다른 길

피처 플래그의 대안 또는 보완:

  • 환경 분리 — dev / staging / prod 의 구분. 단순한 환경별 토글로 충분한 경우가 많음.
  • 블루-그린 / 카나리 배포 — 인프라 단의 점진 출시. 코드 분기를 늘리지 않음.
  • 권한 시스템 — 사용자 / 플랜별 기능 노출은 도메인 차원의 권한 모델로 다루는 편이 의미가 명확.
  • 다크 런치 (dark launch) — 새 코드 경로를 운영에 두되 결과를 사용자에게 보여 주지 않고 데이터만 비교. 검증 후 활성화.

6. 자주 쓰는 모양

단순 환경변수 기반 (작은 팀):

const NEW_PRICING = process.env.FEATURE_NEW_PRICING === "1";

function priceFor(item) {
  return NEW_PRICING ? newPrice(item) : legacyPrice(item);
}

도구 기반 (LaunchDarkly 풍 SDK 의사 코드):

const showNewPricing = await client.variation("new-pricing", user, false);

7. 자주 걸리는 자리

"stale flag" 누적 — 켠 채로 잊혀진 토글은 코드를 뒤덮음. 분기마다 만들어진 두 경로가 서로 다른 방향으로 진화하면 토글 제거가 위험해짐.

토글이 권한 시스템 역할을 대신하는 사고 — 권한은 도메인 모델로 다루고, 토글은 출시 · 실험 · 사고 차단에 한정.

의존성 토글 — 한 토글이 다른 토글을 가정하면 (A 가 켜져야 B 가 의미 있음) 매트릭스가 폭발. 토글 사이의 의존을 명시적으로 문서화하거나 제거.

도구 의존 — 외부 SaaS 의 일시 장애가 운영 결정을 못하게 만드는 사고. 캐시 · 기본값 처리를 처음부터 정함.

작은 팀이 큰 팀의 사례를 그대로 가져오는 경우 — 도구의 비용 (SaaS 요금 · 운영 부담) 이 이득을 넘는 경우가 흔함.

하고픈 말

피처 플래그는 큰 팀의 CI / CD 환경에서 효과가 분명하지만, 작은 팀에서는 코드 노이즈와 운영 의존이 이득을 넘을 수 있음. "stale flag" 누적 + 매트릭스 폭발 + 권한 시스템 대용 셋의 함정이 흔함. 환경 분리 + 단순 환경변수 + 카나리 배포 같은 인프라 단 분리가 더 자연스러운 자리.

Next

  • naming-readability
  • (philosophy 끝)

Pete Hodgson · Martin Fowler Feature Toggles · LaunchDarkly 공식 문서 · Unleash 공식 문서 · Flagsmith 공식 문서 · Trunk-Based Development · Continuous Delivery (Humble & Farley, 2010) · GrowthBook 공식 사이트 · PostHog Feature Flags 를 참고합니다.

philosophy 카테고리의 다른 글

카테고리 전체 보기 →
  • 이름과 가독성
  • AI 보조와 저작권 표기
  • 모국어로 적는 문서
  • 사람용 문서와 에이전트용 문서
  • 점진적 리팩터
  • "Best practice" 가 아니라 트레이드오프