소개
Redis는 빠른 인메모리 키-값 저장소로, 현대 애플리케이션에서 캐싱, 세션 저장, 메시지 브로커링, pub/sub 통신 등에 폭넓게 사용되고 있습니다. 가볍고 성능이 뛰어나며 개발자 친화적이기 때문에 확장 가능한 시스템을 구축할 때 가장 먼저 선택되는 기술 중 하나입니다.
.NET Core로 개발하면서 애플리케이션에 Redis를 통합하고 싶다면, 이 글에서 StackExchange.Redis 라이브러리를 사용해 기본적인 Redis 연산을 수행하는 방법을 단계별로 살펴보겠습니다.
또한 Windows 환경에서 작업하는 분들을 위해 Linux나 컨테이너 없이도 Redis 호환 서버를 사용해 손쉽게 실행할 수 있는 방법도 함께 소개합니다.
왜 Redis인가?
Redis를 .NET Core 애플리케이션에 통합하면 다음과 같은 이점을 얻을 수 있습니다.
- 캐싱(Caching): 자주 조회되는 데이터를 저장해 응답 속도를 개선하고 데이터베이스 부하를 줄입니다.
- 세션 관리(Session Management): 분산 환경에서 사용자 세션을 효율적으로 처리합니다.
- 실시간 이벤트(Real-Time Events): pub/sub 기능을 활용해 알림이나 이벤트 기반 통신 같은 실시간 기능을 구현합니다.
- 고성능(High Performance): 메모리에서 동작하므로 지연 시간이 매우 낮은 데이터 접근이 가능합니다.
- 확장성(Scalability): 클러스터링과 샤딩을 지원하여 확장에 최적화되어 있습니다.
Redis 설정하기
.NET Core 앱을 Redis에 연결하려면 다음 두 가지 방법 중 하나로 Redis를 실행할 수 있습니다.
- 명령줄 설치: Docker 같은 도구를 사용해 Linux 또는 Windows에서 Redis를 실행합니다.
- Windows용 사전 구성 대체 서버: Windows 사용자라면 Redis 호환 서버를 네이티브 대체재로 사용할 수 있습니다.
참고: 이 튜토리얼에서는 설명의 편의를 위해 Redis가 localhost:6379에서 로컬로 실행 중이라고 가정합니다.
Redis를 활용한 .NET Core 애플리케이션 만들기
이번 예제에서는 다음과 같은 Redis 연산을 수행하는 .NET Core 콘솔 애플리케이션을 만들어 보겠습니다.
- Redis 서버에 연결하기
- 기본 키-값 연산 수행 (set, get, delete)
- 키 만료 및 유효성 검증 시연
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가 동작하는 방식
애플리케이션이 수행하는 작업을 단계별로 정리하면 다음과 같습니다.
- ConnectionMultiplexer를 사용해 Redis 서버에 연결합니다. ConnectionMultiplexer는 연결 풀링과 서버 간 통신을 담당하며, 멀티스레드 환경에서도 안전하게 재사용할 수 있도록 설계되어 있습니다.
- 기본 명령을 수행합니다.
- StringSetAsync: Redis에 키-값 쌍을 저장합니다.
- StringGetAsync: 키에 해당하는 값을 조회합니다.
- KeyExpireAsync: 키의 만료 시간을 설정합니다.
- KeyExistsAsync: 키의 존재 여부를 확인합니다.
- 만료 기능을 통해 임시 인메모리 데이터 저장을 처리합니다.
Windows 환경에서 네이티브 Redis를 설치하거나 Docker를 사용하지 않으려면, Redis 호환 서버를 대안으로 활용할 수 있습니다.
Redis 호환 서버 설정
- Windows용 Redis 호환 서버를 설치합니다.
- 설치 후에는 일반적으로 Redis와 마찬가지로 기본적으로 localhost:6379에서 실행됩니다.
- 애플리케이션 코드는 수정할 필요 없이 그대로 동작합니다.
Redis 호환 서버를 사용하면 컨테이너나 가상화 환경 없이도 Windows에서 네이티브하게 Redis 기능을 실행할 수 있습니다.
.NET Core에서 Redis를 사용하는 장점
- 성능: Redis는 완전히 메모리에서 동작하여 극도로 낮은 지연 시간을 제공합니다.
- 사용 편의성: 일반적인 키-값 요구 사항을 위한 간결한 API를 제공하며, 리스트·셋·해시 같은 추가 자료 구조도 지원합니다.
- 유연성: 캐싱, 메시지 큐, pub/sub 등 하나의 저장소로 다양한 용도로 활용할 수 있습니다.
- 확장성: 클러스터링과 고가용성을 지원하여 수요 증가에 따른 확장이 용이합니다.
마무리
.NET Core 애플리케이션에 Redis를 통합하면 높은 부하의 워크로드도 안정적으로 처리할 수 있는 고품질·고성능 시스템을 구축할 수 있습니다. StackExchange.Redis 라이브러리를 활용하면 복잡한 설정 없이도 Redis와 원활하게 상호작용할 수 있습니다.
먼저 간단한 캐싱이나 세션 관리부터 Redis를 적용해 보고, 이후 pub/sub과 실시간 데이터 처리 요구 사항으로 그 활용 범위를 넓혀가길 권장합니다.
즐거운 코딩 되세요!