본문 바로가기
개발 지식/Spring Framework

[Redis Session] Spring Boot에서 Redis Session 활용하기 - 02

by 에르주 2021. 9. 23.
반응형

2021.09.22 - [개발 지식/Spring Framework] - [Redis Session] Spring Boot에서 Redis Session 활용하기 - 01

 

[Redis Session] Spring Boot에서 Redis Session 활용하기 - 01

회사 프로젝트 내 맡은 파트에서 개발을 진행하던 중 로그인 사용자(고객센터 또는 대리점 혹은 대리점 직원)의 정보를 바탕으로 권한을 체크하는 로직이 필요하게 되었다. 전체적인 아키텍쳐

erjuer.tistory.com

 

이어서 우선 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 Session - Spring Boot

After adding the required dependencies, we can create our Spring Boot configuration. Thanks to first-class auto configuration support, setting up Spring Session backed by Redis is as simple as adding a single configuration property to your application.prop

docs.spring.io

 

반응형

댓글