빠른 시작: .NET 백그라운드 서비스에 기능 플래그 추가

이 빠른 시작에서는 Azure App Configuration의 기능 관리 기능을 .NET 백그라운드 서비스에 통합합니다. App Configuration을 사용하여 기능 플래그를 중앙에서 저장하고 관리합니다.

필수 조건

기능 관리 지원은 App Configuration에서 동적 구성 기능을 확장합니다. 이 빠른 시작의 예제는 동적 구성 자습서에 소개된 .NET 백그라운드 서비스 앱을 기반으로 합니다. 계속하기 전에 다음 자습서를 완료하여 동적 구성을 사용하여 .NET 백그라운드 서비스 앱을 먼저 만듭니다.

기능 플래그 추가

App Configuration 저장소에 베타라는 기능 플래그를 추가하고 레이블설명을 기본값으로 둡니다. Azure Portal 또는 CLI를 사용하여 저장소에 기능 플래그를 추가하는 방법에 대한 자세한 내용은 기능 플래그 만들기로 이동하세요.

베타라는 기능 플래그를 사용하도록 설정하는 필드를 보여 주는 스크린샷

기능 플래그 사용

  1. 다음 명령을 실행하여 Microsoft.FeatureManagement NuGet 패키지에 대한 참조를 추가합니다.

    dotnet add package Microsoft.FeatureManagement
    
  2. 다음 명령을 실행하여 프로젝트에 대한 패키지를 복원합니다.

    dotnet restore
    
  3. Program.cs를 열고, 다음 명령문을 추가합니다.

    using Microsoft.FeatureManagement;
    
  4. AddAzureAppConfiguration 호출 내 UseFeatureFlags 메서드에 호출을 추가하고 기능 관리 서비스를 등록합니다.

    // Existing code in Program.cs
    // ... ...
    
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        options.Connect(Environment.GetEnvironmentVariable("ConnectionString"));
    
        // Use feature flags
        options.UseFeatureFlags();
    
        // Register the refresher so that the Worker service can consume it through dependency injection
        builder.Services.AddSingleton(options.GetRefresher());
    });
    
    // Register feature management services
    builder.Services.AddFeatureManagement();
    
    // The rest of existing code in Program.cs
    // ... ...
    

    매개 변수가 UseFeatureFlags 메서드에 전달되지 않으면 App Configuration 저장소에서 레이블이 없는 모든 기능 플래그를 로드합니다. 기능 플래그의 기본 새로 고침 간격은 30초입니다. FeatureFlagOptions 매개 변수를 통해 이 동작을 사용자 지정할 수 있습니다. 예를 들어, 다음 코드 조각은 키 이름에서 TestApp:으로 시작하고 레이블이 dev인 기능 플래그만 로드합니다. 또한 이 코드는 새로 고침 간격 시간을 5분으로 변경합니다. 이 새로 고침 간격 시간은 일반 키-값의 만료 시간과 별개입니다.

    options.UseFeatureFlags(featureFlagOptions =>
    {
        featureFlagOptions.Select("TestApp:*", "dev");
        featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5);
    });
    
  5. Worker.cs를 열고 다음 문을 추가합니다.

    using Microsoft.FeatureManagement;
    
  6. 종속성 주입을 통해 IConfigurationRefresherIFeatureManager의 인스턴스를 가져오도록 Worker 서비스의 생성자를 업데이트합니다.

    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private readonly IConfigurationRefresher _refresher;
        private readonly IFeatureManager _featureManager;
    
        public Worker(ILogger<Worker> logger, IConfigurationRefresher refresher, IFeatureManager featureManager)
        {
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
            _refresher = refresher ?? throw new ArgumentNullException(nameof(refresher));
            _featureManager = featureManager ?? throw new ArgumentNullException(nameof(featureManager));
        }
    
        // ... ...
    }
    
  7. 기능 플래그의 상태에 따라 메시지를 기록하도록 ExecuteAsync 메서드를 업데이트합니다.

    TryRefreshAsync 메서드는 기능 플래그를 새로 고치기 위해 태스크 실행의 모든 반복을 시작할 때 호출됩니다. 새로 고침 간격 시간 창에 도달하지 않으면 작동하지 않습니다. await 연산자는 작업 실행의 현재 반복을 차단하지 않고 기능 플래그를 새로 고치도록 사용되지 않습니다. 이 경우 나중에 작업 실행을 반복하면 업데이트된 값이 표시됩니다.

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            // Intentionally not await TryRefreshAsync to avoid blocking the execution.
            _refresher.TryRefreshAsync(stoppingToken);
    
            if (_logger.IsEnabled(LogLevel.Information))
            {
                if (await _featureManager.IsEnabledAsync("Beta"))
                {
                    _logger.LogInformation("[{time}]: Worker is running with Beta feature.", DateTimeOffset.Now);
                }
                else
                {
                    _logger.LogInformation("[{time}]: Worker is running.", DateTimeOffset.Now);
                }
            }
    
            await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken);
        }
    }
    

로컬로 앱 빌드 및 실행

  1. 다음 명령을 실행하여 앱을 빌드합니다.

    dotnet build
    
  2. 빌드가 성공적으로 완료되면 다음 명령을 실행하여 앱을 로컬로 실행합니다.

    dotnet run
    
  3. 콘솔에 다음 출력이 표시됩니다.

    기능 플래그를 사용하지 않도록 설정된 상태로 실행되는 백그라운드 서비스가 있는 콘솔의 스크린샷

  4. Azure Portal에 로그인합니다. 모든 리소스를 선택하고 이전에 만든 App Configuration 저장소를 선택합니다.

  5. 기능 관리자를 선택하고 베타 기능 플래그를 찾습니다. 사용 아래의 확인란을 선택하여 플래그를 사용하도록 설정합니다.

  6. 새로 고침 간격 시간 창이 지나도록 몇 분 정도 기다립니다. 업데이트된 로그 메시지가 표시됩니다.

    기능 플래그를 사용하도록 설정된 백그라운드 서비스가 실행 중인 콘솔의 스크린샷.

리소스 정리

이 문서에서 만든 리소스를 계속 사용하지 않으려면 여기서 만든 리소스 그룹을 삭제하여 요금이 부과되지 않도록 합니다.

Important

리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹 및 포함된 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 합니다. 유지하려는 다른 리소스가 포함된 리소스 그룹 내에서 이 문서에 대한 리소스를 만든 경우 리소스 그룹을 삭제하는 대신 해당 창에서 각 리소스를 개별적으로 삭제합니다.

  1. Azure Portal에 로그인하고 리소스 그룹을 선택합니다.
  2. 이름으로 필터링 상자에서 리소스 그룹의 이름을 입력합니다.
  3. 결과 목록에서 리소스 그룹 이름을 선택하여 개요를 확인합니다.
  4. 리소스 그룹 삭제를 선택합니다.
  5. 리소스 그룹 삭제를 확인하는 메시지가 표시됩니다. 리소스 그룹의 이름을 입력하여 확인하고 삭제를 선택합니다.

잠시 후, 리소스 그룹 및 모든 해당 리소스가 삭제됩니다.

다음 단계

이 빠른 시작에서는 기능 플래그를 만들고 백그라운드 서비스와 함께 사용했습니다.

다른 형식의 앱에 대한 기능 관리 기능을 사용하도록 설정하려면 다음 자습서를 계속 진행합니다.

Azure App Configuration에서 기능 플래그를 관리하는 방법에 대해 자세히 알아보려면 다음 자습서를 계속 진행합니다.

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