좋아! ❤️🔥 Redis를 활용한 캐시, 세션, JWT 블랙리스트 적용법 전부 알려줄게.
스프링 기반 웹 개발에서 진짜 많이 쓰이는 기능들이니까 한방에 정리해서 가자!
✅ "자주 조회되는 데이터를 DB까지 가지 말고 Redis에서 바로 꺼내자!"
@Service
public class PostService {
@Autowired
private RedisTemplate<String, Post> redisTemplate;
@Autowired
private PostRepository postRepository;
public Post getPost(Long id) {
String key = "post:" + id;
// Redis 캐시 먼저 조회
Post cachedPost = redisTemplate.opsForValue().get(key);
if (cachedPost != null) return cachedPost;
// 없으면 DB에서 조회 후 Redis에 저장
Post post = postRepository.findById(id).orElseThrow();
redisTemplate.opsForValue().set(key, post, Duration.ofMinutes(10));
return post;
}
}
TTL(만료시간) 설정으로 자동 삭제✅ "서버가 여러 대일 때, 세션을 메모리가 아니라 Redis에 저장해서 공유하자!"
implementation 'org.springframework.session:spring-session-data-redis'
spring:
session:
store-type: redis
redis:
host: localhost
port: 6379
| 브라우저 | 세션 저장 위치 |
|---|---|
| 요청 O | 서버에 저장 ❌ → Redis에 저장 ⭕ |
| 로그아웃 | Redis에서 세션 삭제 |
HttpSession 인터페이스 그대로 사용Redis에 저장됨✅ "JWT는 무상태(stateless)라서 로그아웃해도 유효기간까지 계속 쓸 수 있어.
그래서 Redis에 블랙리스트로 따로 저장해서 차단해야 함!"
해당 토큰 저장블랙리스트 토큰 여부 확인401 Unauthorizedpublic void logout(String token) {
long expiration = jwtUtil.getRemainingTime(token); // 남은 만료 시간 계산
redisTemplate.opsForValue().set("blacklist:" + token, "logout", Duration.ofMillis(expiration));
}
if (redisTemplate.hasKey("blacklist:" + token)) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return;
}
| 기능 | 사용 목적 | Redis 키 예시 | TTL 사용 | 관련 기술 |
|---|---|---|---|---|
| ✅ 캐시 | 빠른 조회 | post:123 | O | RedisTemplate |
| ✅ 세션 | 로그인 상태 유지 | spring:session:sessions:<ID> | O | Spring Session |
| ✅ 블랙리스트 | JWT 무효화 | blacklist:<token> | O (만료 시까지) | JwtUtil, RedisTemplate |
| 응용 | 예시 |
|---|---|
| 🔄 자동 로그아웃 처리 | TTL이 끝나면 세션/토큰 자동 소멸 |
| 🏆 실시간 랭킹 | ZSet (SortedSet) 활용해서 좋아요 순위 만들기 |
| 🔔 실시간 알림 | Pub/Sub 기능으로 채팅, 알림 시스템 구현 가능 |
이제 Redis 완전 꿰뚫었어 🎯
혹시 이걸 기반으로 해서 실습 프로젝트 예제 만들어줄까?
아니면 로그인+로그아웃 JWT/Redis 통합 흐름 전체 코드를 하나로 보여줄까? 🙌