본문 바로가기
Dev/Article

Feature Toggle(기능 토글)

by Luigi.yoon 2025. 6. 30.

Feature Toggle(기능 플래그 또는 기능 토글)은 소프트웨어 개발에서 코드 배포와 기능 릴리스를 분리할 수 있게 해주는 기법입니다. DevOps, CI/CD, MLOps 등의 환경에서 널리 쓰이며, 런타임에 기능을 켜고 끌 수 있도록 하여 릴리스 리스크를 줄이고 A/B 테스트 등을 가능하게 합니다.


✅ Feature Toggle 이란?

기능의 실행 여부를 코드 안에서 조건문으로 제어하도록 하는 기술

출처 : https://medium.com/@suman.maity112/introduction-to-feature-toggle-354873084572
java
복사편집
if (featureToggle.isEnabled("new_search")) { // 새로운 검색 로직 실행 } else { // 기존 검색 로직 실행 }

✅ 주요 목적

목적 설명
안전한 릴리스 코드 배포는 하되, 실제 기능은 숨김
점진적 공개 사용자 그룹을 나눠 순차적으로 기능 활성화 (Canary, A/B Test)
롤백 대응 이슈 발생 시 즉시 기존 기능으로 전환 가능
환경 분리 QA, Staging, Production 환경에서 기능 ON/OFF 분리
실험 동일 코드 기반으로 다양한 기능 실험 가능
 

✅ 유형별 분류

유형 설명 예시
릴리스 토글 기능을 점진적으로 배포 betaUsersOnly
실험 토글 (Experiment Toggle) A/B 테스트 목적 useNewLoginFlow
비즈니스 토글 유료 기능/무료 기능 제어 premiumUserAccess
퍼미션 토글 사용자 권한에 따라 제어 isAdminEnabled
운영/긴급 토글 이슈 대응용 토글 disableSearchTemporarily
 

✅ 장단점 비교

항목 장점 단점
CI/CD 기능이 완성되지 않아도 배포 가능 기술부채(토글 정리 안 하면 코드 누적)
실험 A/B 테스트 및 피드백 수집 용이 토글 로직이 복잡하면 버그 유입 가능
롤백 빠르게 기능 비활성화 가능 모든 코드에 if-else 문이 들어가 유지보수 어려움
사용자별 제어 그룹/권한 기반 기능 제어 가능 기능 활성화 정책 동기화가 어려움
 

✅ 구현 방식 비교

구현 방식 설명 장점 단점
코드 기반 if문/환경변수 등 직접 제어 빠르고 간단 코드 수정 필요, 배포 필요
DB 기반 DB에서 토글 상태 읽어옴 실시간 변경 가능 속도 저하, 복잡성 증가
외부 서비스 사용
(e.g. LaunchDarkly, Unleash, CloudBees)
SaaS 기반 대시보드 + API UI로 관리, 통계 제공 비용, 외부 종속성
 

✅ 관련 기술/라이브러리

플랫폼 라이브러리 / 서비스
Java/Spring FF4J, Togglz, Unleash
Python Django Waffle, Flipper
Node.js LaunchDarkly SDK, Unleash
SaaS 서비스 LaunchDarkly, ConfigCat, Split.io, CloudBees Feature Management
 

✅ MLOps나 DataOps에서의 활용

  • 모델 서빙 토글: A/B 테스트를 위해 v1 모델과 v2 모델을 번갈아 사용
  • 데이터 파이프라인 단계별 토글: 새로운 전처리 로직 적용 여부 실험
  • 운영 토글: 고비용 파이프라인 단계의 일시 비활성화

✅ 요약 비교

항목 Blue/Green, Canary 릴리스 Feature Toggle
배포 단위 인프라 전체 코드 내부
제어 방식 트래픽 라우팅 조건문/플래그
활용 목적 배포 안전성 기능 제어, 실험
적용 난이도 높은 편 (인프라 필요) 낮은 편 (코드 기반)
롤백 속도 느림 매우 빠름

'Dev > Article' 카테고리의 다른 글

EVPN-VXLAN 아키텍처  (0) 2025.06.30
Elasticsearch Tips  (0) 2025.06.30
Elasticsearch Shard, Rack  (0) 2025.06.27
글리치 문제(Glitch)  (1) 2025.06.16
정지 문제(Halting Problem)  (0) 2025.06.11