다음을 통해 공유


Python 기능 관리

기능 관리

기능 관리

Python 기능 관리 라이브러리는 기능 플래그를 기반으로 애플리케이션 기능을 개발하고 공개하는 방법을 제공합니다. 새로운 기능이 개발되면 많은 애플리케이션에는 해당 기능을 사용하도록 설정해야 하는 시기와 조건 등 특별한 요구 사항이 있습니다. 이 라이브러리는 이러한 관계를 정의하는 방법을 제공하고 일반적인 Python 코드 패턴에 통합되어 이러한 기능을 노출할 수 있도록 합니다.

기능 플래그는 Python 애플리케이션이 기능을 동적으로 켜거나 끄는 방법을 제공합니다. 개발자는 조건문과 같은 간단한 사용 사례에서 기능 플래그를 사용할 수 있습니다.

Python 기능 관리 라이브러리를 사용하면 다음과 같은 혜택이 있습니다.

  • 기능 관리에 대한 일반적인 규칙

  • 낮은 진입 장벽

    • JSON 기능 플래그 설정 지원
  • 기능 플래그 수명 관리

    • 구성 값은 실시간으로 변경될 수 있습니다. 기능 플래그는 전체 요청에서 일관될 수 있습니다.
  • 간단한 시나리오부터 복잡한 시나리오까지 포괄

    • 선언적 구성 파일을 통해 기능 켜기/끄기 전환
    • 서버 호출을 기반으로 기능 상태를 동적으로 평가합니다.

    Python 기능 관리 라이브러리는 오픈 소스입니다. 자세한 내용을 보려면 GitHub 리포지토리를 참조하세요.

기능 플래그

기능 플래그는 이름과 기능을 활성화하는 데 사용되는 기능 필터 목록의 두 부분으로 구성됩니다.

기능 필터

기능 필터는 기능을 사용하도록 설정해야 하는 경우에 대한 시나리오를 정의합니다. 기능의 켜기 또는 끄기를 평가할 때 필터 중 하나가 해당 기능을 사용하도록 설정해야 한다고 결정할 때까지 해당 기능 필터 목록이 트래버스됩니다. 이 시점에서 기능은 사용하도록 설정된 것으로 간주되며 기능 필터를 통한 트래버스가 중지됩니다. 기능을 사용하도록 설정해야 함을 나타내는 기능 필터가 없으면 사용하지 않도록 설정된 것으로 간주됩니다.

예를 들어, Microsoft Edge 브라우저 기능 필터를 설계할 수 있습니다. 이 기능 필터는 HTTP 요청이 Microsoft Edge에서 오는 한, 연결된 모든 기능을 활성화합니다.

기능 플래그 구성

Python 사전은 기능 플래그를 정의하는 데 사용됩니다. 사전은 기능 이름을 키로, 기능 플래그 개체를 값으로 구성합니다. 기능 플래그 개체는 키를 포함하는 conditions 사전이며, 키 자체가 포함됩니다 client_filters . client_filters 키는 기능을 사용하도록 설정해야 하는지 여부를 결정하는 데 사용되는 기능 필터 목록입니다.

기능 플래그 선언

기능 관리 라이브러리는 json을 기능 플래그 원본으로 지원합니다. 아래에는 JSON 파일에서 기능 플래그를 설정하는 데 사용되는 형식의 예가 있습니다.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "FeatureT",
                "enabled": "true"
            },
            {
                "id": "FeatureU",
                "enabled": "false"
            },
            {
                "id": "FeatureV",
                "enabled": "true",
                "conditions": {
                    "client_filters": [
                        {
                            "name": "Microsoft.TimeWindow",
                            "parameters": {
                                "Start": "Wed, 01 May 2019 13:59:59 GMT",
                                "End": "Mon, 01 Jul 2019 00:00:00 GMT"
                            }
                        }
                    ]
                }
            }
        ]
    }
}

json 문서의 feature_management 섹션은 규칙에 따라 기능 플래그 설정을 로드하는 데 사용됩니다. feature_flags 섹션은 라이브러리에 로드되는 기능 플래그 목록입니다. 위 섹션에서는 세 가지 다른 기능을 볼 수 있습니다. 기능은 conditions 내에서 client_filters 속성을 사용하여 기능 필터를 정의합니다. FeatureT에 대한 기능 필터에서 필터가 정의되지 않은 상태에서 enabled가 설정되므로 FeatureT가 항상 true를 반환합니다. FeatureUFeatureT와 동일하지만 enabledfalse이므로 해당 기능이 항상 false를 반환합니다. FeatureVMicrosoft.TimeWindow라는 기능 필터를 지정합니다. FeatureV는 구성 가능한 기능 필터의 예입니다. 이 예에서 필터에 parameters 속성이 있음을 볼 수 있습니다. parameters 속성은 필터를 구성하는 데 사용됩니다. 이 경우 해당 기능이 활성화되는 시작 및 종료 시간이 구성됩니다.

feature_management 섹션의 자세한 스키마는 여기에서 확인할 수 있습니다.

고급: 기능 플래그 이름에는 콜론 ':'을 사용할 수 없습니다.

설정/해제 선언

다음 코드 조각은 켜기/끄기 기능에 사용할 수 있는 기능을 정의하는 대체 방법을 보여 줍니다.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "FeatureT",
                "enabled": "true"
            },
            {
                "id": "FeatureX",
                "enabled": "false"
            }
        ]
    }
}

Requirement_type

기능 플래그의 requirement_type 속성은 기능 상태를 평가할 때 필터가 Any 또는 All 논리를 사용해야 하는지 결정하는 데 사용됩니다. requirement_type이 지정되지 않은 경우 기본값은 Any입니다.

  • Any는 기능을 사용하도록 설정하려면 하나의 필터만 true로 평가되어야 함을 의미합니다.
  • All은 기능을 사용하도록 설정하려면 모든 필터가 true로 평가되어야 함을 의미합니다.

Allrequirement_type은 트래버스를 변경합니다. 첫째, 필터가 없으면 기능이 사용하지 않도록 설정됩니다. 그런 다음 필터 중 하나가 해당 기능을 사용하지 않도록 설정해야 한다고 결정할 때까지 기능 필터가 트래버스됩니다. 기능을 사용하지 않도록 설정해야 함을 나타내는 필터가 없으면 사용하도록 설정된 것으로 간주됩니다.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "FeatureW",
                "enabled": "true",
                "conditions": {
                    "requirement_type": "All",
                    "client_filters": [
                        {
                            "name": "Microsoft.TimeWindow",
                            "parameters": {
                                "Start": "Wed, 01 May 2019 13:59:59 GMT",
                                "End": "Mon, 01 Jul 2019 00:00:00 GMT"
                            }
                        },
                        {
                            "name": "Percentage",
                            "parameters": {
                                "Value": "50"
                            }
                        }
                    ]
                }
            },
        ]
    }
}

위의 예에서 FeatureWAllrequirement_type을 지정합니다. 즉, 기능을 사용하도록 설정하려면 모든 필터가 true로 평가되어야 합니다. 이 경우 지정된 기간 동안 50%의 사용자에게 이 기능이 사용하도록 설정됩니다.

소비

기능 관리의 기본 형태는 기능 플래그가 사용하도록 설정되어 있는지 확인한 다음 그 결과에 따라 작업을 수행하는 것입니다. 기능 플래그의 상태를 확인하는 작업은 FeatureManageris_enabled 메서드를 통해 수행됩니다.

…
feature_manager = FeatureManager(feature_flags)
…
if feature_manager.is_enabled("FeatureX"):
    # Do something

FeatureManager에 제공된 feature_flagsAzureAppConfigurationProvider 또는 기능 플래그 사전일 수 있습니다.

기능 필터 구현

기능 필터를 만들면 정의한 기준에 따라 기능을 사용하도록 설정할 수 있습니다. 기능 필터를 구현하려면 FeatureFilter 인터페이스를 구현해야 합니다. FeatureFilter에는 evaluate라는 단일 메서드가 있습니다. 기능이 기능 필터에 대해 사용하도록 설정될 수 있음을 지정하면 evaluate 메서드가 호출됩니다. evaluatetrue를 반환하는 경우 해당 기능을 사용하도록 설정해야 한다는 의미입니다.

다음 코드 조각은 사용자 지정된 기능 필터 MyCustomFilter를 추가하는 방법을 보여 줍니다.

feature_manager = FeatureManager(feature_flags, feature_filters=[MyCustomFilter()])

기능 필터는 FeatureManager를 만들 때 속성 feature_filters에 제공하여 등록됩니다. 사용자 지정 기능 필터에 컨텍스트가 필요한 경우 kwargs를 사용하여 is_enabled를 호출할 때 전달할 수 있습니다.

필터 별칭 특성

기능 필터가 기능 플래그에 등록되면 필터의 이름이 기본적으로 별칭으로 사용됩니다.

기능 필터의 식별자는 @FeatureFilter.alias("MyFilter")를 사용하여 재정의할 수 있습니다. 기능 필터는 이 특성으로 장식되어 기능 플래그 내에서 이 기능 필터를 참조하기 위해 구성에 사용해야 하는 이름을 선언할 수 있습니다.

기능 필터 누락

특정 기능 필터에 대해 기능이 사용하도록 구성되어 있고 해당 기능 필터가 등록되지 않은 경우 기능을 평가할 때 ValueError 예외가 발생합니다.

기본 제공 기능 필터

FeatureManagement 패키지와 함께 제공되는 두 가지 기능 필터 TimeWindowFilterTargetingFilter가 있습니다.

기본 제공된 각 기능 필터에는 고유한 매개 변수가 있습니다. 다음은 예를 함께 보여 주는 기능 필터 목록입니다.

Microsoft.TimeWindow

이 필터는 기간을 기반으로 기능을 사용하도록 설정하는 기능을 제공합니다. End만 지정된 경우 해당 시간까지 기능이 사용되는 것으로 간주됩니다. Start만 지정된 경우 해당 시간 이후의 모든 지점에서 기능이 켜진 것으로 간주됩니다.

"client_filters": [
    {
        "name": "Microsoft.TimeWindow",
        "parameters": {
            "Start": "Wed, 01 May 2019 13:59:59 GMT",
            "End": "Mon, 01 Jul 2019 00:00:00 GMT"
        }
    }
]     

Microsoft.Targeting

이 필터는 대상 그룹 고객을 위한 기능을 사용하도록 설정하는 기능을 제공합니다. 대상 지정에 대한 자세한 설명은 아래의 대상 지정 섹션에 설명되어 있습니다. 필터 매개 변수에는 사용자, 그룹, 제외된 사용자/그룹, 기능에 액세스해야 하는 사용자 기반의 기본 비율을 설명하는 Audience 개체가 포함됩니다. Groups 섹션에 나열된 각 그룹 개체는 액세스 권한을 가져야 하는 그룹 멤버의 비율도 지정해야 합니다. 사용자가 Exclusion 섹션에 직접 지정된 경우 또는 사용자가 제외된 그룹에 있는 경우 기능이 사용하지 않도록 설정됩니다. 또한 사용자가 Users 섹션에 직접 지정되거나, 사용자가 임의 그룹 출시의 포함된 비율에 속하거나, 사용자가 기본 출시 비율에 속하는 경우 해당 사용자는 기능을 사용하도록 설정하게 됩니다.

"client_filters": [
    {
        "name": "Microsoft.Targeting",
        "parameters": {
            "Audience": {
                "Users": [
                    "Jeff",
                    "Alicia"
                ],
                "Groups": [
                    {
                        "Name": "Ring0",
                        "RolloutPercentage": 100
                    },
                    {
                        "Name": "Ring1",
                        "RolloutPercentage": 50
                    }
                ],
                "DefaultRolloutPercentage": 20,
                "Exclusion": {
                    "Users": [
                        "Ross"
                    ],
                    "Groups": [
                        "Ring2"
                    ]
                }
            }
        }
    }
]

대상 지정

대상 지정은 개발자가 사용자 기반에 새로운 기능을 점진적으로 롤아웃할 수 있도록 하는 기능 관리 전략입니다. 이 전략은 대상 그룹으로 알려진 일련의 사용자를 대상으로 지정한다는 개념을 바탕으로 빌드되었습니다. 대상 그룹은 특정 사용자, 그룹, 제외된 사용자/그룹, 전체 사용자 기반 중 지정된 비율로 구성됩니다. 대상 그룹에 포함된 그룹은 전체 멤버의 비율로 더 세분화될 수 있습니다.

다음 단계에서는 새로운 '베타' 기능에 대한 점진적 출시의 예를 보여 줍니다.

  1. 개별 사용자 Jeff와 Alicia에게 베타에 대한 액세스 권한이 부여됩니다.
  2. 다른 사용자인 Mark가 옵트인을 요청하여 포함되었습니다.
  3. "Ring1" 사용자로 알려진 그룹의 20%가 베타에 포함되어 있습니다.
  4. 베타 버전에 포함된 "Ring1" 사용자 수는 최대 100%까지 증가합니다.
  5. 사용자 기반의 5%가 베타 버전에 포함됩니다.
  6. 출시 비율이 100%까지 올라가고 기능이 완전히 출시됩니다.

기능 출시를 위한 이 전략은 포함된 Microsoft.Targeting 기능 필터를 통해 라이브러리에 기본 제공되어 있습니다.

사용자를 대상으로 지정

is_enabled 호출에서 사용자를 직접 지정할 수 있거나 TargetingContxt를 사용하여 사용자 및 선택적 그룹을 지정할 수 있습니다.

# Directly specifying the user
result = is_enabled(feature_flags, "test_user")

# Using a TargetingContext
result = is_enabled(feature_flags, TargetingContext(user_id="test_user", groups=["Ring1"]))

대상 지정 제외

대상 그룹을 정의할 때 사용자 및 그룹을 대상 그룹에서 제외할 수 있습니다. 제외는 기능이 사용자 그룹에 출시될 때 유용하지만 일부 사용자 또는 그룹을 출시에서 제외해야 합니다. 제외는 대상 그룹의 Exclusion 속성에 사용자 및 그룹 목록을 추가하여 정의됩니다.

"Audience": {
    "Users": [
        "Jeff",
        "Alicia"
    ],
    "Groups": [
        {
            "Name": "Ring0",
            "RolloutPercentage": 100
        }
    ],
    "DefaultRolloutPercentage": 0
    "Exclusion": {
        "Users": [
            "Mark"
        ]
    }
}

위의 예에서는 JeffAlicia라는 사용자에 대해 기능이 사용하도록 설정되었습니다. Ring0이라는 그룹의 사용자에 대해서도 사용하도록 설정되어 있습니다. 그러나 사용자 이름이 Mark인 경우 그룹 Ring0에 속해 있는지 여부에 관계없이 기능이 사용하지 않도록 설정됩니다. 제외는 나머지 대상 지정 필터보다 우선 순위가 높습니다.

변형

새로운 기능이 애플리케이션에 추가되면 기능에 여러 가지 다른 디자인 옵션이 제안되는 경우가 있을 수 있습니다. 디자인을 결정하는 일반적인 솔루션은 일종의 A/B 테스트입니다. A/B 테스트 중에는 사용자 기반의 다양한 세그먼트에 기능의 다른 버전을 제공하고 사용자 상호 작용을 기준으로 버전을 선택합니다. 이 라이브러리에서 이 기능은 변형이 있는 기능의 다양한 구성을 나타냄으로써 사용하도록 설정됩니다.

변형을 사용하면 기능 플래그가 단순한 켜기/끄기 플래그 이상이 될 수 있습니다. 변형은 문자열, 숫자, 부울 또는 구성 개체일 수 있는 기능 플래그의 값을 나타냅니다. 변형을 선언하는 기능 플래그는 각 변형을 사용해야 하는 상황을 정의해야 합니다. 이에 대한 자세한 내용은 변형 할당 섹션에서 다룹니다.

class Variant:
    def __init__(self, name: str, configuration: Any):
        self._name = name
        self._configuration = configuration

    @property
    def name(self) -> str:
        """
        The name of the variant.
        :rtype: str
        """
        return self._name

    @property
    def configuration(self) -> Any:
        """
        The configuration of the variant.
        :rtype: Any
        """
        return self._configuration

변형 가져오기

각 기능에 대해 FeatureManagerget_variant 메서드를 사용하여 변형을 검색할 수 있습니다.

…
variant = print(feature_manager.get_variant("TestVariants", TargetingContext(user_id="Adam"))

variantConfiguration = variant.configuration;

// Do something with the resulting variant and its configuration

반환된 변형은 현재 평가 중인 사용자에 따라 달라지며 해당 정보는 TargetingContext의 인스턴스에서 가져옵니다.

변형 기능 플래그 선언

일반 기능 플래그와 비교하여 변형 기능 플래그에는 variantsallocation이라는 두 가지 추가 속성이 있습니다. variants 속성은 이 기능에 대해 정의된 변형을 포함하는 배열입니다. allocation 속성은 이러한 변형을 기능에 할당하는 방법을 정의합니다. 일반 기능 플래그를 선언하는 것과 마찬가지로 JSON 파일에서 변형 기능 플래그를 설정할 수 있습니다. 다음은 변형 기능 플래그의 예입니다.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "MyVariantFeatureFlag",
                "enabled": true,
                "allocation": {
                    "default_when_enabled": "Small",
                    "group": [
                        {
                            "variant": "Big",
                            "groups": [
                                "Ring1"
                            ]
                        }
                    ]
                },
                "variants": [
                    { 
                        "name": "Big"
                    },  
                    { 
                        "name": "Small"
                    } 
                ]
            }
        ]
    }
}

변형 정의

각 변형에는 이름과 구성이라는 두 가지 속성이 있습니다. 이름은 특정 변형을 참조하는 데 사용되며 구성은 해당 변형의 값입니다. configuration_value 속성을 사용하여 구성을 설정할 수 있습니다. configuration_value는 문자열, 숫자, 부울 또는 구성 개체일 수 있는 인라인 구성입니다. configuration_value를 지정하지 않으면 반환된 변형의 Configuration 속성이 None이 됩니다.

가능한 모든 변형 목록은 variants 속성 아래 각 기능에 대해 정의됩니다.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "MyVariantFeatureFlag",
                "variants": [
                    { 
                        "name": "Big", 
                        "configuration_value": {
                            "Size": 500
                        }
                    },  
                    { 
                        "name": "Small", 
                        "configuration_value": {
                            "Size": 300
                        }
                    } 
                ]
            }
        ]
    }
}

변형 할당

기능의 변형을 할당하는 프로세스는 기능의 allocation 속성에 따라 결정됩니다.

"allocation": { 
    "default_when_enabled": "Small", 
    "default_when_disabled": "Small",  
    "user": [ 
        { 
            "variant": "Big", 
            "users": [ 
                "Marsha" 
            ] 
        } 
    ], 
    "group": [ 
        { 
            "variant": "Big", 
            "groups": [ 
                "Ring1" 
            ] 
        } 
    ],
    "percentile": [ 
        { 
            "variant": "Big", 
            "from": 0, 
            "to": 10 
        } 
    ], 
    "seed": "13973240" 
},
"variants": [
    { 
        "name": "Big", 
        "configuration_value": "500px"
    },  
    { 
        "name": "Small", 
        "configuration_value": "300px"
    } 
]

기능의 allocation 설정에는 다음과 같은 속성이 있습니다.

속성 설명
default_when_disabled 기능이 사용하지 않도록 설정된 것으로 간주되는 동안 변형이 요청될 때 사용해야 하는 변형을 지정합니다.
default_when_enabled 기능이 사용하도록 설정된 것으로 간주되고 사용자에게 다른 변형이 할당되지 않은 상태에서 변형이 요청될 때 사용해야 하는 변형을 지정합니다.
user 변형과 해당 변형을 할당해야 하는 사용자 목록을 지정합니다.
group 변형 및 그룹 목록을 지정합니다. 사용자가 그룹 중 하나 이상에 속해 있으면 변형이 할당됩니다.
percentile 해당 변형이 할당되기 위해 사용자가 계산한 백분율이 맞아야 하는 변형 및 백분율 범위를 지정합니다.
seed percentile에 대한 백분율 계산의 기준이 되는 값입니다. 동일한 seed 값이 사용되는 경우 특정 사용자에 대한 백분율 계산은 모든 기능에서 동일합니다. seed가 지정되지 않으면 기능 이름을 기반으로 기본 시드가 만들어집니다.

기능이 사용하도록 설정되지 않은 경우 기능 관리자는 default_when_disabled로 표시된 변형을 현재 사용자에게 할당하며 이 경우에는 Small입니다.

기능이 사용하도록 설정된 경우 기능 관리자는 변형을 할당하기 위해 user, grouppercentile 할당을 순서대로 확인합니다. 이 특정 예에서 평가 중인 사용자의 이름이 Ring1인 그룹에서 Marsha인 경우 또는 사용자가 우연히 0에서 10번째 백분위수 사이에 속하는 경우 지정된 변형이 사용자에게 할당됩니다. 이 경우 할당된 모든 사용자는 Big 변형을 반환합니다. 이러한 할당 중 일치하는 것이 없으면 사용자에게 default_when_enabled 변형, 즉 Small이 할당됩니다.

할당 논리는 Microsoft.Targeting 기능 필터와 유사하지만 할당에는 없지만 대상 지정에는 존재하는 일부 매개 변수가 있으며 그 반대의 경우도 마찬가지입니다. 대상 지정과 할당의 결과는 관련이 없습니다.

변형으로 사용 안 함 상태 재정의

변형을 사용하여 기능 플래그의 사용하도록 설정 상태를 재정의할 수 있습니다. 재정의하면 변형에 기능 플래그의 평가를 확장할 수 있는 기회가 제공됩니다. 변형이 있는 플래그에서 is_enabled을(를) 호출하는 경우 기능 관리자는 현재 사용자에게 할당된 변형이 결과를 재정의하도록 구성되어 있는지 확인합니다. 재정의는 선택적 변형 속성 status_override를 사용하여 수행됩니다. 기본적으로 이 속성은 None으로 설정됩니다. 즉, 이 플래그가 사용 또는 사용 안 함으로 간주되는지에 따라 변형에 영향을 미치지 않습니다. status_overrideEnabled로 설정하면 변형이 선택될 때 사용하도록 설정할 플래그를 재정의할 수 있습니다. status_overrideDisabled로 설정하면 반대 기능이 제공되므로 변형이 선택될 때 플래그가 사용하지 않도록 설정됩니다. enabled 상태가 false인 기능은 재정의할 수 없습니다.

이진 파일 변형과 함께 기능 플래그를 사용하는 경우 status_override 속성이 유용할 수 있습니다. 이를 통해 백분위수 할당 및 시드와 같은 변형과 함께 제공되는 새로운 기능의 혜택을 활용하면서 애플리케이션에서 is_enabled와 같은 API를 계속 사용할 수 있습니다.

{
    "id": "MyVariantFeatureFlag",
    "enabled": true,
    "allocation": {
        "percentile": [
            {
                "variant": "On",
                "from": 10,
                "to": 20
            }
        ],
        "default_when_enabled":  "Off",
        "seed": "Enhanced-Feature-Group"
    },
    "variants": [
        {
            "name": "On"
        },
        {
            "name": "Off",
            "status_override": "Disabled"
        }
    ]
}

위의 예에서는 이 기능이 항상 사용하도록 설정되어 있습니다. 현재 사용자가 계산된 백분위수 범위 10~20에 있으면 On 변형이 반환됩니다. 그렇지 않으면 Off 변형이 반환되고 status_overrideDisabled와 같기 때문에 이제 기능이 사용하지 않도록 설정된 것으로 간주됩니다.

원격

기능 플래그 변경 내용이 배포되면 해당 변경 내용이 애플리케이션에 미치는 영향을 분석하는 것이 중요한 경우가 많습니다. 예를 들어, 다음과 같은 몇 가지 질문이 발생할 수 있습니다.

  • 내 플래그가 예상대로 사용하거나 사용하지 않도록 설정되어 있나요?
  • 대상 사용자가 예상대로 특정 기능에 액세스하고 있나요?
  • 특정 사용자에게 어떤 변형이 표시되나요?

이러한 형식의 질문은 기능 플래그 평가 이벤트의 발생 및 분석을 통해 답할 수 있습니다. 이 라이브러리는 OpenTelemetry를 통한 기능 플래그 평가 동안 AzureMonitor 추적 생성 원격 분석을 사용하도록 설정합니다.

원격 분석 사용

기본적으로 기능 플래그에는 원격 분석이 내보내지지 않습니다. 특정 기능 플래그에 대한 원격 분석을 게시하려면 플래그가 원격 분석 내보내기에 대해 사용하도록 설정되었음을 반드시 선언해야 합니다.

json에 정의된 기능 플래그의 경우 telemetry 속성을 사용하여 사용하도록 설정합니다.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "MyFeatureFlag",
                "enabled": true,
                "telemetry": {
                    "enabled": true
                }
            }
        ]
    }
}

위의 코드 조각은 원격 분석에 사용하도록 설정된 MyFeatureFlag라는 기능 플래그를 정의합니다. telemetry 개체의 enabled 속성은 true로 설정됩니다. 플래그에 대한 원격 분석을 게시하려면 enabled 속성의 값이 true여야 합니다.

기능 플래그의 telemetry 섹션에는 다음과 같은 속성이 있습니다.

속성 설명
enabled 기능 플래그에 대해 원격 분석을 게시해야 하는지 여부를 지정합니다.
metadata 기능 플래그에 대한 사용자 지정 메타데이터를 평가 이벤트에 연결하는 데 사용할 수 있는 사전으로 모델링된 키-값 쌍의 컬렉션입니다.

또한 FeatureManager를 만들 때 원격 분석 이벤트를 처리하려면 콜백을 등록해야 합니다. 이 콜백은 기능 플래그가 평가되고 해당 플래그에 대해 원격 분석을 사용할 때마다 호출됩니다.

feature_manager = FeatureManager(feature_flags, on_feature_evaluated=publish_telemetry)

Application Insights 원격 분석

기능 관리 라이브러리는 기능 플래그 평가 데이터를 Application Insights로 보내는 기본 제공된 원격 분석 게시자를 제공합니다. Application Insights를 사용하도록 설정하기 위해 pip install FeatureManagement[AzureMonitor]를 통해 Azure Monitor와 함께 기능 관리 라이브러리를 설치할 수 있습니다. 이 명령은 OpenTelemetry를 사용하여 Application Insights에 원격 분석 스타일을 지정하는 데 사용되는 azure-monitor-events-extension 패키지를 설치합니다.

참고 항목

azure-monitor-events-extension 패키지는 원격 분석을 Open Telemetry 파이프라인에 추가하기만 합니다. 따라서 Application Insights 등록은 여전히 필요한 과정입니다.

from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor(
        connection_string="InstrumentationKey=00000000-0000-0000-0000-000000000000"
    )

사용자 지정 원격 분석 게시

원격 분석 콜백은 함수이므로 원하는 대상에 원격 분석을 게시하도록 사용자 지정할 수 있습니다. 예를 들어 원격 분석은 로깅 서비스, 데이터베이스 또는 사용자 지정 원격 분석 서비스에 게시할 수 있습니다.

기능 플래그를 평가하고 원격 분석을 사용하도록 설정하면 기능 관리자는 EvaluationEvent 매개 변수를 사용하여 원격 분석 콜백을 호출합니다. EvaluationEvent에는 다음 속성이 있습니다.

태그 설명
feature 사용된 기능 플래그
user 대상 지정에 사용되는 사용자 ID
enabled 기능 플래그가 사용으로 평가되는지 여부
Variant 할당된 변형
VariantAssignmentReason 변형이 할당된 이유

다음 단계

애플리케이션에서 기능 플래그를 사용하는 방법을 알아보려면 다음 빠른 시작을 계속 진행합니다.

기능 필터를 사용하는 방법을 알아보려면 다음 자습서를 계속 진행합니다.