Skip to content

library redis

qbsb147 edited this page Mar 21, 2026 · 5 revisions

📦 Redis 개념 및 실무 정리

📌 Redis란?

Redis는 메모리 기반(In-Memory) Key-Value 데이터 저장소이다.

  • 데이터를 메모리에 저장하여 빠른 읽기/쓰기 성능 제공
  • 단순 캐시를 넘어 세션, 메시징, 실시간 처리 등 다양한 용도로 활용됨

📌 In-Memory인데 데이터는 안 날아가나?

메모리는 휘발성이기 때문에
👉 Redis를 종료하면 데이터가 모두 사라질 것처럼 보인다.

하지만 Redis는 단순한 메모리 DB가 아니라
디스크 기반 영속성(Persistence)을 지원하는 DB

동작 방식

  • 특정 시점에 메모리 상태를 디스크에 저장
  • 재시작 시 저장된 파일을 다시 로드

결과

  • 데이터 유실 방지 가능 (완전 무손실은 아님)

대표 방식

  • RDB (Snapshot)

    • 특정 시점의 데이터를 통째로 저장
    • 빠른 복구 가능
  • AOF (Append Only File)

    • 모든 쓰기 명령을 로그로 저장
    • 데이터 유실 최소화

📌 Redis가 빠른 이유

일반적인 DB는 디스크에서 데이터를 읽어오기 때문에
I/O 비용이 발생한다.

  • 디스크 기반 DB → 페이지 단위 읽기 → I/O 병목 발생
  • Redis → 메모리 직접 접근 → 매우 빠름

👉 특히 다음 상황에서 차이가 크게 발생

  • 반복적인 조회
  • 실시간 처리
  • 세션 검증

📌 세션 저장소로 Redis를 사용하는 이유

웹 서비스에서는 다음 두 가지 요청이 존재한다.

  • 비인가 사용자 요청
  • 인가된 사용자 요청 (세션 필요)

인가된 요청은 매번 다음 작업이 필요하다.

👉 “이 사용자의 세션이 유효한가?”

이 검증이 반복되면 성능에 큰 영향을 준다.

Disk 기반 DB의 문제

  • 세션 조회 시 디스크 I/O 발생
  • 반복 호출 시 병목 발생

Redis 사용 시

  • 메모리 기반 → 즉시 조회
  • 빠른 인증 처리 가능

결론

  • 세션 저장소는 속도가 핵심
  • Redis가 매우 적합

📌 Pub/Sub (메시지 브로커 역할)

Redis는 단순 저장소를 넘어
메시지 브로커 역할도 수행한다.

구조

  • Publisher → 메시지 발행
  • Subscriber → 메시지 구독

특징

  • 특정 채널 기반
  • 실시간 메시지 전달

활용

  • 채팅 시스템
  • 알림 시스템
  • 이벤트 기반 처리

📌 메모리 관련 주의사항

1. 메모리 파편화 (Fragmentation)

메모리를 할당/해제하는 과정에서
중간중간 빈 공간이 발생한다.

문제

  • 충분한 총 메모리가 있어도 연속된 공간이 없으면 할당 실패

결과

  • 메모리 낭비
  • 심하면 프로세스 종료 가능

2. Copy-On-Write 영향

Redis는 일부 작업에서
Copy-On-Write 방식을 사용한다.

특징

  • 기존 데이터를 복사 후 수정

문제

  • 순간적으로 메모리 사용량 증가 (최대 2배 이상 가능)

결론

  • Redis는 항상 여유 메모리 확보 필수

📌 메모리 최적화 전략

TTL(Time To Live)

  • 데이터 만료 시간 설정
  • 자동 삭제 → 메모리 확보

데이터 관리

  • 불필요한 데이터 제거
  • 자주 사용되지 않는 데이터 정리

LRU 정책

  • Least Recently Used
  • 오래 사용되지 않은 데이터 제거

압축

  • 데이터 크기 감소 → 메모리 절약

📌 장애 대응 및 데이터 유실 이슈

Redis는 고가용성을 위해
복제 및 클러스터링을 지원한다.

구조

  • Master / Replica 구조

문제

  • 장애 발생 시 일부 데이터 유실 가능

예:

  • Master 장애 → Replica 승격
  • 이 과정에서 최신 데이터 일부 손실 가능

이유

  • 기본적으로 비동기 복제

📌 데이터 일관성 전략

방법

  • replication lag 최소화
  • 노드 간 네트워크 성능 확보
  • 동기 복제 사용 고려 (성능 저하와 트레이드오프)

결론

  • Redis는 성능 vs 데이터 정합성 트레이드오프 존재

📡 이벤트 스트리밍

⚙️ 개발 환경 구축

Websocket

Kafka

Redis

Debezium

🧩 기능 구현

이벤트리스너(Spring)

Pub/Sub 기반 메세지 처리(Redis)

이벤트 스트리밍 처리(Kafka)

CDC(Debezium)

🧠 개념

🎯 설계 패턴

🏗️ 아키텍처

📚 기술 스택

Clone this wiki locally