Dapr를 .NET Aspire과 함께 사용
분산 애플리케이션 런타임(Dapr) 다른 서비스 및 종속성과 상호 작용하고 해당 서비스 및 종속성의 세부 사항에서 애플리케이션을 추상화하기 위한 통로 역할을 하는 개발자 API를 제공합니다. Dapr 및 .NET Aspire 함께 작동하여 로컬 개발 환경을 개선합니다. Dapr .NET Aspire 사용하면 로컬 온보딩에 추가 시간을 소비하는 대신 .NET기반 분산 애플리케이션을 작성하고 구현하는 데 집중할 수 있습니다.
이 가이드에서는 클라우드 기술의 Dapr추상화 및 .NET Aspire의견 중심의 설정을 활용하여 Azure규모에 맞게 간단하고 이식 가능하며 복원력 있고 안전한 마이크로 서비스를 구축하는 방법을 배웁니다.
필수 구성 요소
.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참조하세요.
.NET .NET Aspire필수 조건 외에도 다음이 필요합니다.
- Dapr 버전 1.13 이상
Dapr설치하려면 Dapr CLI설치를 참조하세요.
중요하다
Dapr CLI 없이 앱을 실행하려고 하면 다음 오류가 발생합니다.
Unable to locate the Dapr CLI.
시작
시작하려면 Dapr NuGet 패키지를 설치하여 앱 호스트 프로젝트에 호스팅 패키지를 추가해야 합니다.
dotnet add package Aspire.Hosting.Dapr
자세한 내용은 dotnet add package 또는 manage package dependencies in .NET applications.
Dapr 사이드카 추가
Dapr 사이드카 패턴를 사용하여 애플리케이션과 함께 실행됩니다. Dapr 사이드카는 귀하의 앱과 함께 가볍고 이식 가능하며 무상태인 HTTP server로 실행되어, 앱에서 들어오는 HTTP 요청을 수신 대기합니다.
사이드카를 .NET.NET Aspire 리소스에 추가하려면 원하는 리소스에서 WithDaprSidecar 메서드를 호출합니다.
appId
매개 변수는 Dapr 애플리케이션의 고유 식별자이지만 선택 사항입니다.
appId
제공하지 않으면 부모 리소스 이름이 대신 사용됩니다.
using Aspire.Hosting.Dapr;
var builder = DistributedApplication.CreateBuilder(args);
var apiService = builder
.AddProject<Projects.Dapr_ApiService>("apiservice")
.WithDaprSidecar();
WithDaprSidecar
메서드는 오버로드 기능을 통해 앱 ID 및 포트와 같은 Dapr 사이드카 옵션을 구성할 수 있도록 합니다. 다음 예제에서 Dapr 사이드카는 GRPC, HTTP, 메트릭 및 특정 앱 ID에 대한 특정 포트로 구성됩니다.
DaprSidecarOptions sidecarOptions = new()
{
DaprGrpcPort = 50001,
DaprHttpPort = 3500,
MetricsPort = 9090
};
builder.AddProject<Projects.Dapr_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WithDaprSidecar(sidecarOptions);
모든 항목을 함께 배치하면 다음 예제를 포함하는 .NET.NET Aspire 앱 호스트 프로젝트의 예제를 살펴보겠습니다.
- 기본값을 가진 Dapr 사이드카를 선언하는 백엔드 API입니다.
- 특정 포트와 옵션을 명시하여 Dapr 사이드카를 선언하는 프런트엔드입니다.
using Aspire.Hosting.Dapr;
var builder = DistributedApplication.CreateBuilder(args);
var apiService = builder
.AddProject<Projects.Dapr_ApiService>("apiservice")
.WithDaprSidecar();
DaprSidecarOptions sidecarOptions = new()
{
DaprGrpcPort = 50001,
DaprHttpPort = 3500,
MetricsPort = 9090
};
builder.AddProject<Projects.Dapr_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WithDaprSidecar(sidecarOptions);
builder.Build().Run();
.NET Aspire 대시보드는 상태 및 로그를 사용하여 Dapr 사이드카를 리소스로 표시합니다.
Dapr SDK 추가
Dapr 리소스에서 .NET Aspire API를 사용하려면 📦Dapr를 사용할 수 있습니다. .AspNetCore/. Dapr SDK는 Dapr 사이드카와 상호 작용하는 API 집합을 제공합니다.
메모
Dapr.AspNetCore
(DI 통합, 구독 등록 등)와 Dapr 통합하려면 ASP.NET 라이브러리를 사용합니다. 비ASP.NET 앱(예: 콘솔 앱)은 📦Dapr사용할 수 있습니다.ClientDapr 사이드카를 통해 전화를 걸 수 있습니다.
dotnet add package Dapr.AspNetCore
ASP.NET Core 프로젝트에 설치되면 SDK를 서비스 작성기에 추가할 수 있습니다.
builder.Services.AddDaprClient();
이제 DaprClient
인스턴스를 서비스에 삽입하여 Dapr SDK를 통해 Dapr 사이드카와 상호 작용할 수 있습니다.
using Dapr.Client;
namespace Dapr.Web;
public class WeatherApiClient(DaprClient client)
{
public async Task<WeatherForecast[]> GetWeatherAsync(
int maxItems = 10, CancellationToken cancellationToken = default)
{
List<WeatherForecast>? forecasts =
await client.InvokeMethodAsync<List<WeatherForecast>>(
HttpMethod.Get,
"apiservice",
"weatherforecast",
cancellationToken);
return forecasts?.Take(maxItems)?.ToArray() ?? [];
}
}
public record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
InvokeMethodAsync
Dapr 사이드카에 HTTP 요청을 보내는 방법입니다. 다음을 수행하는 제네릭 메서드입니다.
- HTTP 동사
- 호출할 서비스의 Dapr 앱 ID
- 메서드 이름
- 취소 토큰
HTTP 동사에 따라 요청 본문 및 헤더를 사용할 수도 있습니다. 제네릭 형식 매개 변수는 응답 본문의 형식입니다.
프런트 엔드 프로젝트의 전체 Program.cs 파일은 다음을 보여줍니다.
- 서비스 빌더에 추가되는 Daprclient
-
WeatherApiClient
Dapr 사용하여 백 엔드 서비스를 호출하는 client 클래스
using Dapr.Web;
using Dapr.Web.Components;
var builder = WebApplication.CreateBuilder(args);
// Add service defaults & Aspire components.
builder.AddServiceDefaults();
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddOutputCache();
builder.Services.AddDaprClient();
builder.Services.AddTransient<WeatherApiClient>();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAntiforgery();
app.UseOutputCache();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.MapDefaultEndpoints();
app.Run();
예를 들어 Blazor 프로젝트에서 WeatherApiClient
클래스를 통합에 삽입하고 백 엔드 서비스를 호출하는 데 사용할 수 있습니다.
@page "/weather"
@attribute [StreamRendering(true)]
@attribute [OutputCache(Duration = 5)]
@inject WeatherApiClient WeatherApi
<PageTitle>Weather</PageTitle>
<h1>Weather</h1>
<p>This component demonstrates showing data loaded from a backend API service.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@code {
private WeatherForecast[]? forecasts;
protected override async Task OnInitializedAsync()
{
forecasts = await WeatherApi.GetWeatherAsync();
}
}
Dapr SDK를 사용하면 Dapr 사이드카가 HTTP를 통해 호출됩니다. 그런 다음 Dapr 사이드카가 대상 서비스에 요청을 전달합니다. 대상 서비스는 사이드카와 별도의 프로세스에서 실행되는 동안 서비스와 관련된 통합은 Dapr 사이드카에서 실행되며 서비스 검색 및 대상 서비스로의 라우팅을 담당합니다.
Dapr 및 .NET Aspire
처음에는 Dapr와 .NET Aspire이 기능이 겹치는 것처럼 보일 수 있습니다. 그러나 둘 다 다른 접근 방식을 취합니다. .NET .NET Aspire 클라우드 플랫폼에서 분산 애플리케이션을 빌드하는 방법에 대한 의견 접근 방식입니다. Dapr 기본 클라우드 플랫폼의 일반적인 복잡성을 추상화하는 런타임입니다. 사이드카를 사용하여 구성, 비밀 관리 및 메시징과 같은 추상화 작업을 제공합니다. 기본 기술은 구성 파일을 통해 쉽게 전환할 수 있지만 코드는 변경할 필요가 없습니다.
.NET Aspire Dapr 사이드카를 구성하는 간단한 API를 제공하고 사이드카를 대시보드에 리소스로 노출하여 Dapr 애플리케이션을 더 쉽게 설정하고 디버깅할 수 있습니다.
Dapr 사용하여 .NET Aspire 구성 요소 살펴보기
- Dapr— 상태 저장소: AddDaprStateStore 호출하여 구성된 상태 저장소를 .NET.NET Aspire 프로젝트에 추가합니다.
- Dapr— Pub Sub: AddDaprPubSub을 호출하여 구성된 Pub Sub을 .NET.NET Aspire 프로젝트에 추가합니다.
- Dapr— 구성 요소: AddDaprComponent 호출하여 구성된 통합을 .NET.NET Aspire 프로젝트에 추가합니다.
다음 단계
샘플 앱 .NET AspireDapr
.NET Aspire