좋아! 지금 JWT랑 Spring Security 공부 중이니까,
"레디스(Redis)"는 특히 세션 저장소, 토큰 블랙리스트, 캐시 처리 등에서 자주 쓰이는 핵심 기술이야.
아주 가볍고 빠른, 고성능 인메모리 데이터 저장소야.
Remote DIctionary Server
메모리 기반의 초고속 Key-Value 저장소
| 특징 | 설명 |
|---|---|
| 🔥 초고속 | 메모리에 저장하니까 디스크보다 훨씬 빠름 (ms 수준) |
| 🧾 Key-Value 구조 | user:1 → {"name": "Moongi", "age": 37} |
| 💾 다양한 데이터 구조 | 문자열(String), 리스트(List), 셋(Set), 해시(Hash), 정렬셋(Sorted Set) |
| ♻️ TTL (만료시간) 지원 | 캐시나 토큰에 딱 맞아! (EXPIRE user:1 60) |
| 🔁 영속성 옵션 | RDB, AOF를 통해 디스크에 백업도 가능 |
| 🔄 분산 가능 | 클러스터링, 레플리케이션, Sentinel 등 지원 |
| 분야 | 사용 예시 |
|---|---|
| ✅ 캐시 | DB 쿼리 결과 캐싱, API 응답 캐싱 |
| ✅ 세션 저장소 | Spring Session + Redis 조합으로 세션 중앙 관리 |
| ✅ JWT 블랙리스트 | 로그아웃된 토큰 저장해서 재사용 막기 |
| ✅ 순위 시스템 | 정렬된 순위 (예: 게시판 좋아요 수 TOP 10) |
| ✅ Pub/Sub | 실시간 메시지 알림 시스템 |
| ✅ 분산락 | 여러 서버가 동시에 특정 리소스를 점유 못 하게 막는 제어장치 |
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
application.yml 설정spring:
redis:
host: localhost
port: 6379
@Service
public class RedisService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void save(String key, String value) {
redisTemplate.opsForValue().set(key, value, Duration.ofMinutes(5));
}
public String get(String key) {
return redisTemplate.opsForValue().get(key);
}
public void delete(String key) {
redisTemplate.delete(key);
}
}
public void logout(String token) {
// 토큰의 만료시간 계산
long expiration = jwtUtil.getExpiration(token);
// Redis에 블랙리스트 등록
redisTemplate.opsForValue().set("blacklist:" + token, "logout", Duration.ofMillis(expiration));
}
| 시나리오 | Redis가 어떻게 도와줄까? |
|---|---|
| ✅ JWT 토큰 로그아웃 | 블랙리스트 저장 (재사용 방지) |
| ✅ 세션 중앙 관리 | 서버 여러 대가 세션 공유 가능 |
| ✅ DB 부하 완화 | 자주 쓰는 데이터 Redis로 캐싱 |
| ✅ 실시간 알림/채팅 | Pub/Sub 메시지 브로커로 활용 |
원하면
Spring + JWT + Redis 조합 예제 흐름 로그아웃 시 토큰 블랙리스트 처리 코드 Spring Session Redis 적용 예시지금 Redis는 어떤 용도로 쓰고 싶어? 캐시? 세션? 블랙리스트?
그에 따라 코드 흐름 같이 짜줄게 🙌