Redis 캐시

moon.kick·2025년 4월 16일

좋아! ❤️‍🔥 Redis를 활용한 캐시, 세션, JWT 블랙리스트 적용법 전부 알려줄게.
스프링 기반 웹 개발에서 진짜 많이 쓰이는 기능들이니까 한방에 정리해서 가자!


🧰 1. Redis 캐시 (Cache)

✅ "자주 조회되는 데이터를 DB까지 가지 말고 Redis에서 바로 꺼내자!"

✨ 사용 예시

  • 게시글 상세보기
  • 실시간 인기글 랭킹
  • 외부 API 응답값

🔧 예제 (캐시 적용 서비스)

@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;
    }
}

✅ 요점

  • DB -> Redis 저장 (miss)
  • 다음부터는 Redis만 조회 (hit)
  • TTL(만료시간) 설정으로 자동 삭제

🧩 2. Redis 세션 저장소 (Spring Session)

✅ "서버가 여러 대일 때, 세션을 메모리가 아니라 Redis에 저장해서 공유하자!"

🔧 설정 (build.gradle)

implementation 'org.springframework.session:spring-session-data-redis'

🔧 application.yml

spring:
  session:
    store-type: redis
  redis:
    host: localhost
    port: 6379

✅ 작동 방식

브라우저세션 저장 위치
요청 O서버에 저장 ❌ → Redis에 저장 ⭕
로그아웃Redis에서 세션 삭제

✅ 활용 포인트

  • 세션 클러스터링 가능 (부하분산 LB 구조에서도 세션 유지)
  • HttpSession 인터페이스 그대로 사용
  • 로그인 시 세션이 Redis에 저장됨

🛑 3. JWT 블랙리스트 처리 (로그아웃 토큰 처리)

✅ "JWT는 무상태(stateless)라서 로그아웃해도 유효기간까지 계속 쓸 수 있어.
그래서 Redis에 블랙리스트로 따로 저장해서 차단해야 함!"


✨ 흐름

  1. JWT 토큰 발급 후 클라이언트가 보관
  2. 로그아웃 시 → Redis에 해당 토큰 저장
  3. 필터에서 매 요청마다 Redis에 블랙리스트 토큰 여부 확인
  4. 있으면 401 Unauthorized

🔧 예제 코드

1. 로그아웃 시 토큰 블랙리스트 등록

public void logout(String token) {
    long expiration = jwtUtil.getRemainingTime(token); // 남은 만료 시간 계산
    redisTemplate.opsForValue().set("blacklist:" + token, "logout", Duration.ofMillis(expiration));
}

2. 필터에서 블랙리스트 검증

if (redisTemplate.hasKey("blacklist:" + token)) {
    response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
    return;
}

🧠 정리: Redis 3대 실전 활용법 요약표

기능사용 목적Redis 키 예시TTL 사용관련 기술
✅ 캐시빠른 조회post:123ORedisTemplate
✅ 세션로그인 상태 유지spring:session:sessions:<ID>OSpring Session
✅ 블랙리스트JWT 무효화blacklist:<token>O (만료 시까지)JwtUtil, RedisTemplate

📌 추가로 이런 것도 가능해

응용예시
🔄 자동 로그아웃 처리TTL이 끝나면 세션/토큰 자동 소멸
🏆 실시간 랭킹ZSet (SortedSet) 활용해서 좋아요 순위 만들기
🔔 실시간 알림Pub/Sub 기능으로 채팅, 알림 시스템 구현 가능

🙋 다음에 해볼 수 있는 것

  • 🔐 Spring Security와 Redis 연동 (세션 + 블랙리스트 통합)
  • 📱 JWT 토큰 + Refresh 토큰 시스템
  • 🌐 Redis 클러스터 구성 + Sentinel으로 장애 대응

이제 Redis 완전 꿰뚫었어 🎯
혹시 이걸 기반으로 해서 실습 프로젝트 예제 만들어줄까?
아니면 로그인+로그아웃 JWT/Redis 통합 흐름 전체 코드를 하나로 보여줄까? 🙌

profile
@mgkick

0개의 댓글