본문 바로가기

DB/Redis (레디스)

Springboot 백엔드 세션을 Redis 서버에 저장하기 with gradle

728x90
반응형

# Springboot로 구성된 웹 애플리케이션의 세션을 Redis에 저장하기

세션 클러스터링을 위해서 세션 스토리지를 따로 구성하는 경우가 많다.

대표적인 서비스로 레디스가 존재한다.

# Redis의 특징

Mysql, PostgreSQL, Oracle 등 대부분의 데이터 베이스는 디스크 또는 SSD에 저장하지만 Redis는 서버의 주 메모리에 저장된다. 메모리에 저장되므로 더 빠른 응답속도를 유지할 수 있다.

1. Redis를 docker로 실행하기

- 우분투에서 아래의 명령어로 redis를 docker로 실행한다.

docker pull redis

- redis의 기본포트인 6379번 포트를 활용해 서비스를 실행 시킨다.

sudo docker run -p 6379:6379 redis

- redis docker 컨테이너 내부로 진입한다.

docker exec -it {Container_name} /bin/bash

- 아래의 명령어를 통해 비밀번호를 설정한다.

127.0.0.1:6379> config set requirepass test1234
OK
127.0.0.1:6379> auth test1234
OK
127.0.0.1:6379>

2. 스프링 부트에서 설정 진행

스프링 부트에서 아래와 같이 디펜던시를 추가한다.

implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.session:spring-session-data-redis'

application.yml 파일에 레디스 정보를 추가한다.

spring:
  redis:
    host: localhost
    port: 6379
    password: test1234

redis-cli에서 세션에 담긴 정보들을 보기 위해 아래와 같이 직렬화 빈을 생성한다.

@Configuration
@EnableRedisHttpSession
public class RedisConfig {

    @Bean
    public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
        return new GenericJackson2JsonRedisSerializer();
    }
}

3. 컨트롤러를 생성하고 값을 넣어보자.

@RestController
public class RedisController {

    @PostMapping("/session")
    public String sessionTest(HttpSession httpSession) {
        String id = "test321";
        httpSession.setAttribute("sessionID", id);
        return "session TEST";
    }
}

- 테스트 진행

post맨을 활용하여 해당 url을 호출해보자.

- 호출 url : http://localhost:8088/session

- 결과

- RedisCLI에서 확인하면 아래와 같다.

- 추가로 어떤 값들이 저장되고 확인할 수 있는지 Postman에서 확인해보면 아래와 같다.

추가코드는 위에서 작성한 Controller에 입력해주면 된다.

    @GetMapping("/setsession")
    public String setsessionAPI() {
        String value = "seungkim";
        httpSession.setAttribute("KEY", value);
        String returnValue = LocalDateTime.now().toString() +
                " \nsession set id : " + httpSession.getId() + " \nsession set Value : " + value;
        return returnValue;
    }

    @GetMapping("/getsession")
    public String getsessionAPI() {
        Random random = new Random();
        String value = (String) httpSession.getAttribute("KEY");
        String returnValue = LocalDateTime.now().toString() +
                " \nsession get id : " + httpSession.getId() + " \nsession get value " + value;
        return returnValue;
    }

- Postman에서 값을 확인하면 아래와 같다.

/setsession 의 결과는 아래와 같다.

/getsession 의 결과는 아래와 같다.

 

- 끝 -

728x90
반응형