기능 플래그 소개

기능 플래그란?

📘

기능 플래그를 사용하면 배포와 출시를 분리해서 관리할 수 있습니다.

1080

운영 환경에 코드를 배포하면 바로 관련 기능이 사용자에게 보이게 됩니다. 개발자가 아마도 가장 긴장하는 순간은 배포하는 순간일 것입니다. 충분한 테스트를 거치지 않은 경우, 혹은 테스트를 거쳤다고 해도 예상치 못한 문제가 발생하는 상황을 종종 접하게 되기 때문입니다.

기능 플래그를 사용하면 배포와 출시를 분리하여 기능의 전체 수명 주기를 관리할 수 있습니다.
예를 들면 다음과 같습니다.

  • 배포한 기능을 바로 사용자에게 보여주지 않고 지정한 인원만 접근하게 하여 운영 환경에서 테스트할 수 있습니다.
  • 배포 이후 원하는 때에 기능을 활성화하거나 비활성화할 수 있습니다.

기능 플래그가 필요한 대상

기능 플래그는 개발자에게 가장 추천하는 기능이지만, 개발자 만을 위한 기능이 아닙니다.

  • 기능을 점진적으로 출시하고 싶은 기획자/PM/PO
  • 기능 출시 전 특정 환경에서 테스트를 원하는 QA
  • 시스템의 특정 기능을 켜고 끄면서 시스템의 기능을 관리하고 제어하고 싶은 시스템 관리자

이외에도 여러 직군이 널리 사용할 수 있습니다.

기능 플래그 활용 예시

기능 출시 관리

여러 가지 변경 사항을 적용하고 배포할 경우 배포 복잡도를 줄일 수 있습니다. 각 기능 혹은 서비스마다 기능 플래그를 도입하여 꺼짐 상태로 두고 배포를 시작하면 다른 기능, 서비스 및 운영 환경에 영향을 주지 않으므로 배포에 집중할 수 있습니다. 배포가 완료된 후에는 기능 플래그를 하나씩 켜짐 상태로 전환하여 모니터링 합니다.

이 경우 장점은 다음과 같습니다.

  • 일부 기능만 먼저 출시할 수 있으므로 낮은 위험도(risk) 내에서 영향도를 파악 할 수 있습니다.
  • 일부 기능만 먼저 출시할 수 있으므로 내부 테스트를 보다 수월하게 할 수 있습니다.
  • 기능 혹은 서비스 담당자 별 배포 시간을 조율할 필요가 없어 유연하게 시간을 사용할 수 있습니다.

점진적 출시

모든 사용자에게 기능을 출시하기 전에 특정 사용자에게만 먼저 출시할 수 있습니다. 특정 사용자에는 QA, 베타 테스터 등이 포함될 수 있습니다. 혹은 불특정 다수 대상이지만 적은 트래픽으로 시작하여 시간이 지남에 따라 전체 사용자에게 기능을 점진적으로 출시할 수 있습니다.

이 경우 장점은 다음과 같습니다.

  • 일부 사용자에게 기능을 먼저 출시하므로 낮은 위험도(risk) 내에서 영향도를 파악 할 수 있습니다.
  • 사용자의 피드백을 받아 필요한 경우 변경할 수 있습니다.
  • 기능에 문제가 생길 경우 바로 해당 기능을 비활성화 할 수 있습니다.

시스템 안정성 관리

코드 배포 없이 시스템의 기능을 켜고 끄면서 시스템의 안정성을 유지할 수 있습니다.

  • 트래픽이 많아지는 경우 서버의 안정성을 위해 트래픽을 차단할 수 있습니다.
  • 새로운 서버, 데이터베이스 등으로 이전을 위해 기존, 신규 서버로 트래픽을 컨트롤할 수 있습니다.