Redis

김채영·2025년 3월 27일

Redis(Remote Dictionary Server)

개념

  • 다수의 서버가 공유하는 해시테이블
  • 각각의 서버 안에 로컬하게 존재하는 것이 아니라, 개별적인 원격상 존재해 다수의 서버가 공통 사용
  • 애플리케이션에서 세션을 활용하면 사용자가 로그인한 상태를 유지하고, 특정 요청에 대한 정보 저장

특징

  • 오픈소스 인메모리 데이터 저장소
  • 싱글 스레드 기반
  • 클러스터 모드 지원
  • 휘발성 데이터를 저장하지만 RDB와 AOF라는 특성을 통해 안전하게 영속적 관리
  • Pub/Sub과 같은 기술이 자체적으로 구현

RDB(RedisDataBase)
-> 특정 기간 스냅샷을 생성하는 기술
-> 장애가 발생하면 특정 시점에 스냅샷으로 빠르게 캐시를 되돌리거나 동일한 데이터를 가진 캐시를 복제
-> 스냅샷의 특성상 스냅샷이 생성되기 이전의 일부 데이터는 유실 위험
AOF(AppendOnlyFile)
-> 레디스에 적용되는 write 작업을 모두 log로 저장하는 방식

흐름

  1. 클라이언트 요청
    -> 사용자가 웹사이트에 접속하여 로그인 등의 요청을 보냄
    -> 브라우저는 쿠키를 포함할 수도 있고, 포함하지 않을 수도 있음
  2. 서버 세션 생성
    -> 서버는 해당 사용자에 대한 고유 세션 생성
    -> 세션 데이터를 저장소에 저장
  3. 클라이언트에게 세션 ID 전달
    -> 서버는 세션 ID를 응답의 Set-Cookie 헤더를 통해 클라이언트에게 전달
    -> 클라이언트는 이를 쿠키에 저장
  4. 클라이언트의 이후 요청
    -> 클라이언트가 요청을 보낼 때, 저장된 세션 ID가 포함된 쿠키를 함께 전송

세션 테스트

로컬

wsl --install ##레디스 실행환경을 위한 작업

redis-cli ##레디스 실행

KEYS * ##현재 저장된 세션 값들

flushall ##기존 세션값 모두 지우기

  • 이런 식으로 세션 ID값이 생성
  • WAS쪽에서도 세션 ID값이 동일한 것으로 확인

개인적인 생각

  • 웹브라우저 쿠키 세션 ID값과 Redis 세션 ID값, WAS 세션 ID값을 다 확인한 결과, 웹브라우저만 구조값이 달랐음
  • 무작정 이유를 찾아보아도 떠오르는 해결방법이 없었음
  • yml설정파일에 구조도 맞춰보고 이름도 변경했지만 별 다른게 없었음
  • 이유는 ?
  • 찾아본 결과 디코딩 해야 했음
  • 브라우저 값을 디코딩하면 세션과 동일한 값이 나옴
  • 결국 세개의 값은 모두 동일

참고자료
https://cobinding.tistory.com/234#Redis%20%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-1

profile
백엔드 개발⭐

0개의 댓글