앱 구성 개념 검토
분산 환경에 대한 마이크로 서비스를 만드는 것은 중요한 과제입니다. 클라우드 호스팅 마이크로 서비스는 종종 다양한 지역의 여러 컨테이너에서 실행됩니다. 각 서비스의 코드를 구성과 분리하는 솔루션을 구현하면 모든 환경에서 문제를 쉽게 심사할 수 있습니다.
이 단원에서는 ASP.NET Core 및 Docker 구성 기능을 Azure App Configuration과 통합하여 이 문제를 효과적인 방법으로 해결하는 방법을 알아보세요.
귀하는 다음 항목을 검토합니다.
- ASP.NET 핵심 구성 인프라입니다.
- Kubernetes 구성 추상화—ConfigMap.
- Azure App Configuration 서비스.
- .NET 기능 관리 라이브러리.
- 앱에서 구현된 기능 플래그 구성 요소입니다.
ASP.NET Core 구성
ASP.NET Core 프로젝트의 구성은 하나 이상의 .NET 구성 공급자에 포함되어 있습니다. 구성 공급자는 JSON 파일과 같은 특정 구성 원본에 대한 추상화입니다. 구성 원본의 값은 키-값 쌍의 컬렉션으로 표시됩니다.
ASP.NET Core 앱은 여러 구성 공급자를 등록하여 다양한 원본에서 설정을 읽을 수 있습니다. 기본 애플리케이션 호스트를 사용하면 여러 구성 공급자가 자동으로 등록됩니다. 다음 구성 원본은 나열된 순서대로 사용할 수 있습니다.
- JSON 파일(appsettings.json)
- JSON 파일(appsettings.{environment}.json)
- 사용자 비밀
- 환경 변수
- 명령줄
각 구성 공급자는 자체 키 값을 기여할 수 있습니다. 또한 모든 공급자는 자체보다 이전에 체인에 등록된 공급자의 값을 재정의할 수 있습니다. 주어진 등록 순서에 따르면 명령줄 매개 변수 UseFeatureManagement는 환경 변수 UseFeatureManagement를 재정의합니다. 마찬가지로 appsettings.json 내에 있는 UseFeatureManagement 키는 appsettings.Development.json에 저장된 UseFeatureManagement 키로 재정의될 수 있습니다.
구성 키 이름은 계층 구조를 설명할 수 있습니다. 예를 들어 eShop:Store:SeasonalSale 표기법은 eShop 앱의 Store 마이크로 서비스 내의 SeasonalSale 기능을 나타냅니다. 이 구조체는 구성 값을 개체 그래프 또는 배열에 매핑할 수도 있습니다.
중요합니다
일부 플랫폼은 환경 변수 이름의 콜론을 지원하지 않습니다. 플랫폼 간 호환성을 보장하기 위해 콜론() 대신 이중 밑줄(__:)을 사용하여 키를 구분합니다. 예를 들어, eShop__Store__SeasonalSale는 eShop:Store:SeasonalSale에 해당하는 크로스 플랫폼 표기법입니다.
ASP.NET Core는 ConfigurationBinder 를 사용하여 구성 값을 개체 및 배열에 매핑합니다. 키 이름에 대한 매핑은 대/소문자를 구분하지 않는 방식으로 발생합니다. 예를 들어, ConnectionString과 connectionstring은 동등한 키로 처리됩니다. 자세한 내용은 키와 값을 참조하세요.
Docker 구성
Docker에서 구성을 키-값 쌍 컬렉션으로 처리하는 하나의 추상화는 컨테이너 YAML 파일의 환경 변수 섹션입니다. 다음 코드 조각은 앱 docker-compose.yml 파일에서 발췌한 것입니다.
services:
frontend:
image: storeimage
build:
context: .
dockerfile: DockerfileStore
environment:
- ProductEndpoint=http://backend:8080
- ConnectionStrings:AppConfig=Endpoint=https://eshop-app-features.azconfig.io;Id=<ID>;Secret=<SECRET>
ports:
- "32000:8080"
depends_on:
- backend
파일 조각은 다음을 정의합니다.
- 앞의 코드 조각에서
environment강조 표시된 대로 YAML 파일의 섹션에 저장된 변수입니다. - 컨테이너화된 앱에 환경 변수로 표시됩니다.
- 마이크로 서비스 앱에서 .NET 구성 값을 유지하는 메커니즘입니다.
환경 변수는 Docker 컨테이너에서 호스트되는 앱에 런타임 구성을 제공하기 위한 플랫폼 간 메커니즘입니다.
Azure 애플리케이션 구성
중앙 집중식 구성 서비스는 마이크로 서비스 앱 및 기타 분산 앱에서 특히 유용합니다. 이 모듈에서는 특히 기능 플래그에 대한 구성 값을 중앙에서 관리하기 위한 서비스로 Azure App Configuration을 소개합니다. 이 서비스는 앱과 함께 구성을 배포할 때 발생하는 오류 문제 해결을 용이하게 합니다.
App Configuration은 미사용 및 전송 중 키 값을 암호화하는 완전 관리형 서비스입니다. 함께 저장된 구성 값은 앱을 다시 배포하거나 다시 시작할 필요 없이 실시간으로 업데이트할 수 있습니다.
ASP.NET Core 앱에서 Azure App Configuration은 구성 공급자로 등록됩니다. 공급자 등록 외에도 앱은 App Configuration 저장소에 대해 알지 못합니다. 구성 값은 .NET의 구성 추상화인 IConfiguration 인터페이스를 통해 검색할 수 있습니다.
기능 관리 라이브러리
기능 관리 라이브러리는 앱 내에서 기능 플래그를 관리하기 위한 표준화된 .NET API를 제공합니다. 라이브러리는 NuGet을 통해 명명 Microsoft.FeatureManagement 된 두 개의 서로 다른 패키지 형식으로 배포됩니다 Microsoft.FeatureManagement.AspNetCore. 후자의 패키지는 ASP.NET Core 프로젝트의 Razor 파일에서 사용할 태그 도우미를 제공합니다. 태그 도우미가 필요하지 않거나 ASP.NET Core 프로젝트에서 사용하지 않는 경우 이전 패키지로 충분합니다.
라이브러리는 위에 IConfiguration빌드됩니다. 이러한 이유로 Azure App Configuration 공급자를 포함하여 모든 .NET 구성 공급자와 호환됩니다. 라이브러리가 Azure App Configuration에서 분리되므로 구성 공급자를 통해 두 라이브러리의 통합이 가능합니다. 이 라이브러리를 Azure App Configuration과 결합하면 지원 인프라를 구현하지 않고도 기능을 동적으로 전환할 수 있습니다.
Azure App Configuration과 통합
Azure App Configuration 및 기능 관리 라이브러리의 통합을 이해하려면 ASP.NET Core 프로젝트의 Program.cs 파일에서 발췌한 다음을 참조하세요.
string connectionString = builder.Configuration.GetConnectionString("AppConfig");
// Load configuration from Azure App Configuration
builder.Configuration.AddAzureAppConfiguration(options => {
options.Connect(connectionString)
.UseFeatureFlags();
});
위의 코드 조각에서 다음을 수행합니다.
- 앱의
builder.Configuration메서드는 Azure App Configuration 저장소에 대한 구성 공급자를 등록하기 위해 호출됩니다.AddAzureAppConfiguration를 호출하여 구성 공급자를 등록합니다. - Azure App Configuration 공급자의 동작은 다음 옵션으로 구성됩니다.
- 메서드 호출에 전달된 연결 문자열을 통해 해당 Azure 서비스에 인증합니다
Connect. 연결 문자열은connectionString변수를 통해 검색됩니다. 등록된 구성 원본은builder.Configuration를 통해 사용할 수 있습니다. UseFeatureFlags에 대한 호출을 통해 기능 플래그 지원을 사용하도록 설정합니다.
- 메서드 호출에 전달된 연결 문자열을 통해 해당 Azure 서비스에 인증합니다
- Azure App Configuration 공급자는 다른 공급자들이 모두 등록된 후에 등록되므로 등록된 다른 모든 구성 공급자를 대체합니다.
팁 (조언)
ASP.NET Core 프로젝트에서 ConfigureAppConfiguration 안에 있는 configBuilder.Sources 속성을 분석하여 등록된 공급자 목록에 액세스할 수 있습니다.