Redis란

moon.kick·2025년 4월 16일

좋아! 지금 JWT랑 Spring Security 공부 중이니까,
"레디스(Redis)"는 특히 세션 저장소, 토큰 블랙리스트, 캐시 처리 등에서 자주 쓰이는 핵심 기술이야.
아주 가볍고 빠른, 고성능 인메모리 데이터 저장소야.


🟥 Redis란?

Remote DIctionary Server
메모리 기반의 초고속 Key-Value 저장소

  • 디스크 대신 RAM에 데이터를 저장해서 엄청 빠름
  • 보통 DB보조, 캐시, 세션관리, 실시간 처리에 사용됨
  • 단순 캐시를 넘어서 메시지 큐, 순위 시스템, Pub/Sub, 분산락 등도 가능함

🧠 핵심 특징 요약

특징설명
🔥 초고속메모리에 저장하니까 디스크보다 훨씬 빠름 (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실시간 메시지 알림 시스템
분산락여러 서버가 동시에 특정 리소스를 점유 못 하게 막는 제어장치

🔧 Spring Boot에서 Redis 연동 예시

1. 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-data-redis'

2. application.yml 설정

spring:
  redis:
    host: localhost
    port: 6379

3. RedisTemplate 사용 예시

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

🧪 JWT 로그아웃 시 Redis 활용 예시

public void logout(String token) {
    // 토큰의 만료시간 계산
    long expiration = jwtUtil.getExpiration(token);
    
    // Redis에 블랙리스트 등록
    redisTemplate.opsForValue().set("blacklist:" + token, "logout", Duration.ofMillis(expiration));
}

💡 Redis가 필요한 이유 (Spring 프로젝트 기준)

시나리오Redis가 어떻게 도와줄까?
✅ JWT 토큰 로그아웃블랙리스트 저장 (재사용 방지)
✅ 세션 중앙 관리서버 여러 대가 세션 공유 가능
✅ DB 부하 완화자주 쓰는 데이터 Redis로 캐싱
✅ 실시간 알림/채팅Pub/Sub 메시지 브로커로 활용

원하면

  • Spring + JWT + Redis 조합 예제 흐름
  • 로그아웃 시 토큰 블랙리스트 처리 코드
  • Spring Session Redis 적용 예시
    다 도와줄 수 있어!

지금 Redis는 어떤 용도로 쓰고 싶어? 캐시? 세션? 블랙리스트?
그에 따라 코드 흐름 같이 짜줄게 🙌

profile
@mgkick

0개의 댓글