기능 플래그로 배포와 릴리스를 분리하기: 무중단 출시의 기본기

🤖 AI Summary
많은 팀이 배포와 릴리스를 같은 순간으로 다룹니다. 코드를 올리는 동시에 기능이 모든 사용자에게 켜지니까요. 문제가 생기면 되돌리기도 어렵죠. 기능 플래그는 이 둘을 나눕니다. 코드는 미리 프로덕션에 올려 두되, 기능은 스위치를 켜야 비로소 노출되게 하는 것이죠. 코드 안에 조건 분기를 심고 런타임 설정으로 켜고 끄기 때문에, 배포를 다시 하지 않고도 일부 사용자에게만 먼저 열거나, 문제가 생기면 즉시 끌 수 있습니다. 이 글은 배포와 릴리스를 왜 나눠야 하는지, 기능 플래그가 무엇이고 어디에 쓰는지, 그리고 도입할 때 흔히 놓치는 주의점을 정리합니다.
블로그 목차
배포와 릴리스는 왜 나눠야 하나요?
둘을 붙여 두면 출시의 모든 위험이 한 순간에 몰리기 때문입니다. 배포와 동시에 기능이 전체 사용자에게 켜지면, 문제가 있어도 이미 모두가 겪은 뒤에야 알게 되죠.
배포와 릴리스는 원래 다른 일입니다. 배포는 코드를 서버에 올리는 기술적 행위이고, 릴리스는 그 기능을 사용자에게 실제로 노출하는 결정이에요. 이 둘을 나누면, 코드는 평소처럼 자주 올리되 기능을 켜는 시점은 따로 고를 수 있습니다. 한밤중에 조용히 배포해 두고 낮에 천천히 열거나, 일부에게만 먼저 열어 반응을 본 뒤 넓히는 식이죠. 출시가 한 번의 도박에서 조절 가능한 과정으로 바뀌는 셈입니다.

기능 플래그가 무엇인가요?
한마디로 코드 안에 심은 조건부 스위치입니다. "이 플래그가 켜져 있으면 새 기능을, 꺼져 있으면 기존 동작을" 실행하도록 코드에 분기를 넣고, 그 스위치를 런타임 설정으로 제어합니다.
핵심은 스위치를 바꾸는 데 재배포가 필요 없다는 점이에요. 코드를 다시 올리지 않고 설정 값만 바꾸면 기능이 켜지거나 꺼지죠. 그래서 "전체의 5%에게만", "특정 회사 계정에만", "문제가 보이면 지금 즉시 끄기" 같은 제어가 빠르게 가능합니다. 스위치의 상태는 대개 별도의 관리 화면이나 설정 저장소에서 다루며, 상용 도구와 오픈소스 도구가 모두 있습니다.
기능 플래그는 어디에 쓰나요?
쓰임이 넓지만 대표적인 네 가지로 정리할 수 있습니다.
점진 출시: 새 기능을 일부 사용자에게 먼저 열고, 문제가 없으면 범위를 넓혀 갑니다.A/B 테스트: 두 버전을 나눠 보여 주고 어느 쪽 반응이 나은지 비교합니다.킬 스위치: 배포된 기능에 문제가 생기면, 롤백 없이 스위치만 꺼서 즉시 차단합니다.권한·베타: 특정 등급이나 베타 참가자에게만 기능을 노출합니다.
참고로 트래픽을 새 버전 서버로 조금씩 넘기는 카나리 같은 인프라 레벨 배포 전략은 결이 다릅니다. 기능 플래그가 코드 안에서 기능을 켜고 끈다면, 카나리·블루그린은 로드밸런서에서 트래픽을 나누죠. 이 둘은 경쟁이 아니라 함께 쓰는 짝입니다. 인프라 레벨 배포 전환은 무중단 배포 실전: 블루그린 vs 카나리, NHN LB로 트래픽 전환하고 롤백까지 글에서 자세히 다뤘습니다.
도입할 때 무엇을 주의해야 하나요?
가장 흔한 함정은 다 쓴 플래그를 지우지 않는 것입니다. 출시가 끝나 항상 켜져 있는 플래그를 코드에 남겨 두면, 조건 분기가 계속 쌓여 기술 부채가 됩니다. 나중에는 어떤 플래그가 살아 있는지조차 헷갈리게 되죠.
테스트도 부담이 됩니다. 플래그가 늘수록 켜짐과 꺼짐의 조합이 급격히 많아져, 모든 경우를 검증하기 어려워집니다. 그래서 플래그를 만들 때부터 언제 지울지를 함께 정하고, 임시로 쓰는 출시용 플래그와 오래 유지하는 운영용 플래그를 구분하는 것이 좋습니다. 스위치를 켜고 끄는 편리함만큼, 수명주기를 관리하는 규칙이 있어야 기능 플래그가 부채가 아니라 자산으로 남습니다.
이것만 기억하세요
기능 플래그는 배포와 릴리스를 분리하는 코드 안의 조건부 스위치입니다. 코드는 미리 올려 두고 기능은 런타임에 켜고 끄기 때문에, 점진 출시·A/B 테스트·킬 스위치·베타 노출에 쓰입니다. 트래픽을 나누는 카나리·블루그린과는 계층이 달라 함께 쓰는 짝이죠. 다만 다 쓴 플래그를 방치하면 기술 부채가 되므로, 만들 때부터 수명주기와 정리 규칙을 함께 정하는 것이 핵심입니다.
자주 묻는 질문 (FAQ)
Q. 배포와 릴리스는 어떻게 다른가요?
배포는 코드를 서버(프로덕션)에 올리는 것이고, 릴리스는 그 기능을 사용자에게 실제로 노출하는 것입니다. 기능 플래그를 쓰면 코드는 올려 두고 기능은 나중에 켤 수 있습니다.
Q. 기능 플래그가 무엇인가요?
코드 안에 조건 분기를 심어, 특정 기능을 런타임에 켜고 끌 수 있게 하는 스위치입니다. 배포를 다시 하지 않고도 설정만 바꿔 기능을 제어합니다.
Q. 기능 플래그는 어디에 쓰나요?
일부 사용자에게만 먼저 여는 점진 출시, A/B 테스트, 문제가 생기면 즉시 끄는 킬 스위치, 베타 기능 노출 등에 씁니다.
Q. 카나리 배포와 무엇이 다른가요?
카나리는 트래픽을 새 버전 서버로 조금씩 보내는 인프라 레벨 전략이고, 기능 플래그는 배포된 코드 안에서 기능을 켜고 끄는 코드 레벨 제어입니다. 둘은 함께 쓰기도 합니다.
Q. 도입할 때 무엇을 주의해야 하나요?
다 쓴 플래그를 지우지 않으면 코드가 복잡해지는 기술 부채가 쌓입니다. 플래그 조합이 늘면 테스트도 복잡해지므로, 수명주기와 정리 규칙을 함께 정해야 합니다.



