피처 플래그란 무엇인가
피처 플래그(Feature Flag)는 코드를 배포하지 않고도 특정 기능을 켜고 끌 수 있게 해주는 스위치입니다. 쉽게 말해 조명 스위치와 같습니다. 전등 자체는 이미 설치되어 있지만, 스위치를 올리기 전까지는 불이 켜지지 않습니다. 마찬가지로 새로운 기능 코드는 이미 서버에 배포되어 있지만, 플래그가 꺼져 있으면 사용자에게는 보이지 않습니다.
이 방식을 쓰면 배포(deploy)와 출시(release)를 분리할 수 있습니다. 코드는 프로덕션 환경에 미리 올려두고, 실제로 사용자에게 기능을 노출하는 시점은 플래그 설정만 바꿔서 별도로 결정하는 것입니다.
동작 원리와 간단한 예시
피처 플래그는 보통 조건문과 설정값의 조합으로 동작합니다. 예를 들어 새로운 결제 UI를 추가한다고 가정해봅시다.
if (featureFlags.isEnabled("new_payment_ui")) { renderNewPaymentUI(); } else { renderOldPaymentUI(); }
여기서 new_payment_ui 값은 코드 안에 하드코딩하지 않고, 별도의 설정 파일이나 관리 대시보드, 혹은 전용 플래그 관리 서비스에서 관리합니다. 이렇게 하면 개발자가 다시 배포하지 않고도 플래그 값을 true/false로 바꾸는 것만으로 즉시 기능을 켜거나 끌 수 있습니다.
더 나아가 특정 사용자 그룹에게만 노출하는 것도 가능합니다. 예를 들어 전체 사용자의 5%에게만 새 기능을 보여주는 카나리 배포나, 사내 직원에게만 먼저 공개하는 방식도 플래그 하나로 구현할 수 있습니다.
실무에서 왜 쓰는가
피처 플래그가 실무에서 널리 쓰이는 이유는 배포로 인한 위험을 크게 줄여주기 때문입니다.
- 롤백이 빠릅니다: 새 기능에 버그가 발견되면 재배포 없이 플래그만 꺼서 즉시 이전 상태로 되돌릴 수 있습니다.
- 점진적 출시가