10/17

졸용·2025년 10월 17일

TIL

목록 보기
95/144

🔹 Redis란?

Redis는 “Remote Dictionary Server”의 약자로,

고성능 인메모리(In-memory) 데이터 저장소이자 캐시(cache), 메시지 브로커로도 활용되는 오픈소스 시스템을 말한다.



🔹Redis의 기본 개념

Redis는 데이터를 RAM(메모리) 에 저장하기 때문에
디스크 기반 DB(MySQL, PostgreSQL 등)보다 훨씬 빠르게 읽고 쓸 수 있다.
이 덕분에 Redis는 주로 다음과 같은 용도로 쓰인다.

용도설명
캐시(Cache)DB에서 자주 조회되는 데이터를 메모리에 저장해 응답 속도를 높임
세션 관리(Session Storage)로그인 정보나 세션 토큰(JWT Refresh Token 등)을 관리
실시간 카운팅좋아요 수, 조회 수, 접속자 수 등 실시간 집계
메시지 큐 / Pub-Sub분산 시스템 간 메시지 전달 및 이벤트 브로커 역할
분산 락 (Distributed Lock)여러 서버가 동시에 같은 자원에 접근하지 못하게 제어


🔹 Redis의 데이터 구조

Redis는 단순한 “Key-Value” 저장소지만, Value에 다양한 자료구조를 지원한다.

자료형설명예시
String기본 문자열 값SET name "Jess"
List순서가 있는 문자열 리스트채팅 메시지 큐 등
Set중복 없는 집합좋아요 누른 사용자 목록
Sorted Set (ZSet)정렬된 Set랭킹 시스템(점수 기반 정렬)
Hash필드-값 구조JSON처럼 key-value 여러 개 저장
Stream로그/이벤트 스트림Kafka처럼 실시간 이벤트 처리


🔹 Redis의 장점

  • 매우 빠른 속도 — 메모리 기반 처리
  • 💾 지속성 지원 — RDB 스냅샷 / AOF(Append Only File) 방식으로 디스크 백업 가능
  • 🔁 복제(Replication) — 마스터-슬레이브 구조로 장애 대응
  • 🧩 클러스터링(Clustering) — 대규모 분산 데이터 처리 가능
  • 🔐 트랜잭션, Lua 스크립트, TTL(만료시간) 등 고급 기능 제공


🔹 Redis와 Spring에서의 활용 예시

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 기반테이블/컬럼 기반
profile
꾸준한 공부만이 답이다

0개의 댓글