빠른 시작: .NET 앱과 함께 Azure Cache for Redis 사용

이 빠른 시작에서는 Azure Cache for Redis를 .NET 앱에 통합하여 Azure의 모든 애플리케이션에서 액세스할 수 있는 안전한 전용 캐시에 액세스합니다. 구체적으로 .NET 콘솔 앱에서 C# 코드를 통해 StackExchange.Redis 클라이언트를 사용합니다.

GitHub의 코드로 건너뛰기

이 문서에서는 샘플 앱의 코드를 수정하여 Azure Cache for Redis에 연결되는 동작하는 앱을 만드는 방법을 설명합니다.

바로 코드로 이동하려면 GitHub의 .NET 빠른 시작 샘플을 참조하세요.

필수 구성 요소

캐시 만들기

  1. 캐시를 만들려면 Azure Portal에 로그인합니다. 포털 메뉴에서 리소스 만들기를 선택합니다.

    Azure Portal의 왼쪽 탐색 창에 강조 표시된 리소스 만들기 옵션을 보여 주는 스크린샷.

  2. 시작 창의 검색 창에서 Azure Cache for Redis를 입력합니다. 검색 결과에서 Azure Cache for Redis를 찾은 다음, 만들기를 선택합니다.

    검색 상자에서 Azure Cache for Redis가 있는 Azure Marketplace를 보여 주는 스크린샷. 만들기 단추가 강조 표시됩니다.

  3. 새 Redis Cache 창의 기본 탭에서 캐시에 대해 다음 설정을 구성합니다.

    설정 작업 설명
    구독 Azure 구독을 선택합니다. Azure Cache for Redis의 새 인스턴스를 만드는 데 사용할 구독입니다.
    리소스 그룹 리소스 그룹을 선택하거나 새로 만들기를 선택하고 새 리소스 그룹 이름을 입력합니다. 캐시 및 기타 리소스를 만들 리소스 그룹의 이름입니다. 모든 앱 리소스를 하나의 리소스 그룹에 배치하면 앱 리소스를 쉽게 관리하거나 삭제할 수 있습니다.
    DNS 이름 고유한 이름을 입력합니다. 캐시 이름은 숫자, 문자 및 하이픈만 포함하는 1~63자의 문자열이어야 합니다. 이름은 숫자 또는 문자로 시작하고 끝나야 하며 연속 하이픈을 포함할 수 없습니다. 캐시 인스턴스의 호스트 이름\<DNS name>.redis.cache.windows.net입니다.
    위치 위치를 선택합니다. 캐시를 사용하는 다른 서비스 근처에 있는 Azure 지역.
    캐시 SKU SKU를 선택합니다. SKU는 캐시에 사용할 수 있는 크기, 성능 및 기능 매개 변수를 결정합니다. 자세한 내용은 Azure Cache for Redis 개요를 참조하세요.
    캐시 크기 캐시 크기를 선택합니다. 자세한 내용은 Azure Cache for Redis 개요를 참조하세요.
  4. 네트워킹 탭을 선택하거나 다음: 네트워킹을 선택합니다.

  5. 네트워킹 탭에서 캐시에 사용할 연결 방법을 선택합니다.

  6. 고급 탭을 선택하거나 다음: 고급을 선택합니다.

  7. 고급 창에서 다음 정보에 따라 인증 방법을 확인하거나 선택합니다.

    고급 창과 선택할 수 있는 옵션을 보여 주는 스크린샷.

    • 기본적으로 새 기본, 표준 또는 프리미엄 캐시의 경우 Microsoft Entra 인증이 활성화되고 액세스 키 인증이 비활성화됩니다.
    • 기본 또는 표준 캐시의 경우 비 TLS 포트 선택 영역을 선택/해제할 수 있습니다.
    • 표준 및 프리미엄 캐시의 경우 가용성 영역을 사용하도록 선택할 수 있습니다. 캐시를 만든 후에는 가용성 영역을 비활성화할 수 없습니다.
    • 프리미엄 캐시의 경우 비 TLS 포트, 클러스터링, 관리 ID 및 데이터 지속성에 대한 설정을 구성합니다.

    Important

    최적의 보안을 위해 관리 ID와 함께 Microsoft Entra ID를 사용하여 가능한 경우 캐시에 대한 요청에 권한을 부여하는 것이 좋습니다. Microsoft Entra ID 및 관리 ID를 사용하여 권한 부여는 공유 액세스 키 권한 부여를 통해 뛰어난 보안 및 사용 편의성을 제공합니다. 캐시에서 관리 ID를 사용하는 방법에 대한 자세한 내용은 캐시 인증 Microsoft Entra ID를 사용합니다.

  8. (선택 사항) 태그 탭을 선택하거나 다음: 태그를 선택합니다.

  9. (선택 사항) 태그 탭에서 캐시 리소스를 분류하려는 경우 태그 이름과 값을 입력합니다.

  10. 검토 + 만들기 단추를 선택합니다.

    검토 + 만들기 탭에서 Azure는 자동으로 구성의 유효성을 검사합니다.

  11. 녹색 유효성 검사 통과 메시지가 표시되면 만들기를 선택합니다.

새 캐시 배포는 몇 분 동안 발생합니다. Azure Cache for Redis 개요 창에서 배포 진행률을 모니터링할 수 있습니다. 상태실행 표시되면 캐시를 사용할 준비가 됩니다.

호스트 이름, 포트 및 액세스 키 가져오기

Azure Cache for Redis 서버에 연결하려면 캐시 클라이언트에 캐시의 호스트 이름, 포트 및 액세스 키가 필요합니다. 일부 클라이언트는 약간 다른 이름을 사용하여 이러한 항목을 언급할 수 있습니다. Azure Portal에서 호스트 이름, 포트 및 키를 가져올 수 있습니다.

  • 캐시에 대한 액세스 키를 가져오려면:

    1. Azure Portal에서 캐시로 이동합니다.
    2. 서비스 메뉴의 설정 아래에서 인증을 선택합니다.
    3. 인증 창에서 액세스 키 탭을 선택합니다.
    4. 액세스 키 값을 복사하려면 키 필드에서 복사 아이콘을 선택합니다.

    Azure Cache for Redis 인스턴스에 대한 액세스 키를 찾아 복사하는 방법을 보여 주는 스크린샷.

  • 캐시에 대한 호스트 이름 및 포트를 가져오려면:

    1. Azure Portal에서 캐시로 이동합니다.
    2. 서비스 메뉴에서 개요를 선택합니다.
    3. Essentials 아래에서 호스트 이름의 경우 복사 아이콘을 선택하여 호스트 이름 값을 복사합니다. 호스트 이름 값에는 <DNS name>.redis.cache.windows.net 형식이 있습니다.
    4. 포트의 경우 복사 아이콘을 선택하여 포트 값을 복사합니다.

    Azure Cache for Redis 인스턴스에 대한 호스트 이름 및 포트를 찾아 복사하는 방법을 보여 주는 스크린샷.

  1. CacheSecrets.config라는 컴퓨터에서 파일을 만듭니다. *C:\AppSecrets* 폴더에 배치합니다.

  2. CacheSecrets.config 파일을 편집하여 다음 콘텐츠를 추가합니다.

    <appSettings>
        <add key="CacheConnection" value="<host-name>,abortConnect=false,ssl=true,allowAdmin=true,password=<access-key>"/>
    </appSettings>
    
    • <host-name>을 캐시 호스트 이름으로 바꿉니다.

    • <access-key>를 캐시에 대한 기본 키로 바꿉니다.

  3. 파일을 저장합니다.

캐시 클라이언트 구성

이 섹션에서는 .NET용 StackExchange.Redis 클라이언트를 사용하도록 콘솔 애플리케이션을 준비합니다.

  1. Visual Studio에서 도구>NuGet 패키지 관리자>패키지 관리자 콘솔을 선택합니다. 패키지 관리자 콘솔 창에서 다음 명령을 실행합니다.

    Install-Package StackExchange.Redis
    
  2. 설치가 완료되면 StackExchange.Redis 캐시 클라이언트를 프로젝트에서 사용할 수 있습니다.

비밀 캐시에 연결

Visual Studio에서 App.config 파일을 열어 CacheSecrets.config 파일을 참조하는 appSettings file 특성이 포함되어 있는지 확인합니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>

    <appSettings file="C:\AppSecrets\CacheSecrets.config"></appSettings>
</configuration>

소스 코드에 자격 증명을 저장하지 마세요. 여기에서는 간단한 샘플을 위해 외부 비밀 구성 파일이 사용됩니다. 더 나은 방법은 인증서로 Azure Key Vault를 사용하는 것입니다.

RedisConnection을 사용하여 캐시에 연결

캐시에 대한 연결은 RedisConnection 클래스로 관리합니다. 먼저 Program.cs에서 다음 문장으로 연결을 만듭니다.

     _redisConnection = await RedisConnection.InitializeAsync(connectionString: ConfigurationManager.AppSettings["CacheConnection"].ToString());


CacheConnection appSetting 값은 암호 매개 변수로 Azure Portal에서 캐시 연결 문자열을 참조하는 데 사용됩니다.

RedisConnection.cs에서 StackExchange.Redis 네임스페이스는 RedisConnection 클래스에 필요한 using 문으로 나타납니다.

using StackExchange.Redis;

RedisConnection 클래스 코드는 캐시와의 연결이 항상 정상 상태임을 보장합니다. 연결은 StackExchange.Redis의 ConnectionMultiplexer 인스턴스에 의해 관리됩니다. RedisConnection 클래스는 연결이 끊어지고 자동으로 다시 연결할 수 없을 때 연결을 다시 만듭니다.

자세한 내용은 StackExchange.RedisStackExchange.Redis GitHub repo의 코드를 참조하세요.

캐시 명령 실행

Program.cs에서 콘솔 애플리케이션의 Program 클래스에 있는 RunRedisCommandsAsync 메서드에 대한 다음 코드를 볼 수 있습니다.

private static async Task RunRedisCommandsAsync(string prefix)
    {
        // Simple PING command
        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: PING");
        RedisResult pingResult = await _redisConnection.BasicRetryAsync(async (db) => await db.ExecuteAsync("PING"));
        Console.WriteLine($"{prefix}: Cache response: {pingResult}");

        // Simple get and put of integral data types into the cache
        string key = "Message";
        string value = "Hello! The cache is working from a .NET console app!";

        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: GET {key} via StringGetAsync()");
        RedisValue getMessageResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringGetAsync(key));
        Console.WriteLine($"{prefix}: Cache response: {getMessageResult}");

        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: SET {key} \"{value}\" via StringSetAsync()");
        bool stringSetResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringSetAsync(key, value));
        Console.WriteLine($"{prefix}: Cache response: {stringSetResult}");

        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: GET {key} via StringGetAsync()");
        getMessageResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringGetAsync(key));
        Console.WriteLine($"{prefix}: Cache response: {getMessageResult}");

        // Store serialized object to cache
        Employee e007 = new Employee("007", "Davide Columbo", 100);
        stringSetResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringSetAsync("e007", JsonSerializer.Serialize(e007)));
        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache response from storing serialized Employee object: {stringSetResult}");

        // Retrieve serialized object from cache
        getMessageResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringGetAsync("e007"));
        Employee e007FromCache = JsonSerializer.Deserialize<Employee>(getMessageResult);
        Console.WriteLine($"{prefix}: Deserialized Employee .NET object:{Environment.NewLine}");
        Console.WriteLine($"{prefix}: Employee.Name : {e007FromCache.Name}");
        Console.WriteLine($"{prefix}: Employee.Id   : {e007FromCache.Id}");
        Console.WriteLine($"{prefix}: Employee.Age  : {e007FromCache.Age}{Environment.NewLine}");
    }


캐시 항목은 StringSetAsyncStringGetAsync 메서드를 사용하여 저장하고 검색할 수 있습니다.

이 예제에서는 Message 키에 값이 설정된 것을 볼 수 있습니다. 앱에서 캐시된 값을 업데이트했습니다. 또한 앱에서 PING 및 명령을 실행했습니다.

캐시의 .NET 개체 사용

Redis 서버는 대부분의 데이터를 문자열로 저장하지만, 이 문자열은 캐시에 .NET 개체를 저장할 때 사용할 수 있는 직렬화된 이진 데이터를 포함하여 다양한 데이터 유형을 포함할 수 있습니다.

Azure Cache for Redis는 .NET 개체 및 기본 데이터 형식을 캐시할 수 있지만 .NET 개체를 캐시하려면 먼저 직렬화해야 합니다.

이 .NET 개체 serialization은 애플리케이션 개발자의 책임입니다. 직렬 변환기를 선택하는 데는 어느 정도 유연성이 있습니다.

개체를 직렬화하는 간단한 방법은 System.text.JsonJsonConvert serialization 메서드를 사용하는 것입니다.

Visual Studio에 System.text.Json 네임스페이스를 추가합니다.

  1. 도구>NuGet 패키지 관리자>패키지 관리자 콘솔*을 선택합니다.

  2. 그런 다음 패키지 관리자 콘솔 창에서 다음 명령을 실행합니다.

    Install-Package system.text.json
    

다음 Employee 클래스는 샘플에서 직렬화된 개체를 가져오고 설정하는 방법을 보여 주기 위해 Program.cs에 정의되었습니다.

class Employee
{
    public string Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }

    public Employee(string employeeId, string name, int age)
    {
        Id = employeeId;
        Name = name;
        Age = age;
    }
}

샘플 실행

.NET 개체의 serialization을 테스트하기 위해 콘솔 앱을 빌드하고 실행하려면 Ctrl+F5를 선택합니다.

콘솔 앱이 완료된 것을 보여 주는 스크린샷.

리소스 정리

이 문서에서 만든 리소스를 계속 사용하려면 리소스 그룹을 유지합니다.

그렇지 않은 경우 리소스와 관련된 요금이 부과되지 않도록 하려면 리소스 사용을 완료한 경우 만든 Azure 리소스 그룹을 삭제할 수 있습니다.

Warning

리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹을 삭제하면 리소스 그룹의 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 해야 합니다. 유지하려는 리소스가 있는 기존 리소스 그룹 내에서 리소스를 만든 경우 리소스 그룹을 삭제하는 대신 각 리소스를 개별적으로 삭제할 수 있습니다.

리소스 그룹 삭제

  1. Azure Portal에 로그인한 다음, 리소스 그룹을 선택합니다.

  2. 삭제할 리소스 그룹을 선택합니다.

    리소스 그룹이 많은 경우 모든 필드에 대한 필터에서 이 문서를 완료하기 위해 만든 리소스 그룹의 이름을 입력합니다. 검색 결과 목록에서 리소스 그룹을 선택합니다.

    삭제할 리소스 그룹 목록을 보여 주는 스크린샷.

  3. 리소스 그룹 삭제를 선택합니다.

  4. 리소스 그룹 삭제 창에서 확인할 리소스 그룹의 이름을 입력한 다음, 삭제를 선택합니다.

    삭제를 확인하기 위해 리소스 이름을 입력해야 하는 상자를 보여 주는 스크린샷.

잠시 후 리소스 그룹과 모든 리소스가 삭제됩니다.