Redis에 대해 알아보자

러브굿·2025년 10월 16일

1. Redis란 무엇인가?

Redis는 REmote DIctionary Server의 약자로,
인메모리 기반의 Key-Value 데이터 저장소입니다.
기본적으로 메모리(RAM)에 데이터를 저장하기 때문에
읽기/쓰기 속도가 매우 빠르며, 초당 수십만 건 이상의 요청을 처리할 수 있습니다.

일반적인 관계형 데이터베이스(MySQL, PostgreSQL 등)는
디스크에 데이터를 저장하고 인덱스를 통해 검색하지만,
Redis는 데이터를 메모리에 직접 유지하므로 조회 속도가 압도적으로 빠릅니다.


2. Redis의 주요 특징

2.1 인메모리 기반 고속 처리

Redis는 모든 데이터를 메모리에 저장하고,
필요할 때만 디스크에 백업(RDB, AOF)하는 구조를 가집니다.
이 덕분에 읽기/쓰기 모두 밀리초 단위의 응답이 가능합니다.

2.2 다양한 데이터 구조

Redis는 단순한 문자열(String)뿐 아니라 다음과 같은 구조를 지원합니다:

자료형설명예시
String기본 Key-Value 구조사용자 이름, 토큰 등
List순서가 있는 문자열 목록메시지 큐, 작업 대기열
Set중복 없는 집합방문자 ID 목록
Sorted Set점수 기반 정렬된 집합랭킹 시스템
Hash필드 기반 Key-Value유저 프로필 정보
Stream이벤트 스트림 처리로그, 실시간 피드

이처럼 다양한 구조 덕분에 Redis는
단순 캐시를 넘어 다양한 데이터 처리 문제에 응용됩니다.


3. Redis의 주요 활용 사례

3.1 데이터 캐시(Cache)

가장 일반적인 용도입니다.
DB에서 자주 조회되는 데이터를 Redis에 저장해두고,
요청 시 바로 Redis에서 반환함으로써 응답 속도를 크게 높일 수 있습니다.

예시:

@Cacheable(value = "userCache", key = "#userId")
public User getUser(Long userId) {
    return userRepository.findById(userId).orElseThrow();
}

3.2 세션 저장소(Session Store)

JWT나 세션 기반 로그인 시스템에서,
사용자의 로그인 상태를 Redis에 저장하면
다중 서버 환경에서도 세션 동기화를 쉽게 유지할 수 있습니다.

3.3 실시간 순위/랭킹 시스템

Sorted Set 구조를 활용하면 점수 기반으로 빠르게 정렬이 가능합니다.

ZADD game:ranking 150 user1
ZADD game:ranking 200 user2
ZRANGE game:ranking 0 -1 WITHSCORES

3.4 Pub/Sub 메시징

Redis는 간단한 실시간 메시지 큐로도 사용할 수 있습니다.
한쪽에서 메시지를 발행(Publish)하면, 구독(Subscribe) 중인 다른 서비스가 이를 즉시 수신합니다.

PUBLISH chat "hello"
SUBSCRIBE chat

이는 간단한 실시간 알림 시스템이나 채팅 서비스 구현에 적합합니다.


4. Redis의 데이터 영속화 (Persistence)

Redis는 기본적으로 메모리에 데이터를 저장하지만,
전원이 꺼져도 데이터를 유지하기 위해 디스크 백업을 지원합니다.

방식설명
RDB (Redis Database Backup)일정 주기로 전체 스냅샷을 저장
AOF (Append Only File)모든 명령을 로그로 기록해 재구성 가능

운영 환경에서는 보통 RDB + AOF 병행 설정을 사용합니다.
이렇게 하면 장애 복구 시 데이터 손실을 최소화할 수 있습니다.


5. Redis 아키텍처 구조

일반적인 웹 애플리케이션에서 Redis는 다음과 같이 동작합니다:

Client Request → Spring Controller → Redis Cache 확인
   ├── Cache Hit → Redis 응답 반환
   └── Cache Miss → DB 조회 후 Redis에 저장

즉, Redis는 DB 앞단의 고속 캐시 계층으로 동작하며,
데이터베이스 부하를 획기적으로 줄이는 역할을 합니다.


6. Redis 클러스터링과 확장성

트래픽이 많아질수록 하나의 Redis 서버로는 처리 한계가 생깁니다.
이를 위해 Cluster Mode를 지원합니다.

  • 데이터를 여러 노드에 분산 저장 (Sharding)
  • 자동 장애 조치 (Failover)
  • 고가용성(HA)을 보장하는 Sentinel 모드

대표적인 구성 방식:

Master 1 — Replica 1
Master 2 — Replica 2
Master 3 — Replica 3

각 Master는 데이터를 분할 저장하고,
Replica는 백업 및 장애 시 자동 승격(Failover)됩니다.


7. Redis vs Memcached 비교

항목RedisMemcached
데이터 구조String, List, Set, Hash 등 다양단일 String
지속성지원 (RDB, AOF)비지원
스크립트 지원Lua 스크립트 가능없음
트랜잭션MULTI/EXEC 명령 지원없음
속도거의 동일 (Redis가 약간 더 빠름)매우 빠름

Redis는 Memcached보다 기능이 풍부하며,
단순 캐시를 넘어선 멀티유즈 데이터 플랫폼입니다.


8. Redis 실무 활용 패턴 요약

목적주요 기능비고
캐시GET / SETTTL 설정으로 만료 가능
세션 관리Hash / Expire로그인 상태 유지
메시징Pub/Sub, Stream비동기 이벤트 처리
순위표Sorted Set점수 기반 정렬
작업 큐List / Stream백그라운드 Job 처리

9. 마무리

Redis는 단순한 캐시 서버를 넘어서
비동기 처리, 실시간 데이터, 이벤트 기반 시스템의 핵심 구성요소로 자리 잡았습니다.

오늘날의 MSA시스템 등에서는
Redis가 필수 인프라로 사용됩니다.

속도, 유연성, 확장성 세 가지를 모두 잡고 싶다면
Redis는 가장 효율적인 선택 중 하나입니다.


10. 참고 자료

profile
마라토너형 개발자

0개의 댓글