이 샘플에서는 흐름과 함께 DefaultAzureCredential Microsoft Entra ID 인증을 사용하여 ASP.NET Core Web API를 Azure Managed Redis에 연결하는 방법을 보여 줍니다. 애플리케이션은 최신 보안 모범 사례에 부합하는 토큰 기반 Microsoft Entra ID 액세스를 위해 기존의 연결 문자열 기반 인증을 방지합니다.
애플리케이션은 다음과 같은 최소 ASP.NET Core 8.0 Web API입니다.
- 시작 시 Azure Managed Redis에 대한 안전하고 인증된 연결을 설정합니다.
- 캐시에 데이터를 읽고 쓰는 간단한 REST 엔드포인트를 노출합니다.
- 종속성 주입을 사용하여 적절한 Redis 연결 수명 주기 관리를 보여 줍니다.
GitHub의 코드로 건너뛰기
GitHub에서 Microsoft.Azure.StackExchangeRedis 리포지토리를 복제합니다.
필수 조건
- .NET 8.0 SDK.
- Azure 구독에 프로비전된 Azure Managed Redis 인스턴스입니다.
- Azure 사용자 또는 서비스 주체는 캐시에서 Redis 사용자로 추가되어야 합니다. Azure Portal에서 리소스 메뉴의 인증 으로 이동하여 사용자 또는 서비스 주체를 선택하고 ID를 추가합니다.
- 로컬 개발 인증을 위한 Azure CLI입니다.
필수 NuGet 패키지
| Package | 목적 |
|---|---|
Microsoft.Azure.StackExchangeRedis |
Azure Managed Redis에 대한 Microsoft Entra ID 토큰 기반 인증을 사용하도록 설정하는 StackExchange.Redis에 대한 확장 메서드 |
StackExchange.Redis |
.NET용 기본 Redis 클라이언트 라이브러리 |
Azure.Identity |
Azure 서비스 인증에 필요한 DefaultAzureCredential 및 기타 자격 증명 유형을 제공합니다. |
Swashbuckle.AspNetCore |
API 설명서 및 테스트에 대한 Swagger/OpenAPI 지원 |
기본 패키지를 설치합니다.
dotnet add package Microsoft.Azure.StackExchangeRedis
이 패키지는 StackExchange.Redis 및 Azure.Identity을(를) 종속성으로 가져옵니다.
구성 / 설정
애플리케이션은 구성에서 Redis 엔드포인트를 읽습니다. 다음과 같이 appsettings.Development.json를 업데이트합니다.
{
"Redis": {
"Endpoint": "<your-redis-name>.<region>.redis.azure.net:10000"
}
}
비고
Azure Managed Redis는 기본적으로 포트 10000 를 사용합니다. 엔드포인트 형식은 다음과 같습니다.<cache-name>.<region>.redis.azure.net:10000
인증 흐름
로컬 개발
애플리케이션을 로컬로 실행하기 전에 Azure를 사용하여 인증합니다.
az login
DefaultAzureCredential Azure CLI 자격 증명을 자동으로 선택하고 이를 사용하여 Redis 리소스에 대한 액세스 토큰을 가져옵니다. 이 접근법을 사용하면 비밀 정보를 로컬에서 관리하거나 갱신할 필요가 없습니다.
프로덕션 환경
App Service, Container Apps 및 AKS와 같은 Azure 호스팅 환경에서는 다음을 DefaultAzureCredential 사용합니다.
- 관리 ID - 시스템 할당 또는 사용자 할당
- 워크로드 ID - Kubernetes 시나리오용
- 환경 변수 - 서비스 주체 인증
코드를 변경할 필요가 없습니다. 동일한 DefaultAzureCredential은 환경에 원활하게 적응합니다.
아키텍처
Redis 서비스(Services/Redis.cs)
클래스는 Redis 연결 수명 주기를 관리합니다.
var options = new ConfigurationOptions()
{
EndPoints = { endpoint },
LoggerFactory = _loggerFactory,
};
await options.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());
_connection = await ConnectionMultiplexer.ConnectAsync(options);
주요 정보:
-
ConfigureForAzureWithTokenCredentialAsync는 토큰 기반 인증을 설정하는 확장 메서드Microsoft.Azure.StackExchangeRedis입니다. -
DefaultAzureCredential토큰 획득 및 새로 고침을 자동으로 처리합니다. - 앱은 시작 시 연결을 한 번 설정하고 요청 간에 공유합니다.
종속성 주입(Program.cs)
앱은 Redis 서비스를 싱글톤으로 등록하고 시작하는 동안 초기화합니다.
builder.Services.AddSingleton<Redis>();
// Initialize Redis connection
using (var scope = app.Services.CreateScope())
{
var redis = scope.ServiceProvider.GetRequiredService<Redis>();
var endpoint = app.Configuration.GetValue<string>("Redis:Endpoint");
await redis.ConnectAsync(endpoint);
}
API 컨트롤러(Controllers/SampleController.cs)
컨트롤러는 Redis 서비스를 삽입하고 기본 캐시 작업을 시연합니다.
-
GET
/Sample: 캐시에서 이전 방문 타임스탬프를 읽고 현재 시간으로 업데이트합니다.
애플리케이션 실행
인증되었는지 확인합니다.
az loginappsettings.Development.json에서 Redis 엔드포인트를 업데이트합니다.애플리케이션을 실행합니다.
dotnet runSwagger UI에 액세스하려면
https://localhost:<port>/swagger이동합니다.
예상 출력
엔드포인트를 호출하는 경우 GET /Sample :
첫 번째 요청:
Previous visit was at:
(Empty value since no previous visit exists)
**Subsequent requests:**
Previous visit was at: 2026-01-30T14:23:45
(Returns the ISO 8601 formatted timestamp of the previous request)
콘솔 로그는 다음을 표시합니다.
info: Microsoft.Azure.StackExchangeRedis.Sample.AspNet.Controllers.SampleController
Handled GET request. Previous visit time: 2026-01-30T14:23:45
주요 구현 세부 정보
토큰 새로 고침: 라이브러리는
Microsoft.Azure.StackExchangeRedis만료되기 전에 토큰을 자동으로 새로 고치므로 새로 고침을 수동으로 처리할 필요가 없습니다.연결 복원력:
ConnectionMultiplexerStackExchange.Redis에서 자체적으로 다시 연결 논리를 관리합니다.리소스 정리: 애플리케이션이
RedisIDisposable종료되면 서비스가 연결을 제대로 닫도록 구현합니다.로깅 통합: Redis 클라이언트는 통합 로깅 출력을 위해 .NET과 함께 작동합니다
ILoggerFactory.
Troubleshooting
| 문제 | 해결 방법 |
|---|---|
No connection is available |
엔드포인트 형식 및 포트(10000)를 확인합니다. Redis 인스턴스가 프로비전되고 액세스할 수 있는지 확인합니다. |
AuthenticationFailedException |
자격 증명을 새로 고치려면 실행 az login 합니다. 리소스 메뉴의 인증 에서 ID가 Redis 사용자로 추가되었는지 확인합니다. |
Unauthorized |
Microsoft Entra ID ID가 Azure Managed Redis 인스턴스에서 Redis 사용자로 추가되었는지 확인합니다. 자세한 내용은 캐시 인증에 Microsoft Entra ID 사용을 참조하세요. |