forked from MinePing/Final
-
Notifications
You must be signed in to change notification settings - Fork 0
library redis
qbsb147 edited this page Mar 21, 2026
·
5 revisions
Redis는 메모리 기반(In-Memory) Key-Value 데이터 저장소이다.
- 데이터를 메모리에 저장하여 빠른 읽기/쓰기 성능 제공
- 단순 캐시를 넘어 세션, 메시징, 실시간 처리 등 다양한 용도로 활용됨
메모리는 휘발성이기 때문에
👉 Redis를 종료하면 데이터가 모두 사라질 것처럼 보인다.
하지만 Redis는 단순한 메모리 DB가 아니라
디스크 기반 영속성(Persistence)을 지원하는 DB
- 특정 시점에 메모리 상태를 디스크에 저장
- 재시작 시 저장된 파일을 다시 로드
결과
- 데이터 유실 방지 가능 (완전 무손실은 아님)
-
RDB (Snapshot)
- 특정 시점의 데이터를 통째로 저장
- 빠른 복구 가능
-
AOF (Append Only File)
- 모든 쓰기 명령을 로그로 저장
- 데이터 유실 최소화
일반적인 DB는 디스크에서 데이터를 읽어오기 때문에
I/O 비용이 발생한다.
- 디스크 기반 DB → 페이지 단위 읽기 → I/O 병목 발생
- Redis → 메모리 직접 접근 → 매우 빠름
👉 특히 다음 상황에서 차이가 크게 발생
- 반복적인 조회
- 실시간 처리
- 세션 검증
웹 서비스에서는 다음 두 가지 요청이 존재한다.
- 비인가 사용자 요청
- 인가된 사용자 요청 (세션 필요)
인가된 요청은 매번 다음 작업이 필요하다.
👉 “이 사용자의 세션이 유효한가?”
이 검증이 반복되면 성능에 큰 영향을 준다.
- 세션 조회 시 디스크 I/O 발생
- 반복 호출 시 병목 발생
- 메모리 기반 → 즉시 조회
- 빠른 인증 처리 가능
결론
- 세션 저장소는 속도가 핵심
- Redis가 매우 적합
Redis는 단순 저장소를 넘어
메시지 브로커 역할도 수행한다.
- Publisher → 메시지 발행
- Subscriber → 메시지 구독
특징
- 특정 채널 기반
- 실시간 메시지 전달
활용
- 채팅 시스템
- 알림 시스템
- 이벤트 기반 처리
메모리를 할당/해제하는 과정에서
중간중간 빈 공간이 발생한다.
문제
- 충분한 총 메모리가 있어도 연속된 공간이 없으면 할당 실패
결과
- 메모리 낭비
- 심하면 프로세스 종료 가능
Redis는 일부 작업에서
Copy-On-Write 방식을 사용한다.
특징
- 기존 데이터를 복사 후 수정
문제
- 순간적으로 메모리 사용량 증가 (최대 2배 이상 가능)
결론
- Redis는 항상 여유 메모리 확보 필수
- 데이터 만료 시간 설정
- 자동 삭제 → 메모리 확보
- 불필요한 데이터 제거
- 자주 사용되지 않는 데이터 정리
- Least Recently Used
- 오래 사용되지 않은 데이터 제거
- 데이터 크기 감소 → 메모리 절약
Redis는 고가용성을 위해
복제 및 클러스터링을 지원한다.
- Master / Replica 구조
- 장애 발생 시 일부 데이터 유실 가능
예:
- Master 장애 → Replica 승격
- 이 과정에서 최신 데이터 일부 손실 가능
이유
- 기본적으로 비동기 복제
- replication lag 최소화
- 노드 간 네트워크 성능 확보
- 동기 복제 사용 고려 (성능 저하와 트레이드오프)
결론
- Redis는 성능 vs 데이터 정합성 트레이드오프 존재