2021.09.22 - [개발 지식/Spring Framework] - [Redis Session] Spring Boot에서 Redis Session 활용하기 - 01
이어서 우선 Spring session으로 redis를 활용하기 위해서 프로젝트의 pom.xml 또는 build.gradle에 의존성을 추가한다.
// pom.xml
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
// build.gradle
implementation 'org.springframework.session:spring-session-core'
implementation 'org.springframework.session:spring-session-data-redis'
의존성을 추가한 다음 Spring Boot application.yml에 session 관련된 설정을 진행한다.
// application.yml
spring:
session:
store-type : redis # Session store type.
※ application.yml에 spring.session.store-type : redis으로 명시하는 것도 있지만 @EnableRedisHttpSession annotation을 붙일 수도 있다. 즉 Spring Boot 내 동일하게 설정이 된다.
이 설정은 Filter를 구현한 springSessionRespositoryFilter이라는 Bean을 생성한다.
이 필터는 Spring Session에 의해 생성되는 HttpSession의 구현체를 대신하는 역할을 한다.
추가로
spring:
session:
redis:
flush-mode: on_save // 1)
namespace: spring:session // 2)
server:
servlet:
session: timeout: 30 // 3)
1) flush_mode
flush_mode는 on_save와 immediate 두가지 모드가 있다.
- on_save : 호출 될 때만 Redis에 기록된다. 즉 SessionRespository.save가 호출 될 때 Session Store에 저장된다. Web 환경에서는 HTTP reponse 할 때 기록된다.
- -> Only writes to session store when SessionRepository.save(Session) is invoked. In a web environment this is typically done as soon as the HTTP response is committed
- immeidate : 즉시 Redis에 기록된다. 가능한 빨리 Session Store에 저장된다. HTTP Reponse 전 createSession이나 setAttribute가 사용될 때 기록된다.
- -> Writes to session store as soon as possible. For example SessionRepository.createSession() will write the session to session store. Another example is that setting an attribute using Session.setAttribute(String, Object) will also write to session store immediately.
2) namespace
redis Key값 앞에 붙여지는 prefix. default값은 sprint:session이다.
3) timeout :
server 내 session timeout를 설정한다. default는 초 단위이며 뒤에 suffix 단위를 붙여 따로 단위를 설정할 수 있다.
일단 Spring Boot Framework 내 설정은 모두 했고 Redis 설정을 진행한다.
spring:
redis:
host: localhost // redis server host port: 6379 // redis server port password : // redis server Login password
host와 port 그리고 password 설정을 진행하면 Sprint Boot는 자동으로 Spring Session을 Redis Sever로 연결해주는RedisConnectionFactory를 생성한다.
설정을 끝내고 Sprint Boot Build를 하게 되면 위에서 언급한 Filter를 구현한 sspringSessionRepositoryFilter이라는 이름을 가진 Bean이 생성된다.
springSessionRepositoryFilter Bean은 Spring Session에서 지원하는 Custom 구현체인 HttpSesssion(https://docs.spring.io/spring-session/docs/current/reference/html5/guides/java-jdbc.html)을 대체한다.
우리가 정의한 Filter를 사용하기 위해서는 Spring은 우리의 Config class를 load 해야한다. 그리고 서블릿 컨테이너(Tomcat)가 모든 요청에 대해 springSessionRepositoryFilter를 사용하도록 해야한다.
다행히 Spring Boot는 이러한 설정들을 모두 해준다.
이 다음 포스팅에서는 설정 후 Spring Boot에 요청했을 때 Session값이 생성되고 redis에도 저장되는 것을 확인해보자.
(+ redis cli 설치까지)
출처: https://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot-redis.html
'개발 지식 > Spring Framework' 카테고리의 다른 글
[thymeleaf] 기본 기능 정리 - 01 (0) | 2021.12.16 |
---|---|
[JWT] Spring Boot 환경에서 JWT(Json Web Token)생성 하기 (0) | 2021.10.26 |
[Redis Session] Spring Boot에서 Redis Session 활용하기 - 04 (0) | 2021.09.26 |
[Redis Session] Spring Boot에서 Redis Session 활용하기 - 03 (0) | 2021.09.24 |
[Redis Session] Spring Boot에서 Redis Session 활용하기 - 01 (0) | 2021.09.22 |
댓글