JSCODE Logo
JSCODE 박재성JSCODE 제이온JSCODE 시니
과외유튜브블로그후기
완강 후기 이벤트블로그 리뷰 이벤트AWS SAA 합격 후기 이벤트
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2026 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침

비전공자도 이해할 수 있는 Redis 중급/실전

Redis로 ‘쓰기 작업’에 대한 DB 부하 줄이기

Redis의 수많은 자료 구조를 효율적으로 배우려면?
List 자료 구조 (RPUSH, LRANGE, LPOP 등)
[실습] 좋아요 수 폭증으로 인한 DB 부하를 Redis로 해결하기 - 1
[실습] 좋아요 수 폭증으로 인한 DB 부하를 Redis로 해결하기 - 2

Redis로 동시성 이슈 해결하기

String 자료 구조 (SET, GET, DEL, SETNX)
[실습] 재고를 차감할 때 동시성 이슈로 인한 오차가 발생하지 않도록 만들기 - 1
[실습] 재고를 차감할 때 동시성 이슈로 인한 오차가 발생하지 않도록 만들기 - 2
[실습] 재고를 차감할 때 동시성 이슈로 인한 오차가 발생하지 않도록 만들기 - 3

Redis로 인기 검색어 구현하기

Sorted Set 자료 구조 (ZADD, ZRANGE, ZINCRBY)
[실습] 많이 검색한 키워드 Top 10을 보여주는 '인기 검색어 기능’ 만들기 - 1
[실습] 많이 검색한 키워드 Top 10을 보여주는 '인기 검색어 기능’ 만들기 - 2

Redis로 API 요청 횟수 제한 기능 구현하기 (Rate Limiting)

Sorted Set 자료 구조 (ZCARD, ZREMRANGEBYSCORE, EXPIRE)
[실습] 악의적인 요청을 방지하기 위해, 10초당 API 요청 횟수를 5회로 제한하기 - 1
[실습] 악의적인 요청을 방지하기 위해, 10초당 API 요청 횟수를 5회로 제한하기 - 2

Redis를 활용해 내 위치를 기준으로 반경 1km에 위치한 카페 찾기

Geospatial 자료 구조 (GEOADD, GEOPOS, GEODIST, GEOSEARCH)
[실습] 내 위치를 기준으로 반경 1km에 위치한 카페 찾기 - 1
[실습] 내 위치를 기준으로 반경 1km에 위치한 카페 찾기 - 2

Redis로 하루 동안 서비스에 방문한 사용자 수(DAU) 카운팅하기

Set 자료 구조 (SADD, SMEMBERS, SCARD)
Bitmap 자료 구조 (SETBIT, GETBIT, BITCOUNT)
Set과 Bitmap의 공통점 / 차이점
[실습] 하루 동안 서비스에 방문한 사용자 수(DAU) 카운팅하기 - 1
[실습] 하루 동안 서비스에 방문한 사용자 수(DAU) 카운팅하기 - 2
[실습] 하루 동안 서비스에 방문한 사용자 수(DAU) 카운팅하기 - 3

Redis를 세션 스토리지로 활용하기

Hash 자료 구조 (HSET, HGET, HGETALL)
서버가 2대 이상일 경우, Redis로 세션 스토리지를 구축해야 하는 이유
[실습] 인증 기능을 로컬 세션 스토리지로 구현했을 때 발생하는 문제점 - 1
[실습] 인증 기능을 로컬 세션 스토리지로 구현했을 때 발생하는 문제점 - 2
[실습] Redis로 세션 스토리지 구축하기
← 블로그 목록으로 돌아가기

서버가 2대 이상일 경우, Redis로 세션 스토리지를 구축해야 하는 이유

JSCODE 박재성
JSCODE 박재성
2026. 03. 01.
author
JSCODE 박재성
category
Redis
createdAt
Jan 12, 2026 12:09 AM
isPublic
isPublic
series
비전공자도 이해할 수 있는 Redis 중급/실전
slug
why-use-redis-session-store-in-multi-server-environment
type
post
updatedAt
Mar 1, 2026 11:00

✅ 세션(Session)

서비스에서 로그인 기능을 구현할 때 크게 2가지 방식으로 구현한다. JWT 방식과 세션(Session) 방식이 있다. 그 중에서 세션 방식은 다음과 같은 흐름으로 동작한다.
  1. 사용자가 ID / 비밀번호로 로그인 요청
  1. 서버는 인증이 성공하면 세션 ID를 생성한 뒤, 해당 세션 ID에 사용자 정보를 매핑하여 세션 저장소에 저장
  1. 서버는 응답으로 세션 ID를 쿠키에 담아 클라이언트에게 전달
  1. 이후 클라이언트는 요청마다 쿠키에 포함된 세션 ID를 함께 전송
  1. 서버는 세션 ID를 기준으로 세션 저장소에서 사용자 정보를 조회해서 로그인을 처리
 
 

✅ 서버가 2대 이상일 경우, 로컬 세션 스토리지의 문제점

우리가 일반적으로 사용하는 프레임워크(ex. Spring Boot, Nest.js 등)를 살펴보면 각 프레임워크에 내장된 세션 저장소(= 로컬 세션 스토리지)가 존재한다. 그래서 Spring Boot로 예를 들자면, Spring Boot 서버의 일부 메모리 공간에 세션 정보가 저장된다.
이 로컬 스토리지 세션은 서버가 한 대일 경우에는 문제가 안 된다. 하지만 서버가 여러 대 이상일 때는 문제가 발생한다. 왜냐하면 각 서버가 가지고 있는 세션 정보를 서버들끼리 공유하지 않기 때문이다. 그렇게 되면 한 명의 사용자가 로드밸런서에 의해 여러 서버에 요청을 골고루 보내게 될텐데, 어떤 요청에서는 인증이 성공하지만 어떤 요청에서는 인증이 실패하는 상황이 발생한다.
출처 : https://hstory0208.tistory.com/
출처 : https://hstory0208.tistory.com/
 
따라서 이를 해결하기 위해 세션 정보를 공유하기 위한 기존 서버와 별개인 외부 세션 스토리지가 필요하다. 외부 세션 스토리지를 사용하게 되면 세션 정보를 외부 세션 스토리지 한 곳에 저장해두면 되기 때문에, 세션 정보를 서로 공유할 수 있게 된다.
notion image
여기서 외부 세션 스토리지로 많이 활용하는 툴 중 하나가 Redis이다.
 
👨🏻‍🏫
다음 강의에서는 로컬 세션 스토리지의 문제점을 직접 눈으로 확인해보고, 문제점을 개선하기 위해 Redis를 도입하는 것까지 실습으로 진행해보자.
📎
이 글은 비전공자도 이해할 수 있는 Redis 중급/실전 강의의 수업 자료 중 일부입니다.