원문은 2017년 11월 7일 ObjectRocket.com/blog에 처음 게시되었습니다.
이 글에서는 가장 널리 사용되는 Redis™ 활용 사례와 각 사례 선택에 영향을 미치는 주요 특성들을 살펴봅니다.
1. 세션 캐시
Redis의 가장 대표적인 활용 사례 중 하나는 바로 세션 캐시입니다. Memcached 같은 다른 세션 저장소와 비교했을 때 Redis의 가장 큰 장점은 영속성(persistence)을 제공한다는 점입니다. 캐시의 일관성이 일반적으로 미션 크리티컬하지 않더라도, 장바구니 세션이 모두 사라진다면 사용자들은 분명 불만을 표할 것입니다.
다행히도 최근 몇 년간 Redis가 폭발적인 인기를 얻으면서, 세션 캐싱 목적으로 Redis를 올바르게 사용하는 방법을 담은 자료들을 손쉽게 찾아볼 수 있습니다. 유명 전자상거래 플랫폼인 Magento® 역시 Redis용 플러그인을 제공합니다.
2. 풀 페이지 캐시(Full Page Cache)
기본적인 세션 토큰 처리 외에도, Redis는 간편하게 구축할 수 있는 풀 페이지 캐시(FPC) 플랫폼으로 활용할 수 있습니다. 이 경우에도 일관성이 중요한 요소로 작용합니다. 디스크 영속성 기능 덕분에 Redis 인스턴스가 재시작되더라도 사용자는 페이지 로딩 속도 저하를 느끼지 못합니다. 이는 PHP 기본 FPC와는 확연히 차별화되는 강점입니다.
Magento 역시 Redis를 풀 페이지 캐시 백엔드로 사용할 수 있는 플러그인을 제공합니다.
WordPress® 사용자라면 Pantheon™이 제공하는 wp-redis 플러그인을 활용해 지금껏 경험해 보지 못한 빠른 페이지 로딩 속도를 경험해 보세요!
3. 큐(Queues)
Redis의 인메모리 스토리지 엔진이 제공하는 리스트 연산과 집합(set) 연산을 활용하면 Redis는 훌륭한 메시지 큐 플랫폼이 됩니다. Python® 같은 프로그래밍 언어에서 리스트에 push/pop 연산을 수행하는 데 익숙한 개발자라면, 큐 형태로 Redis와 상호작용하는 것이 매우 자연스럽게 느껴질 것입니다.
Google에서 'Redis queues'를 검색해 보면, 다양한 큐잉 요구 사항의 백엔드로 Redis를 활용하기 위한 방대한 오픈소스 프로젝트를 확인할 수 있습니다. 예를 들어 Celery는 Redis를 브로커(broker)로 사용하는 백엔드를 제공하니 참고해 볼 만합니다.
4. 순위표(리더보드) 및 카운팅
인메모리 방식으로 동작하는 Redis는 증감(increment/decrement) 연산에 매우 뛰어난 성능을 보여줍니다. 또한 집합(set)과 정렬된 집합(sorted set) 자료구조 덕분에 이런 종류의 연산을 훨씬 수월하게 처리할 수 있습니다. Redis는 바로 이 두 가지 자료구조를 모두 제공하므로, 예를 들어 "user_scores"라는 이름의 정렬된 집합에서 상위 10명의 사용자를 조회하려면 아래 명령어를 실행하면 됩니다:
ZRANGE user_scores 0 10
물론 위 코드는 사용자가 점수 기준으로 오름차순 정렬되어 있다고 가정한 것입니다. 사용자 정보와 함께 점수도 함께 반환하고 싶다면 다음과 같이 실행하면 됩니다:
ZRANGE user_scores 0 10 WITHSCORES
Agora Games는 Ruby를 사용해 Redis를 데이터 저장소로 삼는 순위표 구현 예제를 공개하고 있으니 참고하시기 바랍니다.
5. 발행-구독(Publish-Subscribe)
Redis에는 발행-구독(Pub/Sub) 기능이 내장되어 있습니다. Pub/Sub의 활용 범위는 무궁무진합니다. 실제로 소셜 네트워크 연결 처리, Pub/Sub 이벤트 기반 스크립트 트리거, 심지어 Redis Pub/Sub만으로 구축된 채팅 시스템까지 다양하게 활용되고 있습니다.
Redis가 제공하는 여러 기능 중 이 기능은 그 잠재력에 비해 상대적으로 주목받지 못하는 편이라는 점이 아쉽습니다. 사용자에게 제공할 수 있는 가치가 무척 큰 기능임에도 불구하고 말입니다.
Rackspace DBA 서비스에 대해 자세히 알아보세요.
피드백 탭을 통해 의견을 남기거나 질문을 하실 수 있습니다. 언제든지 저희와 대화를 시작해 주세요.