Redis는 “Remote Dictionary Server”의 약자로,
고성능 인메모리(In-memory) 데이터 저장소이자 캐시(cache), 메시지 브로커로도 활용되는 오픈소스 시스템을 말한다.
Redis는 데이터를 RAM(메모리) 에 저장하기 때문에
디스크 기반 DB(MySQL, PostgreSQL 등)보다 훨씬 빠르게 읽고 쓸 수 있다.
이 덕분에 Redis는 주로 다음과 같은 용도로 쓰인다.
| 용도 | 설명 |
|---|---|
| 캐시(Cache) | DB에서 자주 조회되는 데이터를 메모리에 저장해 응답 속도를 높임 |
| 세션 관리(Session Storage) | 로그인 정보나 세션 토큰(JWT Refresh Token 등)을 관리 |
| 실시간 카운팅 | 좋아요 수, 조회 수, 접속자 수 등 실시간 집계 |
| 메시지 큐 / Pub-Sub | 분산 시스템 간 메시지 전달 및 이벤트 브로커 역할 |
| 분산 락 (Distributed Lock) | 여러 서버가 동시에 같은 자원에 접근하지 못하게 제어 |
Redis는 단순한 “Key-Value” 저장소지만, Value에 다양한 자료구조를 지원한다.
| 자료형 | 설명 | 예시 |
|---|---|---|
| String | 기본 문자열 값 | SET name "Jess" |
| List | 순서가 있는 문자열 리스트 | 채팅 메시지 큐 등 |
| Set | 중복 없는 집합 | 좋아요 누른 사용자 목록 |
| Sorted Set (ZSet) | 정렬된 Set | 랭킹 시스템(점수 기반 정렬) |
| Hash | 필드-값 구조 | JSON처럼 key-value 여러 개 저장 |
| Stream | 로그/이벤트 스트림 | Kafka처럼 실시간 이벤트 처리 |
Redis는 JWT Refresh Token 관리 및 로그아웃 처리에 자주 쓰인다.
예를 들어:
// Refresh Token 저장
redisTemplate.opsForValue().set(
"refresh:" + userId, refreshToken, 7, TimeUnit.DAYS
);
// 로그아웃 시 블랙리스트 처리
redisTemplate.opsForValue().set(
"blacklist:" + accessToken, "logout", accessTokenExpireTime, TimeUnit.MILLISECONDS
);
이 구조는 DB보다 훨씬 빠르게 토큰을 저장하고 조회할 수 있어
보안과 성능을 모두 만족시킨다.
| 항목 | Redis | 일반 DB (예: PostgreSQL) |
|---|---|---|
| 저장 위치 | 메모리 (RAM) | 디스크 |
| 속도 | 매우 빠름 (μs 단위) | 상대적으로 느림 (ms 단위) |
| 데이터 영속성 | 선택적 (RDB, AOF) | 항상 보장 |
| 주 용도 | 캐시, 세션, 토큰, 큐 | 트랜잭션, 영속 데이터 저장 |
| 구조 | Key-Value 기반 | 테이블/컬럼 기반 |