Redis Session 개념 및 로직 설명
페이지 정보
- 조회 22
- 작성일 2026.03.01 21:29
Redis Session의 핵심 컴포넌트 이해: Filter, Request, Manager, Session
서버를 여러 대 두는 분산 환경에서 '세션 관리'는 서비스의 안정성을 결정짓는 핵심 요소입니다.
단순히 Redis를 연결하는 것을 넘어, 내부적으로 세션이 어떻게 생성되고 관리되는지
그 메커니즘을 이해하는 것은 장애 대응과 성능 최적화에 큰 도움이 됩니다.
오늘은 Redis Session 구조의 뼈대를 이루는 4가지 핵심 컴포넌트의 역할과 상호작용 로직을 정리해 보겠습니다.
1. RedisSessionFilter: 표준 세션을 Redis로 전환하는 스위치
역할: 모든 HTTP 요청의 흐름을 제어하는 진입점
이 컴포넌트는 서블릿 필터(Servlet Filter)로서, 애플리케이션으로 들어오는 모든 요청을 가장 먼저 처리합니다.
기존의 톰캣(Tomcat) 같은 WAS가 관리하던 로컬 세션 메커니즘을 Redis 기반으로 갈아끼우는 역할을 수행합니다.
JSESSIONID 대신 Redis에서 사용할 SESSIONID를 쿠키에 넣는 작업을 하고,
해당 쿠키를 기반으로 세션을 공유합니다.
-
동작 로직:
-
HttpServletRequest를 가로채 Redis 전용 래퍼 객체로 감쌉니다. -
요청이 완료되는 시점에 세션의 최종 상태를 확인하고, 변경 사항이 있다면 이를 Redis 데이터베이스에 반영(Commit)하도록 지시합니다.
-
2. RedisSessionRequest: 세션 조회 로직의 재정의
역할: 애플리케이션과 Redis 저장소 사이의 중개자
개발자가 코드상에서 request.getSession()을 호출할 때, 실제로 동작하는 것은 바로 이 래핑된 요청 객체입니다.
-
동작 로직:
-
사용자의 요청에 포함된 세션 쿠키(Session ID)를 분석합니다.
-
로컬 메모리가 아닌 외부 저장소(Redis)에서 세션 데이터를 찾아오도록 로직이 설계되어 있어,
서버가 바뀌어도 동일한 세션을 유지할 수 있게 합니다.
-
3. RedisSessionManager: 세션 데이터의 생명주기 관리
역할: 실질적인 Redis CRUD 및 영속성 담당
Manager는 이름 그대로 세션의 생성, 저장, 조회, 삭제를 총괄하는 컨트롤러입니다. Redis와의 직접적인 통신은 대개 이 계층을 통해 이루어집니다.
-
동작 로직:
-
직렬화 및 저장: 세션 객체를 Redis에 저장 가능한 형태(바이트 배열 등)로 변환하고, 적절한 만료 시간(TTL)을 부여합니다.
-
조회 및 복원: Redis에 저장된 데이터를 가져와 다시 Java 객체 형태로 복구합니다.
-
네트워크 지연이나 Redis 연결 오류 등에 대한 예외 처리를 담당하는 핵심 지점이기도 합니다.
-
4. RedisSession: 분산 환경에 최적화된 데이터 모델
역할: 사용자 정보를 담는 저장소이자 변경 감지 모델
표준 HttpSession 인터페이스를 구현한 클래스로, 실제 사용자의 로그인 정보나 상태값이 저장되는 곳입니다.
-
동작 로직:
-
Dirty Check: 세션 내부의 속성(Attribute)이 변경되었는지 실시간으로 추적합니다.
-
데이터가 실제로 변경된 경우에만 Redis에 다시 쓰는 방식을 채택하여, 불필요한 네트워크 트래픽과 Redis의 I/O 부하를 최소화합니다.
-
실무 운영을 위한 한 마디
Redis 세션을 도입할 때 가장 흔히 겪는 문제는 '객체 직렬화' 관련 오류입니다.
세션에 담기는 모든 객체는 반드시 직렬화가 가능해야 하며, 클래스 구조가 변경될 경우 세션 복원 과정에서 에러가 발생할 수 있습니다.
따라서 세션에는 가급적 가볍고 직렬화에 안전한 데이터 위주로 담는 것이 운영 측면에서 유리합니다.
또한, 세션 만료 시간 설정 시 Redis의 TTL과 애플리케이션의 세션 타임아웃 설정이 일치하는지 반드시 확인해야 세션이 예상보다 일찍 끊기는 현상을 방지할 수 있습니다.
- 이전글자바 람다(Lambda) 기초 26.03.04
- 다음글진수 변환 함수 (62진수 까지) 26.02.25
댓글목록
등록된 댓글이 없습니다.