@EnableRedisHttpSession
이란?
- 스프링 세션 프로젝트에서 제공하는 애노테이션이다.
- 스프링 애플리케이션이 Redis 가 지원하는 분산 세션 (distributed sessions backed by Redis) 을 사용할 수 있게 해준다.
- 애플리케이션 메모리 대신 Redis 메모리를 사용하게 되므로 애플리케이션의 수평적 확장에 유용하고 모든 인스턴스에서 세션 데이터가 일관되게 유지된다.
작동 방식
- 환경과 애노테이션이 올바르게 프로젝트에 적용되었을 때 어떻게 동작하는지 알아보자.
@EnableRedisHttpSession
애노테이션 인식
- 스프링은
@EnableRedisHttpSession
애노테이션을 인식한 뒤 레디스와 커넥션을 맺으며 세션을 관리할RedisConnectionFactory
와RedisTemplate
을 인식하고 Redis 저장소 커넥션을 처리할 준비를 한다.
RedisIndexedSessionRepository
빈 생성
- 스프링 세션을 관리하는 빈인
RedisIndexedSessionRepository
가 생성된다.SessionRepository
를 구현한RedisIndexedSessionRepository
가 빈으로 생성된다.- 이 리포지토리가 세션 데이터에 대한 CRUD 책임을 이어받는다.
SessionRepositoryFilter
등록
SessionRepositoryFilter
가 애플리케이션에 등록된다.SessionRepositoryFilter
는HttpSession
구현을 Redis-backed 세션 구현으로 대체한다.- 요청을 가로채고 Redis 로부터 세션 데이터를 받아와 현재 요청과 연결한다.
직렬화와 역직렬화 (Serialization and Deserialization)
- 스프링은 자바의 데이터를 기본적으로 JDK serialization 매커니즘을 통해 직렬화하여 레디스에 저장한다.
- 데이터를 다시 가져올 때는 JDK deserialization 매커니즘을 통해 역직렬화하여 레디스에서 자바로 가져온다.
- 원한다면 다른 직렬화/역직렬화 매커니즘을 통해 데이터를 주고받을 수 있다.
세션 만료
- 기본적으로 30분간 세션 데이터가 쓰이지 않으면 만료된다.
@EnableRedisHttpSession
애노테이션의maxInactiveIntervalInSeconds
엘리먼트를 통해서 사용자 정의 만료 시간을 설정할 수도 있다.
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600) // 1 hour
public class SessionConfig {
}
스프링 레디스 세션 적용법과 사용법
반응형
'프레임워크 > 스프링 프레임워크' 카테고리의 다른 글
스프링 레디스 세션 사용법 (0) | 2023.04.19 |
---|---|
스프링 레디스 세션 적용법 (0) | 2023.04.19 |
RedirectAttributes 란? (feat. addFlashAttribute 에 대한 설명 포함) (0) | 2023.04.17 |
스프링 프레임워크 버전 4.2에서 4.3 업그레이드시 변화사항 (0) | 2023.03.23 |
DispatchServlet.doDispatch() 함수 끝까지 따라가서 HandlerMapping 과 HandlerAdapter 알아보기 (0) | 2023.01.30 |