자습서: ASP.NET Core 애플리케이션에서 대상 그룹 사용자에게 기능 롤아웃
이 자습서에서는 대상 필터를 사용하여 ASP.NET Core 애플리케이션의 대상 그룹 사용자에게 기능을 롤아웃합니다. 대상 필터에 대한 자세한 내용은 대상 그룹층을 대상 그룹으로 기능 롤아웃를 참조하세요.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정 만들기
- App Configuration 저장소. 저장소를 만듭니다.
- 대상 지정 필터가 있는 기능 플래그입니다. 기능 플래그를 만듭니다.
- .NET SDK 6.0 이상.
기능 플래그를 사용하여 웹 애플리케이션 만들기
이 섹션에서는 사용자가 이전에 만든 베타 기능 플래그에 로그인하고 사용할 수 있도록 하는 웹 애플리케이션을 만듭니다.
다음 명령을 사용하여 로컬 데이터베이스에 대해 인증하는 웹 애플리케이션을 만듭니다.
dotnet new webapp --auth Individual -o TestFeatureFlags
다음 NuGet 패키지에 대한 참조를 추가합니다.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore
App Configuration 저장소에 대한 연결 문자열을 저장합니다.
dotnet user-secrets init dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
애플리케이션에 Azure App Configuration 및 기능 관리를 추가합니다.
다음 코드로 Program.cs 파일을 업데이트합니다.
// Existing code in Program.cs // ... ... var builder = WebApplication.CreateBuilder(args); // Retrieve the App Config connection string string AppConfigConnectionString = builder.Configuration.GetConnectionString("AppConfig") ?? throw new InvalidOperationException("Connection string 'AppConfig' not found."); ; // Load feature flag configuration from Azure App Configuration builder.Configuration.AddAzureAppConfiguration(options => { options.Connect(AppConfigConnectionString); options.UseFeatureFlags(); }); // Add Azure App Configuration middleware to the container of services builder.Services.AddAzureAppConfiguration(); // Add feature management to the container of services builder.Services.AddFeatureManagement(); // The rest of existing code in Program.cs // ... ...
App Configuration 미들웨어를 사용하여 Azure App Configuration에서 구성 및 기능 플래그 새로 고침을 사용하도록 설정합니다.
Program.cs를 다음 코드로 업데이트합니다.
// Existing code in Program.cs // ... ... var app = builder.Build(); // Use Azure App Configuration middleware for dynamic configuration refresh app.UseAzureAppConfiguration(); // The rest of existing code in Program.cs // ... ...
Pages 디렉터리 아래에 베타라는 새로운 빈 Razor 페이지를 추가합니다. 여기에는 Beta.cshtml 및 Beta.cshtml.cs 파일 두 개가 포함되어 있습니다.
@page @model TestFeatureFlags.Pages.BetaModel @{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
Beta.cshtml.cs를 열고
FeatureGate
특성을BetaModel
클래스에 추가합니다.using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.FeatureManagement.Mvc; namespace TestFeatureFlags.Pages { [FeatureGate("Beta")] public class BetaModel : PageModel { public void OnGet() { } } }
Pages/_ViewImports.cshtml을 열고
@addTagHelper
지시문을 사용하여 기능 관리자 태그 도우미를 등록합니다.@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Pages/Shared 디렉터리에서 _Layout.cshtml을 엽니다. 아래 강조 표시된 줄에 표시된 대로 홈 및 개인 정보 탐색 모음 항목 사이에 새
<feature>
태그를 삽입합니다.<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3"> <div class="container"> <a class="navbar-brand" asp-area="" asp-page="/Index">TestAppConfigNet3</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse"> <ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a> </li> <feature name="Beta"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Beta">Beta</a> </li> </feature> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a> </li> </ul> </div> </div> </nav>
웹 애플리케이션에 대한 대상 지정 사용
대상 지정 필터는 사용자 ID와 사용자가 속한 그룹으로 구성된 사용자의 대상 지정 컨텍스트를 기반으로 사용자의 기능 상태를 평가합니다. 이 예에서는 로그인한 사용자의 이메일 주소를 사용자 ID로 사용하고 이메일 주소의 도메인 이름을 그룹으로 사용합니다.
다음 코드를 사용하여 ExampleTargetingContextAccessor.cs 파일을 추가합니다. 현재 요청에 로그인한 사용자에게 대상 지정 컨텍스트를 제공하려면
ITargetingContextAccessor
인터페이스를 구현합니다.using Microsoft.FeatureManagement.FeatureFilters; namespace TestFeatureFlags { public class ExampleTargetingContextAccessor : ITargetingContextAccessor { private const string TargetingContextLookup = "ExampleTargetingContextAccessor.TargetingContext"; private readonly IHttpContextAccessor _httpContextAccessor; public ExampleTargetingContextAccessor(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor ?? throw new ArgumentNullException(nameof(httpContextAccessor)); } public ValueTask<TargetingContext> GetContextAsync() { HttpContext httpContext = _httpContextAccessor.HttpContext; if (httpContext.Items.TryGetValue(TargetingContextLookup, out object value)) { return new ValueTask<TargetingContext>((TargetingContext)value); } List<string> groups = new List<string>(); if (httpContext.User.Identity.Name != null) { groups.Add(httpContext.User.Identity.Name.Split("@", StringSplitOptions.None)[1]); } TargetingContext targetingContext = new TargetingContext { UserId = httpContext.User.Identity.Name, Groups = groups }; httpContext.Items[TargetingContextLookup] = targetingContext; return new ValueTask<TargetingContext>(targetingContext); } } }
Program.cs 파일을 열고
WithTargeting
메서드를 호출하여 대상 지정 필터를 사용하도록 설정합니다. 기능 플래그 평가 중에 대상 지정 컨텍스트를 가져오기 위해 대상 지정 필터가 사용할ExampleTargetingContextAccessor
형식을 전달합니다.ExampleTargetingContextAccessor
가HttpContext
에서 로그인한 사용자 정보에 액세스할 수 있도록 서비스 컬렉션에HttpContextAccessor
를 추가합니다.// Existing code in Program.cs // ... ... // Add feature management to the container of services builder.Services.AddFeatureManagement() .WithTargeting<ExampleTargetingContextAccessor>(); // Add HttpContextAccessor to the container of services. builder.Services.AddHttpContextAccessor(); // The rest of existing code in Program.cs // ... ...
참고 항목
Blazor 애플리케이션의 경우 범위가 지정된 서비스로 기능 관리를 사용하도록 설정하기 위한 지침을 참조하세요.
대상 지정 필터 작동 중
애플리케이션을 빌드 및 실행합니다. 처음에는 ‘기본 백분율’ 옵션이 0으로 설정되므로 ‘베타’ 항목이 도구 모음에 표시되지 않습니다.
새 사용자 계정을 만들려면 오른쪽 상단에 있는 등록 링크를 선택합니다.
test@contoso.com
의 메일 주소를 사용합니다. 등록 확인 화면에서 여기를 클릭하여 계정을 확인합니다.를 선택합니다.계정 등록 시 설정한 암호를 사용하여
test@contoso.com
으로 로그인합니다.test@contoso.com
이 대상 사용자로 지정되므로 이제 ‘베타’ 항목이 도구 모음에 표시됩니다.이제 계정 등록 시 설정한 암호를 사용하여
testuser@contoso.com
으로 로그인합니다.testuser@contoso.com
이 제외된 사용자로 지정되므로 도구 모음에 ‘베타’ 항목이 표시되지 않습니다.@contoso.com
및@contoso-xyz.com
이메일 주소로 더 많은 사용자를 만들어 그룹 설정 동작을 확인할 수 있습니다.이메일 주소가
contoso-xyz.com
개인 사용자에게는 베타 항목이 표시되지 않습니다.@contoso.com
이메일 주소를 사용하는 사용자 중 50%에게는 ‘베타’ 항목이 표시되지만, 나머지 50%에게는 ‘베타’ 항목이 나타나지 않습니다.
다음 단계
기능 필터에 대해 자세히 알아보려면 다음 자습서를 계속 진행합니다.
.NET 기능 관리 라이브러리의 전체 기능 요약을 보려면 다음 문서를 계속 진행합니다.