다음을 통해 공유


Go Gin 웹 애플리케이션에서 사용자 지정 필터를 사용하여 조건부 기능 사용

기능 플래그는 기능 필터를 사용하여 기능을 조건부로 사용하도록 설정할 수 있습니다. 기능 필터에 대한 자세한 내용은 기능 필터를 사용하여 조건부 기능 사용을 참조 하세요.

이 가이드에서 사용되는 예제는 기능 관리 빠른 시작에 도입된 Go Gin 웹 애플리케이션을 기반으로 합니다. 계속 진행하기 전에 빠른 시작을 완료하여 베타 기능 플래그가 있는 Go Gin 웹 애플리케이션을 만듭니다. 완료되면 App Configuration 저장소의 베타 기능 플래그에 사용자 지정 기능 필터를 추가해야 합니다.

이 가이드에서는 사용자 지정 기능 필터를 구현하고 기능 필터를 사용하여 기능을 조건부로 사용하도록 설정하는 방법을 알아봅니다.

Prerequisites

사용자 지정 기능 필터 구현

필수 구성 요소에서 베타 기능 플래그에 대한 백분율 매개 변수를 사용하여 Random이라는 사용자 지정 기능 필터를 추가했습니다. 다음으로, 기능 필터를 구현하여 Percentage 매개 변수에 정의된 확률에 따라 베타 기능 플래그를 사용하도록 설정합니다.

  1. 다음 코드가 포함된 random_filter.go 파일을 만듭니다.

    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    
        "github.com/microsoft/Featuremanagement-Go/featuremanagement"
    )
    
    type RandomFilter struct{}
    
    func (f *RandomFilter) Name() string {
        return "Random"
    }
    
    func (f *RandomFilter) Evaluate(evalCtx featuremanagement.FeatureFilterEvaluationContext, appCtx any) (bool, error) {
        percentage, ok := evalCtx.Parameters["Percentage"].(float64)
        if !ok {
            return false, fmt.Errorf("invalid parameter type for Percentage: expected float64, got %T", evalCtx.Parameters["Percentage"])
        }
    
        rand.Seed(time.Now().UnixNano())
        randomValue := rand.Intn(100)
        return randomValue <= int(percentage), nil
    }
    

    RandomFilter 구조체를 FeatureFilter 라이브러리의 featuremanagement 인터페이스를 구현하여 추가했습니다. FeatureFilter 인터페이스에는 두 가지 메서드가 있습니다.

    • Name()는 Azure App Configuration의 베타 기능 플래그에 설정한 필터 이름과 일치하는 필터 이름 Random을 반환합니다.
    • Evaluate() 는 기능 플래그를 평가할 때마다 호출됩니다. 기능 필터는 true를 반환하여 기능 플래그를 활성화합니다.
  2. main.go 파일을 업데이트하여 기능 관리자를 생성할 때 RandomFilter를 등록합니다.

    // ...existing code...
    
    func main() {
        ctx := context.Background()
    
        // Load Azure App Configuration
        appConfig, err := loadAzureAppConfiguration(ctx)
        if err != nil {
            log.Fatalf("Error loading Azure App Configuration: %v", err)
        }
    
        // Create feature flag provider
        featureFlagProvider, err := azappconfig.NewFeatureFlagProvider(appConfig)
        if err != nil {
            log.Fatalf("Error creating feature flag provider: %v", err)
        }
    
        // Register custom filters
        options := &featuremanagement.Options{
            Filters: []featuremanagement.FeatureFilter{
                &RandomFilter{},
            },
        }
    
        // Create feature manager with custom filters
        featureManager, err := featuremanagement.NewFeatureManager(featureFlagProvider, options)
        if err != nil {
            log.Fatalf("Error creating feature manager: %v", err)
        }
    
        // ...existing code...
    }
    

작동 중인 기능 필터

애플리케이션을 다시 시작하고 브라우저를 몇 번 새로 고칩니다. 기능 플래그를 수동으로 전환하지 않으면 설정한 백분율에 따라 베타 메뉴가 임의로 표시됩니다.

베타 메뉴가 숨겨진 Gin 웹앱의 스크린샷.

베타 메뉴가 있는 Gin 웹앱의 스크린샷

Next steps

기본 제공 기능 필터에 대해 자세히 알아보려면 다음 문서를 계속 진행하세요.

Go 기능 관리 라이브러리의 전체 기능 개요를 보려면 다음 문서를 계속 진행합니다.