🗂️ Redis(Remote Dictionary Server)?
"Key-Value 구조의 데이터 저장소"
Redis는 자주 접근되는 데이터를 주기억장치인 메모리(RAM)에 저장해두고, 빠르게 꺼내쓰는 방식이다(In-memory).
DB, Cache, Message Queue, Shared Memory 용도로 사용된다.
Redis는 단순한 문자열뿐만 아니라 다음과 같은 다양한 자료구조도 저장할 수 있다:
- String: 기본적인 키-값
- List: 연결 리스트 형태로 push/pop 가능
- Set: 중복 없는 집합
- Sorted Set (ZSet): 정렬된 집합
- Hash: JSON처럼 키-값 쌍의 묶음
- Bitmap, HyperLogLog, Stream: 특별한 상황을 위한 고급 구조
Redis는 단순 캐시를 넘어서 세션 관리, 실시간 순위 시스템, 채팅 서버, 실시간 알림, Pub/Sub 메시지 브로커 등 다양한 용도로 활용된다.
✔️ 정리하면, Redis는 "메모리 기반으로 작동하는 매우 빠른 Key-Value 데이터 저장소"이자, 필요에 따라 디스크 백업도 가능하고 다양한 자료구조를 지원하는 다재다능한 시스템이다.
| 왜 컴퓨터는 RAM이 적으면 느려질까?
RAM은 책상 위의 작업 공간, SSD/HDD는 책장이나 서랍이라고 이해하면 쉽다.
RAM이 넉넉한 경우, 작업 공간이 넓은 책상이어서, 한 번에 여러 책을 펴놓고 노트북도 열고 메모장도 꺼내어 작업이 가능하다. 또, 빠르게 왔다갔다 하면서 처리가 가능해 속도가 빠르다.
반면, 공간이 좁으면 책 하나 꺼내려면 다른 건 치워야 한다. 매번 책장에서 꺼내고 다시 넣는 과정을 반복해 시간 낭비가 많아진다. 컴퓨터에서는 이것을 '디스크 스와핑'이라고 한다.
RAM이 실행 중인 프로그램, 데이터, 캐시를 다 담지 못하면, 운영체제가 RAM 대신 디스크에 데이터를 임시 저장 하는 것이다.
메모리 부족으로 인해 CPU는 기다려야 하고, 전체 시스템 성능이 저하된다.
그렇다고 RAM 초과 시에 무조건 스와핑이 되는 것은 아니다. 스왑 공간이 설정되어 있다면, 우선 RAM의 일부 데이터를 디스크로 내보내고 그 스왑도 가득 차면 OOM Killer가 작동해 메모리를 많이 쓰는 프로세스를 강제 종료한다. 이때는 진짜로 데이터가 유실될 수 있다.
🗂️ Redis가 데이터를 유지하는 방법
앞서 다뤘듯, Redis는 메모리(RAM)에 데이터를 저장시켜 꺼내쓰는 방식이다. 그러나 RAM은 휘발성 메모리로, 전원이 꺼지면 모든 데이터가 사라진다. 그렇다면 Redis는 컴퓨터의 전원이 꺼졌다가 다시 켜졌을 때 어떻게 데이터를 유지할까?
Redis는 이런 휘발성 문제를 해결하기 위해, 디스크에 데이터를 저장하는 영속성 기능을 제공한다.
1. RDB(Redis Database Snapshot)
Redis는 일정 시간마다 메모리 상태를 한 번에 저장해 `.rdb` 파일로 디스크를 남긴다. 서버가 재시작되면 이 파일을 읽어서 다시 메모리에 불러온다.
2. AOF(Append Only File)
모든 쓰기 작업을 로그처럼 순서대로 파일에 저장한다. 서버가 재시작되면 이 로그를 따라 명령을 다시 실행하면서 상태를 복구한다.
보통은 RDB + AOF를 함께 사용해서 빠른 복구 + 최신 상태 보장을 동시에 잡는다.
실제 Redis 설치 디렉터리에는 `dump.rdb`나 `appendonly.aof` 같은 파일이 생성되며, 이게 바로 RAM 데이터가 날아가지 않게 해주는 백업 장치이다.
✔️ 요약하면, Redis는 인메모리 기반이라 빠르지만, RAM의 휘발성을 보완하기 위해 디스크에도 데이터를 저장하는 메커니즘을 갖추고 있다.
| Redis의 영속성과 디스크 스와핑의 차이점
Redis의 영속성
- 목적: 서버 재시작 이후에도 데이터를 복원하기 위함
- 주체: Redis(애플리케이션 수전)
- 작동 시점: 평소(설정에 따라 주기적으로)
- 저장 장소: `rdb` 또는 `aof` 파일
- 데이터 복원 여부: 가능, Redis가 부팅 시 복원
- 속도 영향: 저장 시 잠깐의 디스크 I/O 있음
- 통제 가능성: 사용자가 설정 가능
디스크 스와핑
- 목적: RAM이 부족할 때 임시로 데이터를 디스크에 밀어넣기 위함
- 주체: 운영체제(OS)
- 작동 시점: RAM이 부족할 때만 자동으로 작동
- 저장 장소: 운영체제가 관리하는 swap 공간
- 데이터 복원 여부: 불가능, 스왑은 복원용이 아니라 임시 저장용
- 속도 영향: 심가간 성능 저하 발생
- 통제 가능성: 운영체제가 자동으로 처리하므로 직접 통제가 어려움