Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

.NET Core에서 Redis 통합 완벽 가이드: StackExchange.Redis 실전 활용법

소개

Redis는 빠른 인메모리 키-값 저장소로, 현대 애플리케이션에서 캐싱, 세션 저장, 메시지 브로커링, pub/sub 통신 등에 폭넓게 사용되고 있습니다. 가볍고 성능이 뛰어나며 개발자 친화적이기 때문에 확장 가능한 시스템을 구축할 때 가장 먼저 선택되는 기술 중 하나입니다.

.NET Core로 개발하면서 애플리케이션에 Redis를 통합하고 싶다면, 이 글에서 StackExchange.Redis 라이브러리를 사용해 기본적인 Redis 연산을 수행하는 방법을 단계별로 살펴보겠습니다.

또한 Windows 환경에서 작업하는 분들을 위해 Linux나 컨테이너 없이도 Redis 호환 서버를 사용해 손쉽게 실행할 수 있는 방법도 함께 소개합니다.

왜 Redis인가?

Redis를 .NET Core 애플리케이션에 통합하면 다음과 같은 이점을 얻을 수 있습니다.

  1. 캐싱(Caching): 자주 조회되는 데이터를 저장해 응답 속도를 개선하고 데이터베이스 부하를 줄입니다.
  2. 세션 관리(Session Management): 분산 환경에서 사용자 세션을 효율적으로 처리합니다.
  3. 실시간 이벤트(Real-Time Events): pub/sub 기능을 활용해 알림이나 이벤트 기반 통신 같은 실시간 기능을 구현합니다.
  4. 고성능(High Performance): 메모리에서 동작하므로 지연 시간이 매우 낮은 데이터 접근이 가능합니다.
  5. 확장성(Scalability): 클러스터링과 샤딩을 지원하여 확장에 최적화되어 있습니다.

Redis 설정하기

.NET Core 앱을 Redis에 연결하려면 다음 두 가지 방법 중 하나로 Redis를 실행할 수 있습니다.

  • 명령줄 설치: Docker 같은 도구를 사용해 Linux 또는 Windows에서 Redis를 실행합니다.
  • Windows용 사전 구성 대체 서버: Windows 사용자라면 Redis 호환 서버를 네이티브 대체재로 사용할 수 있습니다.

참고: 이 튜토리얼에서는 설명의 편의를 위해 Redis가 localhost:6379에서 로컬로 실행 중이라고 가정합니다.

Redis를 활용한 .NET Core 애플리케이션 만들기

이번 예제에서는 다음과 같은 Redis 연산을 수행하는 .NET Core 콘솔 애플리케이션을 만들어 보겠습니다.

  1. Redis 서버에 연결하기
  2. 기본 키-값 연산 수행 (set, get, delete)
  3. 키 만료 및 유효성 검증 시연

1단계: .NET Core 프로젝트 생성

터미널을 열고 새 프로젝트를 생성합니다.

dotnet new console -n RedisIntegrationDemo

그다음 Redis 연결을 위해 StackExchange.Redis 패키지를 설치합니다.

dotnet add package StackExchange.Redis

2단계: 코드 작성

Program.cs 파일에 아래 전체 코드를 작성합니다.

using System;
using StackExchange.Redis;
using System.Threading.Tasks;
namespace RedisIntegrationDemo
{
 class Program
 {
 // Redis 연결 문자열
 private const string RedisConnectionString = "localhost:6379";
 async static Task Main(string[] args)
 {
 Console.WriteLine("Connecting to Redis...");
 // Redis에 연결
 var redis = await ConnectionMultiplexer.ConnectAsync(RedisConnectionString);
 Console.WriteLine("Connected to Redis successfully.\n");
 // Redis 데이터베이스 접근
 IDatabase db = redis.GetDatabase();
 // Redis 연산 수행
 Console.WriteLine("Performing Redis operations...");
 // 1. 키-값 설정
 string key = "SampleKey";
 string value = "Hello from Redis!";
 await db.StringSetAsync(key, value);
 Console.WriteLine($"Set: {key} => {value}");
 // 2. 키로 값 조회
 string savedValue = await db.StringGetAsync(key);
 Console.WriteLine($"Get: {key} => {savedValue}");
 // 3. 키 만료 시간 설정
 TimeSpan expiryTime = TimeSpan.FromSeconds(10);
 await db.KeyExpireAsync(key, expiryTime);
 Console.WriteLine($"Set expiration for {key}: {expiryTime.TotalSeconds} seconds");
 // 4. 만료 후 키 존재 여부 확인
 Console.WriteLine("\nWaiting for the key to expire...");
 await Task.Delay(12000); // 12초 대기
 bool exists = await db.KeyExistsAsync(key);
 Console.WriteLine($"Key Exists After Expiration: {key} => {exists}");
 // 연결 종료
 redis.Close();
 Console.WriteLine("\nAll Redis operations completed.");
 }
 }
}

3단계: 애플리케이션 실행

아래 명령으로 애플리케이션을 실행합니다.

dotnet run

예상 출력 결과

프로그램은 Redis에 연결한 후 기본 키-값 연산을 수행하고, 키 만료 여부를 검증합니다. 다음과 유사한 출력 결과를 확인할 수 있습니다.

.NET Core에서 Redis 통합 완벽 가이드: StackExchange.Redis 실전 활용법

.NET Core에서 Redis가 동작하는 방식

애플리케이션이 수행하는 작업을 단계별로 정리하면 다음과 같습니다.

  1. ConnectionMultiplexer를 사용해 Redis 서버에 연결합니다. ConnectionMultiplexer는 연결 풀링과 서버 간 통신을 담당하며, 멀티스레드 환경에서도 안전하게 재사용할 수 있도록 설계되어 있습니다.
  2. 기본 명령을 수행합니다.
    • StringSetAsync: Redis에 키-값 쌍을 저장합니다.
    • StringGetAsync: 키에 해당하는 값을 조회합니다.
    • KeyExpireAsync: 키의 만료 시간을 설정합니다.
    • KeyExistsAsync: 키의 존재 여부를 확인합니다.
  3. 만료 기능을 통해 임시 인메모리 데이터 저장을 처리합니다.

Windows 환경에서 네이티브 Redis를 설치하거나 Docker를 사용하지 않으려면, Redis 호환 서버를 대안으로 활용할 수 있습니다.

Redis 호환 서버 설정

  • Windows용 Redis 호환 서버를 설치합니다.
  • 설치 후에는 일반적으로 Redis와 마찬가지로 기본적으로 localhost:6379에서 실행됩니다.
  • 애플리케이션 코드는 수정할 필요 없이 그대로 동작합니다.

Redis 호환 서버를 사용하면 컨테이너나 가상화 환경 없이도 Windows에서 네이티브하게 Redis 기능을 실행할 수 있습니다.

.NET Core에서 Redis를 사용하는 장점

  1. 성능: Redis는 완전히 메모리에서 동작하여 극도로 낮은 지연 시간을 제공합니다.
  2. 사용 편의성: 일반적인 키-값 요구 사항을 위한 간결한 API를 제공하며, 리스트·셋·해시 같은 추가 자료 구조도 지원합니다.
  3. 유연성: 캐싱, 메시지 큐, pub/sub 등 하나의 저장소로 다양한 용도로 활용할 수 있습니다.
  4. 확장성: 클러스터링과 고가용성을 지원하여 수요 증가에 따른 확장이 용이합니다.

마무리

.NET Core 애플리케이션에 Redis를 통합하면 높은 부하의 워크로드도 안정적으로 처리할 수 있는 고품질·고성능 시스템을 구축할 수 있습니다. StackExchange.Redis 라이브러리를 활용하면 복잡한 설정 없이도 Redis와 원활하게 상호작용할 수 있습니다.

먼저 간단한 캐싱이나 세션 관리부터 Redis를 적용해 보고, 이후 pub/sub과 실시간 데이터 처리 요구 사항으로 그 활용 범위를 넓혀가길 권장합니다.

즐거운 코딩 되세요!