🌳 고급 deployment
Feature Flag가 뭔가요?
쉽게 이해하기
방의 전등 스위치를 생각해보세요. 전구를 교체하지 않고도 스위치만 눌러 불을 켜고 끌 수 있죠. Feature Flag도 마찬가지로 코드는 그대로 둔 채 설정만 바꿔서 기능을 활성화하거나 비활성화할 수 있습니다.
핵심 정리
코드 배포 없이 특정 기능을 켜고 끌 수 있는 스위치 역할을 하는 개발 기법입니다.
자세히 알아보기
Feature Flag(또는 Feature Toggle)는 코드 배포와 기능 출시를 분리하는 강력한 기법입니다. 새 기능을 개발할 때 코드를 프로덕션에 배포하지만, Flag를 OFF 상태로 두면 사용자에게는 보이지 않습니다. 준비가 되면 Flag를 ON으로 바꿔 기능을 활성화합니다.
실무에서 Feature Flag는 여러 용도로 사용됩니다. 첫째, 점진적 롤아웃(Gradual Rollout)입니다. 새 기능을 일부 사용자에게만 먼저 공개하여 문제가 없는지 확인한 후 전체 사용자에게 확대합니다. 예를 들어 '새로운 결제 UI'를 10% 사용자에게만 보여주고, 문제가 없으면 50%, 100%로 확대하는 식입니다. 둘째, A/B 테스팅입니다. 두 가지 버전을 동시에 테스트하여 어느 것이 더 나은지 데이터로 비교할 수 있습니다.
셋째, 긴급 Kill Switch입니다. 배포된 기능에 심각한 버그가 발견되면, 재배포 없이 즉시 Flag를 OFF로 바꿔 기능을 비활성화할 수 있습니다. 이는 장애 대응 시간을 크게 단축시킵니다. 넷째, 트렁크 기반 개발(Trunk-based Development)을 지원합니다. 긴 브랜치를 유지하지 않고 main 브랜치에 자주 머지하면서도, Feature Flag로 미완성 기능을 숨길 수 있습니다.
대표적인 Feature Flag 서비스로는 LaunchDarkly, Unleash, Split.io 등이 있고, 간단한 경우 환경변수나 데이터베이스 설정으로도 구현할 수 있습니다. 다만 Flag가 많아지면 관리가 복잡해지므로, 사용하지 않는 Flag는 주기적으로 제거하는 것이 중요합니다.