자습서: .NET.NET Aspire 통합을 사용하여 캐싱 구현
클라우드 네이티브 앱은 성능을 향상시키기 위해 다양한 유형의 확장 가능한 캐싱 솔루션이 필요한 경우가 많습니다. .NET Aspire 통합은 Redis같은 인기 있는 캐싱 서비스에 연결하는 프로세스를 간소화합니다. 이 문서에서는 다음 방법을 알아봅니다.
- ASP.NET사용하도록 설정된 기본 .NET Aspire 핵심 앱을 만듭니다.
- .NET Aspire 통합을 추가하여 Redis과 연결하고 데이터를 캐싱합니다.
- 특정 요구 사항을 충족하도록 .NET.NET Aspire 통합을 구성합니다.
이 문서에서는 ASP.NET Core 및 .NET Aspire사용하여 두 가지 유형의 Redis 캐싱을 사용하는 방법을 살펴봅니다.
- 출력 캐싱: 향후 요청에 대한 전체 HTTP 응답을 저장하기 위한 구성 가능하고 확장 가능한 캐싱 방법입니다.
- 분산 캐싱: 특정 데이터를 캐시할 수 있는 여러 앱 서버에서 공유하는 캐시입니다. 분산 캐시는 일반적으로 액세스하는 앱 서버에 대한 외부 서비스로 유지 관리되며 ASP.NET Core 앱의 성능과 확장성을 향상시킬 수 있습니다.
필수 구성 요소
.NET .NET Aspire작업하려면 다음을 로컬에 설치해야 합니다.
- .NET 8.0 또는 .NET 9.0
- OCI 규격의 컨테이너 런타임(예를 들어,
- Docker 데스크톱 또는 Podman. 자세한 내용은 컨테이너 런타임참조하세요.
- IDE(통합 개발자 환경) 또는 코드 편집기(예:
- Visual Studio 2022 버전 17.9 이상(선택 사항)
-
Visual Studio Code(선택 사항)
- C# Dev Kit: 확장(선택 사항)
- JetBrains Rider 과(와) .NET.NET Aspire 플러그인 (선택 사항)
자세한 내용은 .NET.NET Aspire 설정 및 도구및 .NET.NET Aspire SDK참조하세요.
프로젝트 만들기
- Visual Studio맨 위에서 파일>새>프로젝트....
- 대화 상자 창에서 프로젝트 템플릿 검색 상자에 .NET Aspire 입력하고 .NET.NET Aspire 시작 애플리케이션선택합니다. 다음선택합니다.
-
새 프로젝트를 구성하는 화면에서 다음을 수행합니다.
- 프로젝트 이름 을 AspireRedis로 입력합니다.
- 값의
기본값으로 두고 다음 선택합니다.
-
추가 정보 화면에서 다음을 수행합니다.
- .NET 9.0 선택되어 있는지 확인합니다.
- 의 선택을 해제하고 Redis을캐싱에 사용하십시오. 당신은 자신의 캐싱 설정을 구현할 것입니다.
- 선택만들기.
Visual Studio 다음 프로젝트로 구성된 새 .NET Aspire 솔루션을 만듭니다.
- AspireRedis.Web - 기본 Blazor 구성이 있는 .NET Aspire UI 프로젝트입니다.
- AspireRedis.ApiService - 프런트 엔드에 데이터를 제공하는 기본 .NET.NET Aspire 구성이 있는 최소 API입니다.
- AspireRedis.AppHost - 앱의 다양한 프로젝트와 서비스를 연결하고 구성하도록 설계된 오케스트레이터 프로젝트입니다.
- ko-KR: AspireRedis.ServiceDefaults - .NET, .NET Aspire및 원격 분석관련 솔루션의 프로젝트에 걸쳐 재사용되는 구성을 관리하는 공유 프로젝트입니다.
앱 호스트 프로젝트 구성
📦 프로젝트에
AspireRedis.AppHost
추가합니다.dotnet add package Aspire.Hosting.Redis
자세한 내용은 dotnet add package 또는 .NET 애플리케이션에서 패키지 종속성을 관리하기를 참조하십시오.
다음 코드와 일치하도록 Program.cs 프로젝트의
AspireRedis.AppHost
파일을 업데이트합니다.var builder = DistributedApplication.CreateBuilder(args); var redis = builder.AddRedis("cache"); var apiservice = builder.AddProject<Projects.AspireRedis_ApiService>("apiservice") .WithReference(redis); builder.AddProject<Projects.AspireRedis_Web>("webfrontend") .WithExternalHttpEndpoints() .WithReference(apiservice) .WithReference(redis); builder.Build().Run();
위의 코드는 로컬 Redis 컨테이너 인스턴스를 만들고 출력 및 분산 캐싱 모두에 인스턴스를 자동으로 사용하도록 UI 및 API를 구성합니다. 또한 이 코드는 서비스 검색을 사용하여 프런트 엔드 UI와 백 엔드 API 간의 통신을 구성합니다. .NET .NET Aspire암시적 서비스 검색을 사용하면 개발자 생산성을 위해 서비스 연결 설정 및 관리가 간소화됩니다. 이 자습서에서 이 기능은 Redis에 연결하는 것을 더 쉽게 만들어 줍니다.
일반적으로 각 프로젝트의 Redis 파일에서 appsettings.json 연결 문자열을 수동으로 지정합니다.
{
"ConnectionStrings": {
"cache": "localhost:6379"
}
}
이 메서드를 사용하여 연결 문자열을 구성하려면 작동하는 동안 여러 프로젝트에서 연결 문자열을 복제해야 하며 이는 번거롭고 오류가 발생하기 쉽습니다.
출력 캐싱을 사용하여 UI 구성
.NET Aspire Stack Exchange Redis 출력 캐싱 통합 패키지를
AspireRedis.Web
앱에 추가합니다.dotnet add package Aspire.StackExchange.Redis.OutputCaching
Program.cs
AspireRedis.Web
프로젝트의 Blazor 파일에서 줄var builder = WebApplication.CreateBuilder(args);
바로 후에 AddRedisOutputCache 확장 메서드에 대한 호출을 추가합니다.builder.AddRedisOutputCache("cache");
이 메서드는 다음 작업을 수행합니다.
- 지정된 연결 이름으로 ASP.NET Core 인스턴스를 사용하도록 Redis 출력 캐싱을 구성합니다.
- 해당 상태 검사, 로깅 및 원격 분석을 자동으로 사용하도록 설정합니다.
AspireRedis.Web
프로젝트의 Blazor 파일의 내용을 다음으로 바꿉니다.@page "/" @attribute [OutputCache(Duration = 10)] <PageTitle>Home</PageTitle> <h1>Hello, world!</h1> Welcome to your new app on @DateTime.Now
통합에는 렌더링된 전체 응답을 캐시하는
[OutputCache]
특성이 포함됩니다. 페이지에는 응답이 캐시되었는지 확인하는 데 도움이 되는@DateTime.Now
호출도 포함되어 있습니다.
분산 캐싱을 사용하여 API 구성
.NET Aspire Stack Exchange Redis 분산 캐싱 통합 패키지를
AspireRedis.ApiService
앱에 추가합니다.dotnet add package Aspire.StackExchange.Redis.DistributedCaching
Program.cs 파일의 위쪽에 AddRedisDistributedCache호출을 추가합니다.
builder.AddRedisDistributedCache("cache");
Program.cs 파일에서 다음
using
문장을 추가합니다.using System.Text; using System.Text.Json; using Microsoft.Extensions.Caching.Distributed;
Program.cs 파일에서 기존
/weatherforecast
엔드포인트 코드를 다음으로 바꿉다.app.MapGet("/weatherforecast", async (IDistributedCache cache) => { var cachedForecast = await cache.GetAsync("forecast"); if (cachedForecast is null) { var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; var forecast = Enumerable.Range(1, 5).Select(index => new WeatherForecast ( DateOnly.FromDateTime(DateTime.Now.AddDays(index)), Random.Shared.Next(-20, 55), summaries[Random.Shared.Next(summaries.Length)] )) .ToArray(); await cache.SetAsync("forecast", Encoding.UTF8.GetBytes(JsonSerializer.Serialize(forecast)), new () { AbsoluteExpiration = DateTime.Now.AddSeconds(10) }); ; return forecast; } return JsonSerializer.Deserialize<IEnumerable<WeatherForecast>>(cachedForecast); }) .WithName("GetWeatherForecast");
로컬로 앱 테스트
다음 단계를 사용하여 앱의 캐싱 동작을 테스트합니다.
- Visual Studio눌러 사용하여 앱을 실행합니다.
- 시작 Docker Desktop 대화 상자가 나타나면 예 선택하여 서비스를 시작합니다.
- .NET .NET Aspire 대시보드는 브라우저에서 로드되고 UI 및 API 프로젝트를 나열합니다.
출력 캐시를 테스트합니다.
- 프로젝트 페이지의 webfrontend 행에서
localhost
열의 링크를 클릭하여 앱의 UI를 엽니다. - 애플리케이션은 홈페이지에 현재 시간을 표시합니다.
- 출력 캐싱에서 반환된 동일한 페이지를 보려면 몇 초마다 브라우저를 새로 고칩니다. 10초 후에 캐시가 만료되고 페이지가 업데이트된 시간으로 다시 로드됩니다.
분산 캐시 테스트:
- UI의 Blazor 페이지로 이동하여 임의 날씨 데이터 테이블을 로드합니다.
- 출력 캐싱에서 반환된 것과 동일한 날씨 데이터를 보려면 몇 초마다 브라우저를 새로 고칩니다. 10초 후에 캐시가 만료되고 업데이트된 날씨 데이터로 페이지가 다시 로드됩니다.
축하합니다! ASP.NET Core 앱을 .NET Aspire출력 및 분산 캐싱을 사용하도록 구성했습니다.
.NET Aspire