[개발자를 위한 레디스] 세션스토어로서의 레디스

박상준·2024년 6월 23일
0

REDIS

목록 보기
18/21
post-custom-banner

세션?

  • 세션은 서비스를 사용하는 클라이언트의 상태 정보를 의미한다.
  • 역할
    • 어플은 현재 서비스에 로그인된 클라이언트가
      • 누구 인지
      • 어떤 활동을 하는지 저장함.
    • 유저가 서비스를 떠나면 세션 스토어에서 유저의 정보를 삭제함
  • 예시
    • 쇼핑몰 사이트에서 유저가 장바구니에 담은 물건
    • 최근 본 아이템
    • 각 페이지에서 보낸 시간 등을 저장하여 사용자 행동을 분석하고 비즈니스 개선에 활용

레디스를 세션 스토어로 사용하는 이유

  • 빠른 응답 속도
    • 유저가 로그인해 있는 동안 세션 데이터를 끊임없이 읽고 쓰기에, 빠른 응답 속도가 필수적임
  • 사용의 간편함
    • 레디스는 키 - 밸류 형식으로 사용이 간단, 다양한 자료구조(string, set, hash 등)를 제공하여 사용자 데이터를 저장하기에 용이함.

세션 스토어가 필요한 이유

  • 초기 서비스 단계
    • 단일 서버의 경우
      • 서비스 초창기에는 각 웹 서버에 세션 스토어를 두고 자체적으로 세션을 관리
  • 서비스 확장 단계
    • 다중 서버(MSA)
      • 서비스가 확장되어 웹 서버가 여러 대로 늘어나는 경우, 여러 개의 웹 서버에 트래픽을 분배하여 더 많은 유저를 수용가능

세션 스토어 문제점과 해결방안

  • Sticky Session

    • 문제점
      • 각 웹 서버별로 세션 스토어를 따로 관리하면 유저는 자신의 세션 정보를 갖고 있는 웹 서버에 종속된다.
      • 유저 데이터 정합성 문제를 야기함
    • 쇼핑 카트에 아이템을 저장했는데, 서버 재접속할 때마다 아이템이 사라졌다 생겼다 하는 문제
    • 특정 웹 서버에 유저가 몰려서 트래픽이 집중되는 상황이 발생함.
    • 트래픽을 분산시킬 수 없는 상황이 발생.
  • All-to-All 방법

    • 해결 방안
      • 유저의 세션 정보를 모든 웹 서버에 복제해서 저장하는 방법
    • 장점
      • 유저를 여러 웹 서버에 분산시킬 수 있음.
    • 단점
      • 불필요한 저장 공간을 차지
        • 하나의 유저는 한 번에 하나의 웹 서버에만 접속하기에
        • 다른 웹 서버에 저장된 유저의 세션 정보는 무의미하다.
      • 불필요한 네트워크 트래픽이 발생
        • 데이터 복제 과정에서 불필요한 네트워크 트래픽이 다수 발생
  • REDIS 를 세션 스토어 사용하는 방법

    • 해결

      • 레디스를 세션 스토어로 사용하여 서버와 데이터베이스를 분리가능하다.
    • 구성

      • 여러 서버에서 레디스를 세션 스토어로 바라보도록 구성한다.
    • 장점

      • 유저는 세션 스토어에 구애받지 않고 어떤 웹 서버에 연결되더라도 동일한 세션 데이터 조회 가능
      • 트래픽의 효율적 분산가능
      • 데이터 일관성 고려할 필요가 없음
      • RDB 보다 빠르고, 접근도 간편해서 데이터를 가볍게 저장가능
    • 코드예시

      • hash 자료 구조 사용
        - 세션 데이터를 저장하기에 알맞은 형태

      • HMSET 으로 해시맵 형태로 저장

        • 키 이름 usersession:1
        • value
          • Name, IP, Hits 값으로 각각 해당 키값은 별도의 field 와 value 를 가진다.
profile
이전 블로그 : https://oth3410.tistory.com/
post-custom-banner

0개의 댓글