Feature Flag
피처 플래그
Feature Flag는 코드를 다시 배포하지 않고 기능을 켜고 끄는 스위치입니다. 피트 홋슨은 2017년 글에서 시스템 동작을 코드 변경 없이 바꾸는 기법으로 정의했고, 용도에 따라 릴리스·실험·운영·권한 네 종류로 나눴습니다. 미완성 기능을 숨긴 채 배포하거나, 장애가 나면 특정 기능만 즉시 끄는 차단 스위치로 씁니다. 대신 플래그가 쌓이면 조건 분기와 테스트 경우의 수가 함께 늘어 관리 비용이 생깁니다.
쉽게 말하면?
Feature Flag는 기능(feature) 깃발(flag)입니다. 건물의 방마다 달린 조명 스위치를 떠올리면 됩니다. 방을 새로 만들려고 건물 전체를 다시 짓는 대신, 방은 미리 만들어 두고 스위치만 나중에 올리는 방식이에요. 문제가 생기면 스위치를 내리면 됩니다.
한 줄로 비유하면?
방마다 달린 조명 스위치입니다. 방을 미리 만들어 두고 불만 나중에 켭니다.
어디에 쓰이나?
케이스 1당근 — 페이 머니 서비스팀
당근의 백엔드 개발자는 피처 토글이 매일 배포하는 팀이 되는 데 결정적이었다고 정리했습니다. 토글이 켜지면 새 동작, 꺼지면 기존 동작으로 떨어지게 하고 토글 지점과 판단 로직을 분리했습니다. 사내 사용자만 켜는 권한 토글과 비율을 조금씩 올리는 카나리 토글도 함께 구현했습니다.
도입효과: 매일 배포 체계를 만든 요인 중 피처 토글 기여도 70% 이상(팀 자체 평가, 2023-04-26)[5]
케이스 2우아한형제들 — 실험 플랫폼
우아한형제들은 A/B 테스트와 기능 플래그를 함께 다루는 사내 실험 플랫폼을 만들었습니다. 실험 생성 화면, 사용자 배정 서버, 이벤트 수집, Airflow 기반 집계 파이프라인으로 구성됩니다. 결과는 Z 검정으로 검증합니다.
도입효과: 사용자 배정 논리 슬롯 10,000개, 신뢰수준 95%와 99% 지원, 배정 서버 캐시 유효시간 30초(2023-01-05)[4]
케이스 3깃랩 — 개발 정책
깃랩은 자사 제품을 플래그 뒤에서 개발하며 공개 정책을 문서로 두고 있습니다. 새 플래그는 기본값이 꺼짐이어야 하고, 사용자·프로젝트·그룹 같은 대상에 묶여야 하며, 도입한 병합 요청에서 바로 쓰여야 합니다. 종류별로 최대 수명을 못 박아 방치를 막습니다.
도입효과: 플래그 종류별 최대 수명 2개월·4개월·6개월, 운영용 플래그는 12개월마다 재평가(공개 개발 문서 기준)[6]
케이스 4엣시 — 사내 플래그 API 공개
엣시는 운영 단계별 비율 조정과 A/B 테스트에 쓰던 사내 PHP 플래그 API를 오픈소스로 냈습니다. 호출 표면을 켜짐 여부 확인과 변형 선택 두 함수로 줄여 쓰기 쉽게 만들었습니다. 저장소는 이후 읽기 전용으로 보관 처리됐습니다.
도입효과: 공개 API 함수 2개로 축소(isEnabled·variant), 저장소 보관 처리 2019-12-18[7]
주의할 점은?
오늘 바로 해보기
1. 다음 배포에 들어갈 기능 하나를 고릅니다.
2. 기본값을 꺼짐으로 두는 플래그를 만들고, 분기 지점과 판단 로직을 분리합니다.
3. 사내 계정에만 켜서 실제 환경에서 확인합니다.
4. 1%에서 5%, 20% 순으로 비율을 올리며 오류율을 봅니다.
5. 100%에 도달한 뒤 제거 기한을 티켓에 적어 백로그에 넣습니다.
한계와 진화
플래그는 공짜가 아닙니다. 홋슨은 토글이 새로운 추상화와 조건 로직을 코드에 들여오고 테스트 부담을 크게 늘린다고 적었습니다. 그래서 잘하는 팀은 토글을 재고처럼 보고 보유량을 최대한 낮게 유지한다고 정리합니다. 독립적인 참·거짓 플래그 하나가 늘 때마다 도달 가능한 설정 조합은 두 배가 됩니다.
방치된 플래그는 보안 문제가 됩니다. Unleash 문서는 쓰임이 끝난 뒤에도 남은 플래그가 민감한 기능이나 데이터를 의도치 않게 드러내고 예기치 않은 동작으로 장애 위험을 키운다고 설명합니다. 업계는 깃랩처럼 수명 상한을 강제하거나, 당근처럼 사용이 끝난 토글을 즉시 지우는 규칙으로 대응하고 있습니다.
참고 자료
- Pete Hodgson, Feature Toggles (aka Feature Flags) (2017-10-09) https://www.martinfowler.com/articles/feature-toggles.html
- Martin Fowler, bliki: Feature Flag (2010-10-29, 2023-07-14 갱신) https://martinfowler.com/bliki/FeatureFlag.html
- LaunchDarkly Docs, Using feature management https://launchdarkly.com/docs/home/getting-started/feature-management
- 우아한형제들 기술블로그, 실험과 기능플래그를 위한 실험플랫폼 구축하기 (2023-01-05) https://techblog.woowahan.com/9935/
- 당근 기술블로그, 매일 배포하는 팀이 되는 여정 2 — Feature Toggle 활용하기 (2023-04-26) https://medium.com/daangn/%EB%A7%A4%EC%9D%BC-%EB%B0%B0%ED%8F%AC%ED%95%98%EB%8A%94-%ED%8C%80%EC%9D%B4-%EB%90%98%EB%8A%94-%EC%97%AC%EC%A0%95-2-feature-toggle-%ED%99%9C%EC%9A%A9%ED%95%98%EA%B8%B0-b52c4a1810cd
- GitLab Docs, Feature flags in the development of GitLab https://docs.gitlab.com/development/feature_flags/
- etsy/feature (GitHub, 2019-12-18 보관) https://github.com/etsy/feature
- Unleash Docs, Managing feature flag technical debt https://docs.getunleash.io/concepts/technical-debt
대표 출처
Pete Hodgson, Feature Toggles (aka Feature Flags), martinfowler.com (2017-10-09)이 페이지에 대한 의견을 남겨주세요
여러분의 의견은 다음 갱신에 반영됩니다.