Redis란? 그리고 왜 만들어보나?
Redis(REmote DIctionary Server) = 키-값(key-value) 형태로 데이터를 다루는 오픈소스 NoSQL 데이터베이스. 디스크가 아니라 **메모리(RAM)**에 데이터를 직접 저장·조회하기 때문에 쿼리 없이 키만 알면 값을 바로 꺼낼 수 있고, 그만큼 빠릅니다. 캐시(임시 저장), 세션 저장 등에 전 세계적으로 쓰입니다.
왜 캐시로 많이 쓰일까?
캐시는 "한 번 읽어온 데이터를 가까운 곳에 보관해서, 다음에 또 찾을 때 빠르게 꺼내주는 공간"입니다. 서버가 매번 느린 디스크 기반 DB까지 가는 대신, Redis 같은 캐시부터 확인하는 흐름을 씁니다.
1. 클라이언트 → 서버: 데이터 요청
2. 서버 → 캐시(Redis): "이 데이터 있어?"
있으면 → 캐시에서 바로 반환 (빠름, 여기서 끝)
없으면 → 3번으로
3. 서버 → DB: 디스크 기반 DB에서 조회
4. 서버: 가져온 데이터를 캐시에도 저장해두고, 클라이언트에 반환한 번 캐시에 들어간 데이터는 다음 요청부터 2번에서 바로 끝나기 때문에 훨씬 빨라집니다.
인메모리 DB vs 디스크 기반 DB
일반적인(디스크 기반) DB는 자주 쓰는 데이터 "일부만" 메모리에 올려두고 나머지는 디스크에서 읽습니다. Redis 같은 인메모리 DB는 반대로 데이터 자체를 메모리에서 갱신하고, 백업·로그만 디스크에 남깁니다.
- 메모리만 오가니 디스크 I/O 병목이 없어서 훨씬 빠르다.
- 대신 서버가 꺼지면 메모리 내용이 날아갈 수 있어서, 실제 Redis는 스냅샷·로그 같은 이중화 장치를 따로 마련해둔다.
이 미션은 Redis 그 자체가 아니라, Redis가 빠른 이유인 내부 자료구조 3종(해시맵, 이중 연결 리스트, 힙)을 직접 손으로 구현하면서 원리를 체득하는 것이 목표입니다. 그래서 Python이 기본 제공하는 dict, set, collections 사용이 금지되어 있습니다.
출처: Codyssey-B1/B5-1