스프링부트 Redis 연습 3 - Session Storage

TreeSick·2022년 2월 24일
0

레디스

목록 보기
3/3

스프링부트에서 Redis를 통해 HttpSession을 관리하는 예제를 만들어 보겠습니다.

Redis 기본 이론

깃헙에 있는 정리본을 참고해주세요!

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

dependency

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를 이용하기위해 의존성 추가.

application.yml

spring:
  redis:
    host: localhost
    port: 6379
  session:
    store-type: redis

스프링의 sessiong store-type을 redis로 변경해주는 설정

Application 파일

@SpringBootApplication
@EnableRedisHttpSession
public class RedisApplication {

    public static void main(String[] args) {
        SpringApplication.run(RedisApplication.class, args);
    }

}

@EnableRedisHttpSession 애너테이션 추가.

RedisConfig

@Configuration
public class RedisConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory();
    }

}

RedisController

@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

https://velog.io/@albaneo0724/Spring-Redis%EB%A5%BC-session-storage%EB%A1%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

https://deveric.tistory.com/76

https://velog.io/@sileeee/Redis%EB%82%B4%EB%B6%80%EC%97%90-session-%EC%A0%80%EC%9E%A5%EC%82%AD%EC%A0%9C

profile
깃헙에 올린 예제 코드의 설명을 적어놓는 블로그

0개의 댓글