본문 바로가기
개발/SpringBoot

SpringBoot Redis 세션 사용

by 궁즉변 변즉통 통즉구 2022. 9. 6.
반응형

SpringBootd에서 간단한 설정만으로 메모리 기반의 세션관리에서 Redis 기반의 세션관리로 적용이 가능하다. 세션 Storage로 Redis를 사용하면 토큰을 사용하지 않는 환경에서도 세션 공유에 대한 부담없이 유연하게 어플리케이션의 Scale-Out이 가능하다. 

 

Redis 구성

Redis를 자체를 테스트하는 것이 아님으로 간단하게 Docker로 구성한다. 아래 명령으로 Redis 컨테이너를 실행한다.

docker run --name redis -p 6379:6379 -d redis

테스트용 Redis 준비는 이걸로 끝이다.

 

SpringBoot 설정

의존성 추가

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

spring-boot-starter-data-redis로 SpringBoot에서 Redis를 사용하겠다는 설정을하고, spring-session-data-redis로 세션 Storage로 Redis를 사용하겠다는 설정을 추가한다.

 

application.yml 설정

spring:
  redis:
    host: localhost
    port: 6379
    # password: # todo

application.yml에 간단히 redis접속 정보를 localhost, 6379로 설정한다. 

 

@EnableRedisHttpSession 추가

@SpringBootApplication
@EnableRedisHttpSession
public class SpringbootDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoApplication.class, args);
    }
}

Application Main클래스나 별도 JavaConfig클래스 상단에 @EnableRedisHttpSession 어노테이션을 추가해준다. 여기서는 별도 설정파일은 없어 Main클래스에 추가해줬다.

 

테스트

테스트 Controller 작성

@RestController
@RequestMapping("/redis")
public class RedisSessionController {
    @GetMapping("/test")
    public ResponseEntity<String> test(HttpSession session){
        session.setAttribute("name", "HongGilDong");
        return ResponseEntity.ok(session.getId());
    }
}

테스트용 컨트롤러를 위와 같이 작성하고 어플리케이션을 실행하고 아래와 같이 호출해본다

Redis 확인

테스트 호출이 정상적으로 되었으면 이제 Redis에 접속해서 확인을 해본다. 실행중인 Redis 컨테이너에 아래 명령으로 접속한다.

docker exec -it redis bash

 

그리고 redis-cli 명령어를 통해 redis에 접속한 후 keys * 명령으로 세션을 조회해본다. 브라우저에서 확인한 세션ID와 동일한 세션 정보를 확인할 수 있다.

Redis 세션 정보 

1. spring:session:sessions:세션ID = 세션생성시간, 최근조회시간, 최대 타임아웃 허용시간, 세션의 저장된 데이터 저장

hgetall로 조회

2. spring:session:sessions:expires:세션ID = 해당 세션의 만료키로 사용

3. spring:session:expirations:시간 = 해당 시간이 되면 세션 삭제

 

반응형

댓글