Skip to content

Redis 직접 만들기 ​

Redis가 무엇이고 왜 직접 만들어보는지, 그리고 명령을 입력받아 실행하는 REPL 대화형 프로그램 구조까지 정리합니다.

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 사용이 금지되어 있습니다.

REPL - 대화형 프로그램 만들기 ​

직접 만든 mini-redis는 명령을 한 줄씩 입력받아 실행하는 REPL 형태로 사용합니다.

REPL = Read(읽기) → Eval(실행) → Print(출력) → Loop(반복).

python
while True:
    line = input("mini-redis> ")   # 1. Read: 입력받기
    if line.strip().lower() in ("exit", "quit"):
        break                       # 종료 조건
    result = execute(line)          # 2. Eval: 파싱해서 실행
    print(result)                   # 3. Print: 출력
                                    # 4. Loop: 반복

파싱은 line.split()으로 쪼개되, "Alice"처럼 따옴표로 감싼 값은 따옴표를 벗겨서 처리하면 됩니다.

정리 ​

개념비전공자 버전 요약
Redis메모리(RAM)에 키-값으로 저장해 바로 꺼내 쓰는 빠른 DB, 주로 캐시로 사용
미션 목표dict/set/collections 없이 해시맵, 이중 연결 리스트, 힙을 직접 구현
REPL입력→실행→출력 무한 반복 대화창

출처: Codyssey-B1/B5-1