
이 글에서는 Redis의 가장 널리 쓰이는 활용 사례 다섯 가지를 살펴보고, 각 사례에서 Redis가 선택되는 이유와 특징을 자세히 설명합니다.
1. 세션 캐시(Session Cache)
Redis의 가장 직관적인 활용 사례는 바로 세션 캐시입니다. Memcached 같은 다른 세션 저장소와 비교했을 때 Redis의 가장 큰 장점은 영속성(Persistence)을 지원한다는 점입니다. 캐시 데이터의 일관성이 치명적이지 않은 경우가 많지만, 사용자의 장바구니 세션이 갑자기 모두 사라진다면 아무도 기뻐하지 않겠죠?
다행히 Redis는 오랜 기간 꾸준히 성장해 왔기 때문에 세션 캐싱에 적합하게 활용하는 방법을 다룬 문서를 쉽게 찾을 수 있습니다. 유명 이커머스 플랫폼인 Magento 역시 Redis 플러그인을 공식 지원할 정도입니다.
2. 전체 페이지 캐시(Full Page Cache, FPC)
기본적인 세션 토큰 관리를 넘어, Redis는 전체 페이지 캐시(FPC) 환경을 손쉽게 구축할 수 있는 플랫폼이기도 합니다. 디스크 영속성 덕분에 Redis 인스턴스를 재시작하더라도 일관성이 유지되며, 사용자는 페이지 로딩 속도 저하를 전혀 느끼지 못합니다. PHP 기본 FPC와 비교하면 확연한 차이입니다.
앞서 언급한 Magento 역시 Redis를 전체 페이지 캐시 백엔드로 활용할 수 있는 플러그인을 제공합니다. WordPress 사용자라면 Pantheon에서 배포하는 wp-redis 플러그인을 통해 그 어느 때보다 빠른 페이지 로딩 속도를 경험해 볼 수 있습니다.
3. 메시지 큐(Queues)
Redis의 인메모리 스토리지 엔진을 활용해 리스트(List)와 셋(Set) 연산을 수행하면, 메시지 큐로 사용하기에 더없이 훌륭한 플랫폼이 됩니다. Python처럼 리스트에 push/pop 연산을 익숙하게 다루는 개발자라면 Redis를 큐로 사용하는 것이 마치 자연스러운 프로그래밍 언어의 자료구조를 다루는 것처럼 느껴질 것입니다.
"Redis queues"로 검색해 보면 Redis를 큐 백엔드로 활용하기 위한 오픈소스 프로젝트가 무수히 많다는 것을 알 수 있습니다. 대표적으로 분산 작업 큐 라이브러리인 Celery는 Redis를 브로커(Broker)로 사용하는 백엔드를 제공합니다.
4. 리더보드 및 카운팅(Leaderboards / Counting)
인메모리 방식으로 동작하는 Redis는 값의 증감(Increment/Decrement) 처리에 매우 뛰어난 성능을 보여줍니다. 특히 셋(Set)과 정렬된 셋(Sorted Set) 자료구조를 기본으로 제공하기 때문에 순위 계산 같은 작업을 손쉽게 구현할 수 있습니다.
예를 들어 "user_scores"라는 이름의 정렬된 셋에서 상위 10명의 사용자를 조회하려면 다음 명령어 한 줄이면 충분합니다.
ZRANGE user_scores 0 10사용자 점수가 계속 증가하는 방식으로 순위가 매겨진다고 가정한 것입니다. 만약 사용자 정보와 함께 점수까지 함께 반환받고 싶다면 아래와 같이 실행하면 됩니다.
ZRANGE user_scores 0 10 WITHSCORESAgora Games는 Ruby로 구현된 실제 리더보드 예제를 공개하고 있으며, 이 예제는 Redis를 데이터 저장소로 활용하는 훌륭한 참고 자료입니다.
5. 발행/구독(Pub/Sub)
마지막으로 소개할 기능은 Redis의 Pub/Sub(발행/구독)입니다. Pub/Sub의 활용 범위는 사실상 무궁무진합니다. 소셜 네트워크의 연결 관리, Pub/Sub 이벤트에 반응하는 스크립트 트리거, 심지어 Redis Pub/Sub만으로 구축한 실시간 채팅 시스템까지 등장했습니다.
Redis가 제공하는 여러 기능 중에서도 Pub/Sub은 상대적으로 주목받지 못하는 편이지만, 잘만 활용하면 사용자에게 놀라운 가치를 제공할 수 있는 강력한 기능입니다.
마무리하며
여러분은 어떤 용도로 Redis를 사용하고 계신가요? 위에서 소개한 다섯 가지 사례 외에도 Redis는 데이터 인프라 전반에서 폭넓게 활용될 수 있습니다. 자신의 서비스에 맞는 Redis 활용법을 고민 중이라면, 관련 호스팅 서비스나 전문 커뮤니티를 통해 조언을 구해 보는 것도 좋은 방법입니다.