💡 핵심 인사이트
피처 플래그(Feature Flag / Feature Toggle)는 코드 안에 숨겨놓은 **'기능 On/Off 스위치'**입니다.
며칠 뒤 출시할 위험한 신기능의 코드를 오늘 라이브 서버에 모두 배포(Deployment)해 놓더라도, 이 '플래그 스위치'를 꺼두면(Off) 고객의 눈에는 아무것도 보이지 않다가, 이벤트 당일 자정에 스위치만 딱 켜주면(On) 0.1초 만에 기능이 마법처럼 노출되는 릴리즈 분리 기술입니다.


Ⅰ. 기존 배포의 끔찍한 공포 (배포 = 출시)

과거 폭포수 시절에는 **"서버에 코드를 배포한다(Deploy) = 고객에게 즉시 화면이 공개된다(Release)"**는 공식이 성립했습니다. 두 행위가 한 몸이었습니다.

  • 상황: 금요일 12시에 '크리스마스 한정 이벤트 배너'를 오픈해야 합니다.
  • 고통: 개발자는 11시 50분부터 벌벌 떨며 운영 서버에 배너 코드를 배포하기 시작합니다. 그런데 코드 충돌이 나서 배포가 30분 지연되었습니다. 결국 12시 이벤트 런칭에 실패하고 사장님께 불려 갑니다.
  • 만약 배포했는데 치명적 버그가 터지면? 급하게 전체 코드를 옛날 코드로 다시 뒤집어엎는(롤백 배포) 무서운 지옥이 펼쳐집니다.

Ⅱ. 피처 플래그의 도입: 배포와 출시의 완벽한 이혼

피처 플래그는 이 '배포(코드 올리기)'와 '출시(고객에게 보여주기)'를 완벽히 쪼개서 분리(Decoupling)시켜 버립니다.

작동 원리 (If문 스위치)

개발자는 코드를 짤 때 새로운 이벤트 배너 컴포넌트를 아주 단순한 if 문으로 감싸놓습니다.

if (FeatureFlags.isEnable("Christmas_Banner")) {
    show(크리스마스_배너);
} else {
    show(기존_평범한_배너);
}
  1. 평온한 배포 (Deploy): 1주일 전인 수요일 낮에 이 코드를 미리 라이브 서버에 편안하게 싹 배포해 둡니다. 현재 관리자 포털에서 플래그 상태는 Off(False)로 꺼져있습니다. 따라서 수천만 명의 고객이 접속해도 서버에는 코드가 존재하지만 화면에는 아무 일도 일어나지 않습니다.
  2. 우아한 출시 (Release): 금요일 12시 정각이 되자, 마케터(개발자 아님)가 사내 관리자 화면에서 "Christmas_Banner" 스위치를 마우스로 딸깍하고 **On(True)**으로 바꿉니다.
  3. 결과: 서버를 껐다 켜거나 재배포할 필요 1도 없이, 1초 만에 전 세계 고객의 스마트폰에 크리스마스 배너가 짠! 하고 나타납니다.

Ⅲ. 피처 플래그의 3대 흑마법 (기능)

  1. 1초 롤백 (Kill Switch)
    • 스위치를 켰는데 배너 버튼에 심각한 버그(무한 루프)가 터졌습니다.
    • 예전 같으면 개발자가 옛날 코드로 복구해서 다시 10분 동안 서버 배포를 해야 했지만, 이제는 마케터가 1초 만에 스위치를 다시 **Off**로 꺼버리면 그만입니다. 버그 기능이 즉시 숨겨지며 평화가 찾아옵니다.
  2. 트렁크 기반 개발 (CI의 완성)
    • 개발자가 기능 완성을 다 못했어도 상관없습니다. 스위치를 Off로 감싸놓고 미완성 코드를 매일매일 메인 브랜치(Git)에 병합(CI)해버리면, 충돌(Merge Conflict)의 지옥에서 영원히 해방됩니다.
  3. 타겟팅 배포 (카나리 테스트의 진화)
    • 플래그를 "전체 On"이 아니라, "사내 직원 이메일에만 On", 혹은 "전체 접속자의 5%에게만 On"으로 조건을 걸 수 있습니다. 5% 고객을 상대로 몰래 신기능 반응을 살피는(A/B 테스트, 카나리 배포) 궁극의 실험 도구로 쓰입니다.

📢 섹션 요약 비유: 기존의 배포가 **'건물을 지으면서 동시에 가림막 없이 행인들에게 다 보여주는 아슬아슬한 노가다 공사'**라면, 피처 플래그는 건물을 지을 때 거대한 **'검은 천(플래그)'**으로 덮어놓고 안에서 뚝딱뚝딱 미리 100% 다 지어둔(배포 완료) 뒤, 개업일 자정에 검은 천만 확! 걷어내어(스위치 On) 고객들에게 멋진 완성본을 즉시 보여주는 우아한 건축 제막식입니다.