이 빠른 시작에서는 Azure App Configuration에서 기능 플래그를 만들고 이를 사용하여 Go 콘솔 앱에서 기능의 가용성을 동적으로 제어합니다.
기능 관리 지원은 App Configuration에서 동적 구성 기능을 확장합니다. 이 예제에서는 실시간 모니터링 기능을 사용하여 Go 콘솔 애플리케이션에 기능 플래그를 통합하는 방법을 보여 줍니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정 만들기
- 애플리케이션 구성 저장소. 저장소를 만듭니다.
- 1.21 버전 이상 이용 가능. Go 설치에 대한 자세한 내용은 Go 다운로드 페이지를 참조하세요.
- Azure App Configuration Go 공급자 v1.1.0 이상.
기능 플래그 만들기
App Configuration 저장소에 베타 라는 기능 플래그를 추가하고 레이블 및 설명을 기본값으로 둡니다. Azure Portal 또는 CLI를 사용하여 저장소에 기능 플래그를 추가하는 방법에 대한 자세한 내용은 기능 플래그 만들기로 이동합니다.
기능 플래그 사용
Go 프로젝트에 대한 새 디렉터리를 만들고 다음으로 이동합니다.
mkdir go-feature-flag-quickstart cd go-feature-flag-quickstart새 Go 모듈을 초기화합니다.
go mod init go-feature-flag-quickstartAzure App Configuration 및 기능 관리에 필요한 Go 패키지를 설치합니다.
go get github.com/microsoft/Featuremanagement-Go/featuremanagement go get github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig다음 내용으로 명명된
appconfig.go파일을 만듭니다. Microsoft Entra ID(권장) 또는 연결 문자열을 사용하여 App Configuration 저장소에 연결할 수 있습니다.package main import ( "context" "log" "os" "github.com/Azure/AppConfiguration-GoProvider/azureappconfiguration" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" ) func loadAzureAppConfiguration(ctx context.Context) (*azureappconfiguration.AzureAppConfiguration, error) { // Get the endpoint from environment variable endpoint := os.Getenv("AZURE_APPCONFIG_ENDPOINT") if endpoint == "" { log.Fatal("AZURE_APPCONFIG_ENDPOINT environment variable is not set") } // Create a credential using DefaultAzureCredential credential, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("Failed to create credential: %v", err) } // Set up authentication options with endpoint and credential authOptions := azureappconfiguration.AuthenticationOptions{ Endpoint: endpoint, Credential: credential, } // Configure feature flag options options := &azureappconfiguration.Options{ FeatureFlagOptions: azureappconfiguration.FeatureFlagOptions{ Enabled: true, RefreshOptions: azureappconfiguration.RefreshOptions{ Enabled: true, }, }, } // Load configuration from Azure App Configuration appConfig, err := azureappconfiguration.Load(ctx, authOptions, options) if err != nil { log.Fatalf("Failed to load configuration: %v", err) } return appConfig, nil }팁 (조언)
선택기가 지정되지 않은 경우 App Configuration 저장소에
FeatureFlagOptions레이블이 없는모든 기능 플래그를 로드합니다. 기능 플래그의 기본 새로 고침 간격은 30초입니다.RefreshOptions매개 변수를 통해 이 동작을 사용자 지정할 수 있습니다. 예를 들어, 다음 코드 조각은 키 이름에서 TestApp:으로 시작하고 레이블이 dev인 기능 플래그만 로드합니다. 또한 이 코드는 새로 고침 간격 시간을 5분으로 변경합니다. 이 새로 고침 간격 시간은 일반 키-값의 만료 시간과 별개입니다.azureappconfiguration.FeatureFlagOptions{ Enabled: true, Selectors: []azureappconfiguration.Selector{ { KeyFilter: "TestApp:*", LabelFilter: "dev", }, }, RefreshOptions: azureappconfiguration.RefreshOptions{ Enabled: true, Interval: 5 * time.Minute, }, }기본 애플리케이션 파일을
main.go만듭니다.package main import ( "context" "fmt" "log" "os" "time" "github.com/microsoft/Featuremanagement-Go/featuremanagement" "github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig" ) 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) } // Create feature manager featureManager, err := featuremanagement.NewFeatureManager(featureFlagProvider, nil) if err != nil { log.Fatalf("Error creating feature manager: %v", err) } // Monitor the Beta feature flag fmt.Println("Monitoring 'Beta' feature flag (press Ctrl+C to exit):") fmt.Println("Toggle the Beta feature flag in Azure portal to see real-time updates...") fmt.Println() ticker := time.NewTicker(5 * time.Second) defer ticker.Stop() for { select { case <-ticker.C: // Refresh configuration to get latest feature flag settings if err := appConfig.Refresh(ctx); err != nil { log.Printf("Error refreshing configuration: %v", err) continue } // Evaluate the Beta feature flag isEnabled, err := featureManager.IsEnabled("Beta") if err != nil { log.Printf("Error checking if Beta feature is enabled: %v", err) continue } // Print timestamp and feature status timestamp := time.Now().Format("15:04:05") fmt.Printf("[%s] Beta is enabled: %t\n", timestamp, isEnabled) case <-ctx.Done(): fmt.Println("\nShutting down...") return } } }
애플리케이션 실행
애플리케이션을 실행합니다.
go mod tidy go run .
애플리케이션은 베타 기능 플래그 모니터링을 시작하고 5초마다 현재 상태를 표시합니다.
Monitoring 'Beta' feature flag (press Ctrl+C to exit): Toggle the Beta feature flag in Azure portal to see real-time updates... [14:30:15] Beta is enabled: false [14:30:20] Beta is enabled: false [14:30:25] Beta is enabled: falseAzure Portal에 로그인합니다. 모든 리소스를 선택하고 이전에 만든 App Configuration 저장소를 선택합니다.
기능 관리자를 선택하고 베타 기능 플래그를 찾습니다. "사용" 문구 아래의 확인란을 선택하여 플래그를 활성화합니다.
콘솔 애플리케이션으로 돌아갑니다. 몇 초 후에 기능 플래그 상태가 변경됩니다.
[14:30:30] Beta is enabled: false [14:30:35] Beta is enabled: true [14:30:40] Beta is enabled: trueAzure Portal에서 기능 플래그를 켜고 끌면 다시 시작하지 않고 콘솔 애플리케이션에서 실시간 업데이트를 볼 수 있습니다.
Ctrl+C를 눌러 애플리케이션을 중지합니다.
자원을 정리하세요
이 문서에서 만든 리소스를 계속 사용하지 않으려면 여기서 만든 리소스 그룹을 삭제하여 요금이 부과되지 않도록 합니다.
중요합니다
리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹 및 포함된 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 합니다. 유지하려는 다른 리소스가 포함된 리소스 그룹 내에서 이 문서에 대한 리소스를 만든 경우 리소스 그룹을 삭제하는 대신 해당 창에서 각 리소스를 개별적으로 삭제합니다.
- Azure Portal에 로그인하고 리소스 그룹을 선택합니다.
- 이름으로 필터링 상자에서 리소스 그룹의 이름을 입력합니다.
- 결과 목록에서 리소스 그룹 이름을 선택하여 개요를 확인합니다.
- 리소스 그룹 삭제를 선택합니다.
- 리소스 그룹 삭제를 확인하는 메시지가 표시됩니다. 리소스 그룹의 이름을 입력하여 확인하고 삭제를 선택합니다.
잠시 후, 리소스 그룹 및 모든 해당 리소스가 삭제됩니다.
다음 단계
이 빠른 시작에서는 Azure App Configuration에서 기능 플래그를 만들고 Go 콘솔 애플리케이션에서 사용했습니다. 기능 관리 Go 라이브러리는 Azure App Configuration과 원활하게 통합되는 풍부한 기능 플래그 기능을 제공합니다. 더 많은 기능을 보려면 다음 문서를 계속 진행하세요.
기능 플래그를 사용하면 앱의 기능을 활성화하거나 비활성화할 수 있지만 앱의 논리에 따라 기능 플래그를 사용자 지정할 수 있습니다. 기능 필터를 사용하면 기능 플래그를 조건부로 사용하도록 설정할 수 있습니다. 자세한 내용을 알아보려면 다음 자습서를 계속 진행합니다.
Azure App Configuration은 특정 기간 동안 또는 앱의 특정 대상 그룹에게만 기능 플래그를 활성화할 수 있는 기본 제공 기능 필터를 제공합니다. 자세한 내용을 알아보려면 다음 자습서를 계속 진행합니다.