스프링부트에서 Redis를 통해 HttpSession을 관리하는 예제를 만들어 보겠습니다.
깃헙에 있는 정리본을 참고해주세요!
https://github.com/namusik/TIL-SampleProject/tree/main/Redis
https://github.com/namusik/TIL-SampleProject/tree/main/Redis/Redis%20get-set%20%EC%98%88%EC%A0%9C
IntelliJ
Spring-boot
java 11
gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
//redis session
implementation 'org.springframework.session:spring-session-data-redis:2.6.1'
}
마지막줄 의존성을 추가해줌.
Session Storage를 기존의 Spring의 메모리가 아닌 Redis를 이용하기위해 의존성 추가.
spring:
redis:
host: localhost
port: 6379
session:
store-type: redis
스프링의 sessiong store-type을 redis로 변경해주는 설정
@SpringBootApplication
@EnableRedisHttpSession
public class RedisApplication {
public static void main(String[] args) {
SpringApplication.run(RedisApplication.class, args);
}
}
@EnableRedisHttpSession 애너테이션 추가.
@Configuration
public class RedisConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory();
}
}
@RestController
@RequiredArgsConstructor
public class RedisController {
@GetMapping("api/session")
public String getSessionId(HttpSession session) {
session.setAttribute("name" , "treesick");
return session.getId();
}
}
HttpSession 객체를 사용해서 값을 저장해보고 Redis에 실제로 저장되었는지 확인해보면 된다.
또한, session의 ID를 return해 동일한 Session인지 확인해보자
Postman을 사용해서 api를 실행시키면
성공시 sessionID를 반환한다.
이제 Redis-Cli를 사용해서 Redis에 잘 저장되었는지 확인해보면,
3개의 값이 저장되었다.
sessionId가 동일하므로 잘 저장된 것은 맞다.
3개의 데이터 타입을 확인해보면 각각 set, string, hash로 저장이 되었다
hash 타입의 데이터의 모든 key값을 hkeys로 불러오면
Contoller에서 저장했던 key값 name이 보인다.
hget으로 value를 가져오면 저장했던 value 값 treesick을 확인할 수 있다.
혹은 hgetall을 사용하면 모든 key-value값을 볼 수 있다.
spring:session:sessions에는 세션의 생성 시간, 마지막 세션 조회 시간, 최대 타임아웃 허용 시간과 해당 세션에 저장한 데이터를 저장된다.
두번째로, set 타입의 데이터를 보기위해
smembers를 사용하면 현재의 세션을 볼 수 있는데
spring:session:expirations:만료시간에는 해당 만료시간에 되면 저장되어있는 세션을 삭제한다.
마지막으로 spring:session:sessions:expires:세션ID는 해당 세션의 만료 Key로 사용합니다.
https://oingdaddy.tistory.com/311