파란하늘의 지식창고
article thumbnail
Published 2023. 2. 3. 20:31
Spring Session 사용해 보기 Study/Java
반응형

소개

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 정보는 공유할 수 있게 된다.

반응형
profile

파란하늘의 지식창고

@Bluesky_

도움이 되었다면 광고를 클릭해주세요