다음을 통해 공유


자습서: .NET 앱에서 동적 구성 사용

App Configuration .NET 공급자 라이브러리는 애플리케이션을 다시 시작하지 않고 요청 시 구성 업데이트를 지원합니다. 이 자습서에서는 코드에서 동적 구성 업데이트를 구현하는 방법을 보여 줍니다. 빠른 시작에 소개된 앱을 기반으로 합니다. 계속하기 전에 App Configuration을 사용하여 .NET 앱 만들기 를 완료해야 합니다.

이 자습서의 단계는 임의의 코드 편집기를 사용하여 수행할 수 있습니다. Visual Studio Code는 Windows, macOS 및 Linux 플랫폼에서 사용할 수 있는 훌륭한 옵션입니다.

이 자습서에서는 다음 방법을 알아봅니다.

  • App Configuration 저장소의 변경 내용에 대응하여 구성을 업데이트하도록 .NET 앱을 설정합니다.
  • 애플리케이션의 최신 구성을 사용합니다.

필수 조건

Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

App Configuration을 사용하여 .NET 앱 만들기 빠른 시작을 완료합니다.

활동 기반 구성 새로 고침

Program.cs 열고 다음 코드로 파일을 업데이트합니다. Microsoft Entra ID(권장) 또는 연결 문자열 사용하여 App Configuration에 연결할 수 있습니다. 다음 코드 조각에서는 Microsoft Entra ID를 사용하는 방법을 보여 줍니다.

DefaultAzureCredential을(를) App Configuration 저장소에 인증하는 데 사용합니다. 필수 구성 요소에 나열된 빠른 시작을 완료하는 동안 이미 App Configuration 데이터 판독기 역할에 자격 증명을 할당했습니다.

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.AzureAppConfiguration;
using Azure.Identity;

IConfiguration _configuration = null;
IConfigurationRefresher _refresher = null;

var builder = new ConfigurationBuilder();
builder.AddAzureAppConfiguration(options =>
{
    string endpoint = Environment.GetEnvironmentVariable("Endpoint"); 
    options.Connect(new Uri(endpoint), new DefaultAzureCredential())            
           // Load the key-value with key "TestApp:Settings:Message" and no label
           .Select("TestApp:Settings:Message")
           // Reload configuration if any selected key-values have changed.
           .ConfigureRefresh(refresh =>
           {
               refresh.RegisterAll()
                      .SetRefreshInterval(TimeSpan.FromSeconds(10));
           })

    _refresher = options.GetRefresher();
});

_configuration = builder.Build();

Console.WriteLine(_configuration["TestApp:Settings:Message"] ?? "Hello world!");

// Wait for the user to press Enter
Console.ReadLine();

if (_refresher != null)
{
    await _refresher.TryRefreshAsync();
    Console.WriteLine(_configuration["TestApp:Settings:Message"] ?? "Hello world!");

}

ConfigureRefresh 메서드 내에서 선택한 키-값의 변경 내용을 감지할 때마다 전체 구성을 다시 로드하도록 App Configuration 공급자에게 지시하는 메서드를 호출 RegisterAll 합니다(이 경우 TestApp:Settings:Message만 해당). 구성 변경 내용을 모니터링하는 방법에 대한 자세한 내용은 구성 새로 고침에 대한 모범 사례를 참조하세요.

이 메서드는 SetRefreshInterval 구성 변경 내용을 확인하기 위해 App Configuration에 대한 새 요청이 이루어지기 전에 경과해야 하는 최소 시간을 지정합니다. 이 예제에서는 기본 만료 시간인 30초를 재정의하여 데모용으로 대신 10초를 지정합니다.

메서드만 ConfigureRefresh 호출해도 구성이 자동으로 새로 고쳐지지는 않습니다. 인터페이스 TryRefreshAsync 에서 메서드를 IConfigurationRefresher 호출하여 새로 고침을 트리거합니다. 이 디자인은 애플리케이션이 유휴 상태인 경우에도 App Configuration으로 전송되는 요청을 방지하기 위한 것입니다. 애플리케이션을 활성으로 간주하는 호출을 TryRefreshAsync 포함하려고 합니다. 예를 들어 들어오는 메시지, 주문 또는 복잡한 작업의 반복을 처리할 때일 수 있습니다. 애플리케이션이 항상 활성 상태인 경우에도 타이머에 있을 수 있습니다. 이 예제에서는 Enter 키를 누를 때마다 호출 TryRefreshAsync 합니다. 어떤 이유로든 호출 TryRefreshAsync 이 실패하더라도 애플리케이션은 캐시된 구성을 계속 사용합니다. 구성된 새로 고침 간격이 통과되고 애플리케이션 활동에 의해 호출이 TryRefreshAsync 다시 트리거될 때 또 다른 시도가 수행됩니다. TryRefreshAsync를 호출하는 것은 구성된 새로 고침 간격이 지나기 전에 작동하지 않으므로 자주 호출하더라도 성능에 미치는 영향은 최소화됩니다.

종속성 주입을 사용하여 구성 새로 고침

이전 코드에서는 호출IConfigurationRefresher할 인스턴스 TryRefreshAsync 를 수동으로 저장합니다. 또는 종속성 주입을 사용하여 서비스를 확인하는 경우 다음 단계를 참조할 수 있습니다.

  1. AddAzureAppConfiguration에서 IServiceCollection을(를) 호출하여 필요한 App Configuration 서비스를 등록합니다.

    Program.cs 다음 코드를 추가합니다.

    // Existing code in Program.cs
    // ... ...
    
    // Add Azure App Configuration services to IServiceCollection
    builder.Services.AddAzureAppConfiguration();
    
  2. 서비스 컬렉션에서 IConfigurationRefresherProvider 인스턴스를 해결하고, 각 리프레셔에서 TryRefreshAsync를 호출하여 구성을 새로 고칩니다.

    class SampleConfigRefresher
    {
        private readonly IEnumerable<IConfigurationRefresher> _refreshers = null;
    
        public SampleConfigRefresher(IConfigurationRefresherProvider refresherProvider)
        {
            _refreshers = refresherProvider.Refreshers;
        }
    
        public async Task RefreshConfiguration()
        {
            foreach (var refresher in _refreshers)
            {
                _ = refresher.TryRefreshAsync();
            }
        }
    }
    

로컬로 앱 빌드 및 실행

  1. 엔드포인트라는 환경 변수를 Azure Portal의 저장소 개요 아래에 있는 App Configuration 저장소의 엔드포인트로 설정합니다.

    Windows 명령 프롬프트를 사용하는 경우 다음 명령을 실행하고, 명령 프롬프트를 다시 시작하여 변경 내용을 적용합니다.

    setx Endpoint "<endpoint-of-your-app-configuration-store>"
    

    PowerShell을 사용하는 경우 다음 명령을 실행합니다.

    $Env:Endpoint = "<endpoint-of-your-app-configuration-store>"
    

    macOS 또는 Linux를 사용하는 경우 다음 명령을 실행합니다.

    export Endpoint='<endpoint-of-your-app-configuration-store>'
    
  2. 다음 명령을 실행하여 콘솔 앱을 빌드합니다.

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

     dotnet run
    

    퀵스타트 앱 로컬에서 실행

  4. Azure Portal에 로그인합니다. 모든 리소스를 선택하고 빠른 시작에서 만든 App Configuration 저장소 인스턴스를 선택합니다.

  5. 구성 탐색기를 선택하고 다음 키의 값을 업데이트합니다.

    열쇠 가치
    TestApp:설정:메시지 Azure App Configuration의 데이터 - 업데이트됨
  6. Enter 키를 눌러 새로 고침을 트리거하고 명령 프롬프트 또는 PowerShell 창에서 업데이트된 값을 인쇄합니다.

    퀵스타트 앱 로컬 새로 고침

    비고

    새로 고침 작업에 대한 구성을 지정하는 동안 메서드를 사용하여 SetRefreshInterval 새로 고침 간격을 10초로 설정했으므로 해당 설정의 마지막 새로 고침 이후 최소 10초가 경과한 경우에만 구성 설정 값이 업데이트됩니다.

로깅 및 모니터링

로그는 구성 새로 고침 시 출력되며 App Configuration 저장소에서 검색된 키-값 및 애플리케이션에 대한 구성 변경 내용에 대한 자세한 정보를 포함합니다. ASP.NET Core 애플리케이션이 있는 경우 ASP.NET Core에서 로깅 및 모니터링에 대한 다음 지침을 참조하세요. 그렇지 않으면 Azure SDK로 로깅에 대한 지침을 사용하여 로깅을 사용하도록 설정할 수 있습니다.

  • 로그는 서로 다른 이벤트 수준에서 출력됩니다. 기본 수준은 Informational입니다.

    이벤트 수준 설명
    자세히 로그에는 애플리케이션이 App Configuration 저장소의 변경 내용을 모니터링하는 키 값의 키 및 레이블이 포함됩니다. 또한 이 정보에는 애플리케이션이 이미 로드한 것과 비교하여 키-값이 변경되었는지 여부도 포함됩니다. 구성 변경이 예상대로 수행되지 않은 경우 이 수준에서 로그를 사용하도록 설정하여 애플리케이션 문제를 해결합니다.
    정보 제공 로그에는 구성 새로 고침 중에 업데이트된 구성 설정의 키가 포함됩니다. 중요한 데이터가 유출되지 않도록 구성 설정 값은 로그에서 생략됩니다. 이 수준에서 로그를 모니터링하여 애플리케이션이 예상된 구성 변경 사항을 적용받도록 할 수 있습니다.
    경고 로그에는 구성 새로 고침 중에 발생한 오류 및 예외가 포함됩니다. 구성 공급자가 캐시된 데이터를 계속 사용하고 다음에 구성을 새로 고치려고 하기 때문에 가끔 발생을 무시할 수 있습니다. 이 수준의 로그에서 잠재적인 문제를 나타낼 수 있는 반복적인 경고를 모니터링할 수 있습니다. 예를 들어 연결 문자열을 회전했지만 애플리케이션을 업데이트하는 것을 잊어버렸습니다.

    다음 예제와 Verbose 같이 매개 변수를 지정하여 EventLevel.Verbose 이벤트 수준에서 로깅을 사용하도록 설정할 수 있습니다. 이러한 지침은 다른 모든 이벤트 수준에도 적용됩니다. 이 예제에서는 Microsoft-Extensions-Configuration-AzureAppConfiguration-Refresh 범주에 대해서만 로그를 활성화합니다.

    using var listener = new AzureEventSourceListener((eventData, text) =>
    {
        if (eventData.EventSource.Name == "Microsoft-Extensions-Configuration-AzureAppConfiguration-Refresh")
        {
            Console.WriteLine("[{1}] {0}: {2}", eventData.EventSource.Name, eventData.Level, text);
        }
    }, EventLevel.Verbose);
    
  • 로깅 범주는 각 로그 앞에 나타나는 Microsoft-Extensions-Configuration-AzureAppConfiguration-Refresh입니다. 각 이벤트 수준의 몇 가지 로그 예제는 다음과 같습니다.

    [Verbose] Microsoft-Extensions-Configuration-AzureAppConfiguration-Refresh:
    Key-value read from App Configuration. Change:'Modified' Key:'ExampleKey' Label:'ExampleLabel' Endpoint:'https://examplestore.azconfig.io'
    
    [Informational] Microsoft-Extensions-Configuration-AzureAppConfiguration-Refresh:
    Setting updated. Key:'ExampleKey'
    
    [Warning] Microsoft-Extensions-Configuration-AzureAppConfiguration-Refresh:
    A refresh operation failed while resolving a Key Vault reference.
    Key vault error. ErrorCode:'SecretNotFound' Key:'ExampleKey' Label:'ExampleLabel' Etag:'6LaqgBQM9C_Do2XyZa2gAIfj_ArpT52-xWwDSLb2hDo' SecretIdentifier:'https://examplevault.vault.azure.net/secrets/ExampleSecret'
    

비고

다음 패키지 중 버전 6.0.0 이상을 사용하는 경우 로깅이 가능합니다.

  • Microsoft.Extensions.Configuration.AzureAppConfiguration
  • Microsoft.Azure.AppConfiguration.AspNetCore
  • Microsoft.Azure.AppConfiguration.Functions.Worker

리소스 정리

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

중요합니다

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

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

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

다음 단계

이 자습서에서는 .NET 앱이 App Configuration에서 구성 설정을 동적으로 갱신하도록 설정했습니다. Azure 관리 ID를 사용하여 App Configuration에 대한 액세스를 간소화하는 방법을 알아보려면 다음 자습서를 계속 진행하세요.