소개
https://docs.spring.io/spring-session/reference/index.html
Spring Security를 사용하여 로그인을 하면 기본 설정이 세션 정보를 해당 application의 ConcurrentMap에 들고 있게 된다.
단일 서버가 아닌 여러 대의 서버로 운영하고 있다면 세션 정보를 여러 서버가 같이 공유할 수 있어야 한다.
Spring Session은 사용자의 session 정보를 공유하기 위한 API 및 구현체를 제공한다.
Spring Session은 Redis, JDBC, Hazelcast, MongoDB에 대한 모듈을 제공한다.
(Apache Geode는 문서에 따로 나와 있는데 왜 에 대한 지원은 3.0.0에 보이지 않았다.)
이 글을 작성하는 당시(2023-02-03) 스프링 Spring Session 문서는 2.7.0 버전을 현재 문서로 제공하고 있고 3.0.0 문서가 아직 변경되지 않은 것 같다.
제공하는 가이드는 다음 문서를 참고하면 된다.
다른 구현체를 사용하고 싶거나 혹은 Spring Boot 없이 사용하거나 XML 기반 설정에 대한 예제도 제공하고 있다.
https://docs.spring.io/spring-session/reference/samples.html
Spring Session이 제공하는 위 구현체들 외에도 직접 설정하여 사용할 수도 있을 것 같은데 일단 개별 구현을 하지 않고 Redis를 사용해 보았다.
https://docs.spring.io/spring-session/reference/guides/boot-redis.html
설정하기
spring session redis 설정과 redis를 사용하기 위한 spring data redis 설정을 하면 된다.
Spring Session Redis 설정
우선 Spring Session Redis의 dependency 설정은 다음과 같다.
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
현재 문서의 경우 spring.session.store-type을 지정하는 부분이 있는데 이 부분은 3.0.0에서 제거된 설정인 듯하다.
해당 설정은 하지 않아도 된다.
Spring Datat Redis 설정
Spring Data Redis의 경우 spring-session-data-redis dependency를 추가하면 spring-data-redis는 같이 설정되기 때문에 명시적으로 설정할 필요는 없다.
spring-data-redis 3.0.0 이후엔 Lettuce가 기본 참조 되지 않기 때문에 아래와 같이 추가해 준다.
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</dependency>
connection 정보를 상황에 맞게 properties에 추가한다.
spring.redis.host=localhost # Redis server host.
spring.redis.password= # Login password of the redis server.
spring.redis.port=6379 # Redis server port.
이렇게 진행하면 별다른 설정을 하지 않아도 redis로 세션 처리가 구현이 된다.
서버를 띄우고 로그인을 해보면 세션 정보가 redis에 저장되는 것을 확인할 수 있다.
이제 kubernetes pod가 hpa 설정으로 scaleout을 하더라도 session 정보는 공유할 수 있게 된다.
'Study > Java' 카테고리의 다른 글
ObjectMapper readValue generic type 사용하기 (0) | 2023.04.23 |
---|---|
springdoc-openapi swagger @ExampleObject annotation 사용해 보기 (0) | 2023.04.13 |
Spring Data의 Pageable parameter로 사용하기 (0) | 2023.03.01 |
Spring Boot 프로젝트 logback accesslog 설정하기 (Tomcat Servlet 기준) (0) | 2023.02.17 |
maven multi module project에서 jib build 사용하기 (0) | 2023.02.15 |
Spring Boot Thymeleaf 사용해 보기 (0) | 2023.02.01 |
Spring Boot Admin 사용해 보기 (0) | 2023.01.30 |
Spring Boot Actuator 사용해 보기 (0) | 2023.01.29 |
Spring Security, Spring Security OAuth2 Client를 MSA로 구성해 보기 (0) | 2023.01.28 |
Spring Cloud OpenFeign 사용해 보기 (1) | 2023.01.27 |