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

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

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

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

 

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

2021.09.22 - [개발 지식/Spring Framework] - [Redis Session] Spring Boot에서 Redis Session 활용하기 - 01 [Redis Session] Spring Boot에서 Redis Session 활용하기 - 01 회사 프로젝트 내 맡은 파트에서 개..

erjuer.tistory.com

 

이어서 Spring Boot Framework에 설정은 다 완료했고 실제 redis를 조회하기 위한 redis-cli파일을 설치해본다.

redis 공식문서를 보면

We recommend using Linux for deployment.
Redis may work in Solaris-derived systems like SmartOS, but the support is best effort.
There is no official support for Windows builds.

Linux 개발 환경에서 사용하기를 권장하고 Window는 지원하지 않기에 공식홈페이지에서 다운받기는 어려웠다.

 

https://github.com/microsoftarchive/redis/releases

 

Releases · microsoftarchive/redis

Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes - microsoftarchive/redis

github.com

구글링해보니 redis Github에 있는 Window 설치파일이 있어 해당 파일을 다운받았다.

다운받고 실행 명령어는 다음과 같다.

C:\Program Files\Redis>redis-cli.exe

하면 default 설정값인 host와 port로 연결된다.

그 config 설정은 redis.windows-service.conf 파일에서 할 수 있다.


이제 본격적으로 Spring Boot 환경에서 Session을 redis 설정 및 테스트를 진행해보자.

main 함수가 있는 JustApplication이라는 클래스에 @EnableRedisHttpSession 을 붙인다.

@EnableRedisHttpSession
@SpringBootApplication
public class JustApplication {

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

}

 

Boot 실행시 생성되는 빈값들을 확인해보면

Redis 설정 Bean값 생성
springSessionRepositoryFilter 생성
redisConnectionFactory 생성

  • Redis 설정파일 (RedisHttpSessionConfiguration)
  • springSessionRepositoryFilter (spring httpsession을 쓰는 것이 아닌 redis 설정을 통해 custom Repository 생성)
  • redisConnectionFactory (spring httpsession과 redis를 연결해주는 bean)

이 생성된다. 그렇다면 Redis설정을 하지 않았을 경우에 진짜 Bean값이 생성이 되지 않는 것일까?

한번 redis설정 및 @EnableRedisHttpSession을 제거해보자.


@EnableRedisHttpSession 이나 application.yml에 redis 설정을 하지 않았을 때는
redisConnectionFactory와 springSessionRepositoryFilter가 생성되지 않는다.

 

생성된 Bean에서 redisConnectionFactory 없음

 

생성된 Bean에서 springSessionRepositoryFilter 없음

 

간단하게 HttpSession을 주입받아 session값을 생성하고 조회하는 코드를 짜보면

@RestController
public class JustController {


    @Autowired
    HttpSession httpSession;

    @GetMapping(path = "/setsession")
    public String setsessionAPI(){

        Random random = new Random();
        int num = random.nextInt();
        httpSession.setAttribute("KEY",num);
        String returnValue = LocalDateTime.now().toString() +
                " \nsession set id : "+ httpSession.getId() +
                " \nsession set Value : " + num;


       return returnValue;
    }

    @GetMapping(path = "/getsession")
    public String getsessionAPI(){

        Random random = new Random();
        int num = (int) httpSession.getAttribute("KEY");
        String returnValue = LocalDateTime.now().toString() +
                " \nsession get id :  "+ httpSession.getId() +
                " \nsession get value  " + num;


        return returnValue;


    }
}

 

setsession 예시

 

getSession 예시

 

 

당연히

redis에서 조회결과가 (empty list or set)가 나오게 되며 다음 4번째 글에서는 redis 설정을 다시 진행해보고 

setsession / getsession 그리고 redis-cli.exe. 를 통해 Spring Boot에서 redis에 세션값을 저장하는지 확인해보자.

 

반응형

댓글