Database/Redis

[실전 레디스] 5-2. 레디스 운용 관리: 아키텍처

noahkim_ 2025. 3. 21. 23:27

하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다.

 

1. 레디스 아키텍처

  • 원본 데이터는 RDBMS에 저장하고, Redis는 그 앞단에 캐시로 배치

 

읽기 관점

항목 Lazy-loading 패턴 (Cache-aside) Read-Through 패턴
Redis에 데이터 없을 때 애플리케이션이 DB에서 읽고 Redis에 저장
라이브러리가 DB에서 읽고 Redis에 저장
장점 자주 쓰는 데이터만 캐시에 저장됨
애플리케이션 코드가 단순해짐
단점 첫 요청이 느림
캐시 로딩 로직을 직접 구현해야 함
특정 클라이언트/미들웨어에 의존하게 됨
적용 예시 Spring + Redis 조합 (직접 로직 작성)
RedisTemplate + Spring Cache 추상화

 

쓰기 관점

항목 Write-Through 패턴 Write-Back 패턴
Write-Around 패턴
쓰기 순서 RDBMS와 Redis에 동시 저장 Redis에 먼저 저장
이후 DB에 비동기 반영
DB에만 저장
이후 Redis에 복제
장점 Redis와 DB 간 즉시 동기화 빠른 응답
DB 부하 감소
최종 데이터 반영
불필요한 캐시 저장 방지
최신 데이터 유지
단점 쓰기 성능 저하 (이중 저장) 일관성 문제
데이터 유실 위험
읽기 성능 저하 (캐시 미스 많음)
적합한 상황 정합성이 중요한 경우 쓰기 빈번 + 유실 허용
읽기 위주 애플리케이션
예시 상품 주문 처리 시스템 실시간 클릭 로그
인기 콘텐츠 추천 시스템
정적 상품 정보 캐시, 뉴스 콘텐츠 캐시 등

 

아키텍처 안티 패턴

  • 레디스 서버의 다운으로 애플리케이션이 동작하지 않는 경우
  • 장애 대비 fallback 로직 필수

 

데이터 저장소로서의 레디스 아키텍처

  • 관계계형 데이터베이스에서 구현하기 어려운 경우
  • 작은 데이터의 빈번한 쓰기 작업이 필요한 경우

 

주의 사항
  • 복구 방법 확인
  • 관계형 데이터베이스와 함께 사용할 경우, 롤백 발생 시 데이터 일관성 측면에서 애플리케이션 구현에 문제가 없는지 확인
  • 레디스의 레플리케이션 기능이나 스냅숏 생성을 사전에 준비하기

 

2. 모범 사례

TTL 설정

  • 오래된 데이터를 자동으로 제거하는 기능
  • 메모리 낭비 방지
    • Redis는 기본적으로 데이터 소실이 허용되는 데이터를 저장하므로 장기 저장이 불필요함
    • 최소 보관 시간을 TTL로 설정하여 불필요한 메모리 낭비를 방지할 수 있음

 

제거 정책 설정

  • 메모리 사용량이 maxmemory에 도달하면 maxmemory-policy에 따라 키 제거함

 

예시

더보기
# 모든 키 대상
maxmemory-policy allkeys-lru # 오래된 데이터 자동 정리 
maxmemory-policy allkeys-lfu # 가장 적게 사용된 데이터 자동 정리
maxmemory-policy allkeys-random # 아무 데이터나 자동 정리 (공간이 부족할 때, 무작위로 삭제해도 상관없는 경우)

# TTL이 설정된 키 대상
maxmemory-policy volatile-ttl # 가장 만료 시간이 가까운 데이터 삭제
대상
  • volatile-: TTL이 설정된 키 대상
  • allkeys-: 모든 키 대상

 

전략
  • LRU, LFU, 랜덤, TTL 기반 정책 선택 가능

 

백업

스냅숏 생성 시 고려사항
  • COW 로 인해 두 배의 메모리 필요
  • 서비스 영향이 적은 시간대에 실행하여 서비스를 원활히 운영하기
  • 마스터가 아닌 레플리카에서 수행 (단, 비동기 동기화로 인해 일관성이 깨질 가능성 있음)
  • 지연 발생 시 완전 동기화가 필요할 수 있으며, 이때 마스터 노드에도 메모리 용량이 필요하므로 여유가 있는지 필수로 확인하기

 

커넥션 풀링

  • 새로운 연결 생성 시, 비용과 오버헤드가 증가하므로 커넥션 풀링으로 해결함
  • maxclients 지시자로 셋팅 가능 (최대 개수는 커널 소프트 제한 영향을 받음)

 

재시도 처리

  • 통신 장애 시, 클라이언트에서 재시도 수행
  • 재시도 고려 요소, 횟수, 타임아웃, 간격, 상한선
  • 지수 백오프 알고리즘: 실패 시 대기시간을 두배로 증가시키고 재시도하기
  • 지터 적용: 클라이언트의 동시 재시도를 방지함. (과부하를 예방함)