Redis 개념과 고가용성 아키텍처 정리

Redis란?

Redis(Remote Dictionary Server)는 이름 그대로 원격에서 사용할 수 있는 사전(Dictionary) 형태의 자료구조 서버입니다.
Key-Value 데이터 구조를 기반으로 다양한 형태의 자료구조를 지원하며, 인메모리 기반의 NoSQL 데이터 저장소입니다.

주요 특징

  • 메모리 기반 저장으로 매우 빠른 데이터 접근이 가능합니다.
  • 다양한 자료구조 지원: String, List, Set, Sorted Set, Hash, Bitmap, HyperLogLog, Geospatial
  • 다양한 활용 사례:
    • 캐시(Cache)
    • 세션 저장소(Session Store)
    • 실시간 순위표(Leaderboard)
    • pub/sub 메시징 시스템
    • 분산 락 구현 등

Redis의 캐시 활용

캐시는 쓰기보다 읽기 요청이 많은 데이터에 적합한 저장 전략입니다.
Redis는 메모리 기반이기 때문에 응답 속도가 빠르며, 자주 조회되는 데이터를 미리 적재해두고 사용할 수 있습니다.

  • 장점:
    • 빠른 데이터 응답
    • 시스템 부하 감소
    • 백엔드 DB의 요청 수 절감

Redis의 동작 방식

Redis는 싱글 스레드 기반으로 작동하며, 이벤트 루프(Event Loop)를 통해 클라이언트의 요청을 하나씩 처리합니다.

  • 명령어는 이벤트 큐에 적재되며, 싱글 스레드로 순차 처리됩니다.
  • 멀티 스레드 환경에서 발생할 수 있는 데드락, 컨텍스트 스위칭 비용을 피할 수 있는 구조입니다.
  • 단점: 대용량 데이터를 처리할 때 단일 스레드로 인해 병목이 생길 수 있습니다.

Redis는 싱글 스레드 기반이지만, 일부 최신 기능에서 백그라운드 I/O 작업(예: RDB 저장, AOF Rewrite)은 멀티 스레드로 처리됩니다.


Redis의 영속성(Persistence)

메모리에 데이터를 저장하지만, 영속성을 보장하기 위해 디스크 저장도 지원합니다.
Redis는 다음과 같은 방식으로 영속성을 구현합니다:

RDB (Redis Database)

  • 메모리 전체 데이터를 일정 주기로 스냅샷으로 저장
  • 스냅샷 파일 하나로 빠르게 백업 및 복구 가능
  • 단점: 마지막 저장 시점 이후의 데이터는 유실될 수 있음

AOF (Append Only File)

  • 데이터 변경 명령을 모두 기록
  • 가장 최근의 데이터까지 복원 가능
  • 단점: 파일 크기 증가, 복원 속도 느림

실무에서는 RDB + AOF 방식을 함께 사용해 백업 속도 + 데이터 무결성을 함께 확보하는 것이 일반적입니다.


Redis 장애 대응 전략

단일 Redis 인스턴스로는 장애 발생 시 서비스 전체가 중단될 수 있으므로, 일반적으로 마스터-레플리카 구조를 사용합니다.

레플리케이션 구조

  • Master 노드는 쓰기 작업을 처리하며,
  • Replica 노드(Slave)는 데이터를 동기화 받아 읽기 작업을 분산하거나 장애 대응 용도로 활용됩니다.

Redis Sentinel 아키텍처

Sentinel Architecture

Redis Sentinel은 Redis 클러스터의 고가용성을 확보하기 위한 모니터링 및 장애 조치 시스템입니다.

구성 요소

  • Redis Master (1개)
  • Redis Slaves (여러 개)
  • Sentinel 서버 (3개 이상 권장)

기능

  • Monitoring: 마스터 및 슬레이브의 상태를 감시합니다.
  • Automatic Failover: 마스터 장애 발생 시 슬레이브 중 하나를 자동 승격합니다.
  • Notification: Pub/Sub을 통해 장애 발생 정보를 클라이언트에 전달합니다.

동작 방식

  • Sentinel 간 다수결 투표로 마스터 장애를 판단
  • 새 마스터를 선출하고 나머지 슬레이브는 해당 마스터를 기준으로 재구성됩니다

Redis Cluster 아키텍처

PHANTOM READ

Redis Cluster는 수평 확장성내장형 장애 복구 기능을 제공하는 아키텍처입니다.

주요 기능

  • 샤딩(Sharding): 키 해시값을 기준으로 데이터를 분산 저장합니다.
  • 고가용성 유지: 마스터 장애 시 레플리카가 자동 승격됩니다.
  • Sentinel 불필요: 클러스터 자체적으로 상태를 관리합니다.

동작 방식

  • 각 키는 CRC-16 해시 → 해시 슬롯(0~16383)으로 매핑됩니다.
  • 슬롯을 여러 마스터 노드에 나눠서 분산 저장합니다.
  • 각 마스터는 하나 이상의 레플리카 노드를 가집니다.
  • 노드들은 Gossip Protocol을 사용해 서로의 상태를 지속적으로 감시합니다.

Redis 아키텍처 비교 요약

항목 Sentinel 아키텍처 Cluster 아키텍처
장애 복구 Sentinel 프로세스가 담당 클러스터 자체적으로 gossip 기반 수행
샤딩 미지원 (수동 분산 처리) 지원 (자동 분산)
데이터 일관성 Master-Slave 복제 Master-Replica 구성
구성 복잡도 낮음 높음
사용 목적 고가용성 (HA), 장애 복구용 분산 처리, 고가용성, 대규모 시스템 대응

결론

Redis는 단순한 인메모리 캐시를 넘어, 고성능 분산 환경에서도 견고한 아키텍처를 구성할 수 있는 강력한 시스템입니다.
특히, Sentinel과 Cluster 아키텍처를 통해 장애 대응과 수평 확장이 가능하여 대규모 트래픽 처리고가용성 서비스에 매우 적합합니다.