Redis
무엇인가
Redis는 데이터를 RAM에 보관해 매우 빠른 읽기와 쓰기를 제공하는 인메모리 데이터 저장소로, 디스크에 선택적으로 영속화할 수도 있습니다. 키-값 저장소로 동작하지만 리스트, 셋, 정렬된 셋, 해시, 스트림 같은 풍부한 데이터 구조를 지원합니다. 주로 기본 데이터베이스와 함께 캐시, 세션 저장소, 큐, 속도 제한기로 사용됩니다.
강점
- 인메모리 동작 덕분에 1밀리초 미만의 지연 시간을 제공합니다.
- 다재다능한 구조: 문자열, 해시, 리스트, 셋, 정렬된 셋, 스트림.
- 내장 TTL/만료 기능 덕분에 캐싱과 세션에 이상적입니다.
- 원자적 연산과 Lua 스크립팅으로 안전한 카운터와 락을 구현할 수 있습니다.
- pub/sub와 스트림으로 메시징과 이벤트 파이프라인을 지원합니다.
트레이드오프
- 데이터는 사용 가능한 메모리에 제한되며, 대규모 데이터셋은 비용이 많이 듭니다.
- 영속화는 선택 사항이며 충돌 시 최근 쓰기를 잃을 수 있습니다.
- 내구성 있는 관계형 저장소를 대체하지는 못합니다.
- 클러스터링은 샤딩과 장애 조치를 위한 운영 복잡성을 더합니다.
언제 사용하나
비용이 큰 쿼리 결과를 캐싱하거나, 세션을 저장하거나, 속도 제한을 구현하거나, 작업 큐를 관리하거나, 리더보드를 만들거나, 실시간 메시지를 전달할 때 Redis를 사용하세요. 진실의 원천(source of truth)을 보관하는 내구성 있는 데이터베이스와 함께 사용하세요.
바이브 코딩 적합성
AI에게 지시할 때는 Redis가 시스템의 기록 원천(system of record)이 아니라 캐시 또는 보조 저장소임을 명확히 해서, 캐시 항목에는 항상 TTL을 설정하고 명확한 키 명명 규칙(예: user:123:profile)을 설계하도록 하세요. 경쟁 상태(race)가 발생할 수 있는 읽기-수정-쓰기 시퀀스 대신 카운터에는 INCR, 락에는 SET ... NX EX 같은 원자적 명령을 사용하도록 요청하세요. 유용한 팁: AI가 cache-aside 패턴(캐시를 읽고, 없으면 데이터베이스로 폴백한 뒤 캐시를 채움)을 구현하고 무효화(invalidation) 전략을 설명하게 해서 오래된 데이터가 남지 않도록 하세요.
# 1시간 만료로 값을 캐싱
SET user:123:profile "{\"name\":\"Ada\"}" EX 3600
# 원자적 속도 제한 카운터
INCR rate:ip:203.0.113.5
EXPIRE rate:ip:203.0.113.5 60
# 분산 락: 존재하지 않을 때만 설정하고 자동 만료
SET lock:job:42 "owner-a" NX EX 30
# 정렬된 셋으로 리더보드 구현
ZADD leaderboard 4200 "player:7"
ZREVRANGE leaderboard 0 9 WITHSCORES