빠른 시작: .NET Framework에서 Azure Cache for Redis 사용

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

GitHub의 코드로 건너뛰기

에서 리포지토리를 복제합니다(GitHub의 https://github.com/Azure-Samples/azure-cache-redis-samples/tree/main/quickstart/dotnet).

필수 조건

캐시 만들기

  1. 캐시를 만들려면 Azure Portal에 로그인하여 리소스 만들기를 선택합니다.

    Create a resource is highlighted in the left navigation pane.

  2. 새로 만들기 페이지에서 데이터베이스를 선택한 다음, Azure Cache for Redis를 선택합니다.

    On New, Databases is highlighted, and Azure Cache for Redis is highlighted.

  3. 새 Redis Cache 페이지에서 새 캐시의 설정을 구성합니다.

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

  5. 네트워킹 탭에서 연결 방법을 선택합니다.

  6. 다음: 고급 탭을 선택하거나 페이지 아래쪽에서 다음: 고급 단추를 선택하여 고급 탭을 표시합니다.

    Screenshot showing the Advanced tab in the working pane and the available option to select.

    • 기본 또는 표준 캐시의 경우 TLS가 아닌 포트에 대한 선택을 토글합니다. Microsoft Entra 인증을 사용하도록 설정할지 선택할 수도 있습니다.
    • 프리미엄 캐시의 경우 TLS가 아닌 포트, 클러스터링, 관리 ID 및 데이터 지속성에 대한 설정을 구성합니다. Microsoft Entra 인증을 사용하도록 설정할지 선택할 수도 있습니다.
  7. 다음: 태그 탭을 선택하거나 페이지 맨 아래에서 다음: 태그 단추를 선택합니다.

  8. 필요에 따라 리소스를 분류하려는 경우 태그 탭에서 이름 및 값을 입력합니다.

  9. 검토 + 만들기를 선택합니다. 검토 + 만들기 탭으로 이동됩니다. 여기서 Azure가 구성의 유효성을 검사합니다.

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

캐시를 만드는 데 시간이 걸립니다. Azure Cache for Redis 개요 페이지에서 진행률을 모니터링할 수 있습니다. 상태실행 중으로 표시되면 캐시를 사용할 준비가 된 것입니다.

Azure Portal에서 호스트 이름, 포트 및 액세스 키를 검색합니다.

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

  • 액세스 키를 가져오려면 캐시의 왼쪽 탐색 영역에서 액세스 키를 선택합니다.

    Azure Cache for Redis keys

  • 호스트 이름 및 포트를 가져오려면 캐시의 왼쪽 탐색 영역에서 속성을 선택합니다. 호스트 이름은 <DNS name>.redis.cache.windows.net 형식입니다.

    Azure Cache for Redis properties

  1. 컴퓨터에 CacheSecrets.config라는 파일을 만들고 이를 C:\AppSecrets\CacheSecrets.config에 배치합니다.

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

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

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

  5. 파일을 저장합니다.

캐시 클라이언트 구성

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

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

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

비밀 캐시에 연결

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

<?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.csusing 키워드가 있는 StackExchange.Redis 네임스페이스가 표시됩니다. 이는 RedisConnection 클래스에 필요합니다.

using StackExchange.Redis;

RedisConnection 코드는 StackExchange.Redis에서 ConnectionMultiplexer 인스턴스를 관리하여 항상 정상 캐시 연결이 있도록 보장합니다. RedisConnection 클래스는 연결이 손실되고 자동으로 다시 연결할 수 없을 때 연결을 다시 만듭니다.

자세한 내용은 StackExchange.RedisGitHub 리포지토리의 코드를 참조하세요.

캐시 명령 실행

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 개체 직렬화는 애플리케이션 개발자의 책임이며 개발자는 유연하게 직렬 변환기를 선택할 수 있습니다.

개체를 직렬화하는 간단한 방법 중 하나는 JsonConvert에서 System.text.Json 직렬화 메서드를 사용하는 것입니다.

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;
    }
}

샘플 실행

Ctrl+F5 키를 눌러 .NET 개체의 직렬화를 테스트하도록 콘솔 앱을 빌드 및 실행합니다.

Console app completed

리소스 정리

이 빠른 시작을 계속 사용할 경우 리소스를 생성된 상태로 유지하고 이를 다시 사용할 수 있습니다.

그렇지 않고, 빠른 시작 샘플 애플리케이션 사용이 끝나면 이 빠른 시작에서 만든 Azure 리소스를 삭제하여 요금이 청구되는 것을 방지할 수 있습니다.

Important

리소스 그룹 삭제는 취소할 수 없으며 해당 리소스 그룹 및 해당 그룹 안에 있는 모든 리소스는 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 해야 합니다. 유지하려는 리소스가 포함된 기존 리소스 그룹 내서에 이 샘플을 호스팅하는 리소스를 만든 경우 리소스 그룹을 삭제하는 대신, 완쪽에서 각 리소스를 개별적으로 삭제할 수 있습니다.

Azure Portal에 로그인하고 리소스 그룹을 선택합니다.

이름을 기준으로 필터링... 텍스트 상자에 리소스 그룹의 이름을 입력합니다. 이 문서의 지침에서는 TestResources라는 리소스 그룹을 사용했습니다. 결과 목록의 리소스 그룹에서 ...를 선택한 다음, 리소스 그룹 삭제를 선택합니다.

Delete

리소스 그룹 삭제를 확인하는 메시지가 표시됩니다. 확인할 리소스 그룹의 이름을 입력하고 삭제를 선택합니다.

잠시 후, 리소스 그룹 및 해당 그룹에 포함된 모든 리소스가 삭제됩니다.

다음 단계