기능 관리 개요

새 애플리케이션 기능을 제공하려면 일반적으로 애플리케이션 자체를 완전하게 다시 배포해야 합니다. 기능을 테스트하려면 애플리케이션을 여러 번 배포해야 하는 경우가 있습니다. 각 배포는 다양한 고객의 테스트할 수 있도록 기능을 변경하거나 노출할 수 있습니다.

기능 관리는 기능 릴리스를 코드 배포와 분리하여 요청 시 기능 가용성을 빠르게 변경할 수 있게 하는 최신 소프트웨어 개발 사례입니다. 기능의 수명 주기를 동적으로 관리하기 위해 기능 플래그(기능 토글기능 스위치라고도 함)라는 기술을 사용합니다.

기능 관리를 통해 개발자는 다음과 같은 문제를 해결할 수 있습니다.

  • 코드 분기 관리: 기능 플래그를 사용하여 현재 개발 중인 새 애플리케이션 기능을 래핑합니다. 이러한 기능은 기본적으로 "숨겨져" 있습니다. 아직 완성되지 않은 경우에도 기능을 안전하게 제공할 수 있으며, 기능이 프로덕션 환경에서 유휴 상태로 유지됩니다. 다크 배포라고 하는 이 방법을 사용하면 각 개발 주기가 끝날 때 모든 코드를 릴리스할 수 있습니다. 지정된 기능을 완료하려면 둘 이상의 주기가 필요하므로 여러 개발 주기에서 코드 분기를 유지할 필요가 없습니다.
  • 프로덕션 환경에서 테스트: 기능 플래그를 사용하여 프로덕션 환경의 새 기능에 대한 조기 액세스 권한을 부여합니다. 예를 들어 엑세스 권한을 팀 구성원 또는 내부 베타 테스터에게만 제한할 수 있습니다. 이러한 사용자는 테스트 환경에서 시뮬레이션 환경 또는 부분적인 환경이 아닌 완전한 프로덕션 환경을 사용하게 됩니다.
  • 플라이팅: 기능 플래그를 사용하여 새 기능을 최종 사용자에게 점차적으로 롤아웃합니다. 사용자 모집단의 일부를 우선 대상으로 지정하고 시간이 지남에 따라 그 비율을 점차적으로 늘릴 수 있습니다.
  • 인스턴트 킬 스위치: 기능 플래그가 새 기능을 릴리스하기 위한 기본 안전 네트워크를 제공합니다. 코드를 다시 배포하지 않고 애플리케이션 기능을 설정하거나 해제할 수 있습니다. 필요한 경우 애플리케이션을 다시 빌드하고 다시 배포하지 않고도 기능을 빠르게 사용하지 않도록 설정할 수 있습니다.
  • 선별적 활성화: 기능 플래그를 사용하여 사용자를 분할하고 각 그룹에 특정 기능 집합을 제공합니다. 특정 웹 브라우저에서만 작동하는 기능이 있을 수 있습니다. 해당 브라우저의 사용자만 보고 사용할 수 있도록 기능 플래그를 정의할 수 있습니다. 이 방법을 사용하면 나중에 코드를 변경하지 않고도 지원되는 브라우저 목록을 쉽게 확장할 수 있습니다.

기본 개념

기능 관리와 관련된 몇 가지 새로운 용어는 다음과 같습니다.

  • 기능 플래그: 기능 플래그는 on 또는 off의 이진 상태인 변수입니다. 기능 플래그에는 연결된 코드 블록도 있습니다. 기능 플래그의 상태는 코드 블록의 실행 여부를 트리거합니다.
  • 기능 관리자: 기능 관리자는 애플리케이션에 있는 모든 기능 플래그의 수명 주기를 처리하는 애플리케이션 패키지입니다. 기능 관리자는 기능 플래그 캐싱 및 상태 업데이트와 같은 추가 기능도 제공합니다.
  • 필터: 필터는 기능 플래그 상태를 평가하는 규칙입니다. 잠재적 필터에는 사용자 그룹, 장치 또는 브라우저 유형, 지리적 위치 및 시간대가 포함됩니다.

효과적인 기능 관리 구현을 구성하기 위해 협력하여 작동하는 최소한의 두 가지 구성 요소는

  • 기능 플래그를 사용하는 애플리케이션 및
  • 기능 플래그 및 해당 현재 상태를 저장하는 별도의 리포지토리입니다.

코드에서 기능 플래그 사용

애플리케이션에서 기능 플래그를 구현하는 기본 패턴은 간단합니다. 기능 플래그는 코드에서 조건문을 제어하는 부울 상태 변수입니다.

if (featureFlag) {
    // Run the following code
}

featureFlag의 값을 고정으로 설정할 수 있습니다.

bool featureFlag = true;

다음과 같은 특정 규칙에 따라 플래그 상태를 평가할 수 있습니다.

bool featureFlag = isBetaUser();

조건을 확장하여 두 가지 상태의 애플리케이션 동작을 설정할 수 있습니다.

if (featureFlag) {
    // This following code will run if the featureFlag value is true
} else {
    // This following code will run if the featureFlag value is false
}

기능 플래그 리포지토리

기능 플래그를 효과적으로 사용하려면 애플리케이션에서 사용되는 모든 기능 플래그를 외부화해야 합니다. 이 방법을 사용하면 애플리케이션 자체를 수정 및 다시 배포하지 않고 기능 플래그 상태를 변경할 수 있습니다.

Azure App Configuration은 기능 플래그에 대한 중앙 집중식 리포지토리를 제공합니다. 이를 사용하여 다양한 종류의 기능 플래그를 정의하고 해당 상태를 빠르고 자신 있게 조작할 수 있습니다. 그런 다음, 다양한 프로그래밍 언어 프레임워크용 App Configuration 라이브러리를 사용하여 애플리케이션에서 이러한 기능 플래그에 쉽게 액세스할 수 있습니다.

ASP.NET Core 앱 의 기능 플래그는 App Configuration .NET 공급자와 기능 관리 라이브러리를 함께 사용하여 ASP.NET 웹 애플리케이션에 대한 기능 플래그를 구현하는 방법을 보여 줍니다. Azure App Configuration의 기능 플래그에 대한 자세한 내용은 다음 문서를 참조하세요.

다음 단계