티스토리 뷰
이 글을 통해서 Redis 설치부터 Springboot 연동까지 진행을 했었다. 이번에는 이전 포스팅에 이어서 Springboot + Redis 를 통해 Session Clustering을 하는 방법에 대해 알아보겠다. 예제는 지난번에 만든 샘플 프로젝트를 이어서 진행을 하도록 하겠다.
1. Springboot Redis Session 관련 설정
Springboot에서는 아주 간단하게 Redis에서 Session을 관리할 수 있도록 해준다.
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
기존에 springboot 와 Redis 를 연동하기 위해 위의 두개의 dependency를 추가했다면 session 관련된 기능을 사용하기 위해서는 맨 아래의 spring-session-data-redis dependency를 추가해준다.
application.properties (.yml)
spring.redis.host=localhost
spring.redis.port=6379
기존의 Redis를 사용하기 위한 설정과 차이는 없다. Redis를 로컬에 설치를 했으므로 host를 localhost로 지정해준다.
Application.java (springboot main)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
@EnableRedisHttpSession
@SpringBootApplication
public class RedisSampleProjectApplication {
public static void main(String[] args) {
SpringApplication.run(RedisSampleProjectApplication.class, args);
}
}
main 클래스에서는 @EnableRedisHttpSession 을 추가해준다.
이렇게 하면 놀랍게도 모든 설정은 끝이 났다. 내가 뭘 빠뜨렸나 할 정도로 너무 간단했다..
2. Session 생성하고 테스트해보기
이제 정말 dependency 하나 추가하고 main에 어노테이션 하나 박았는데 session clustering이 잘 되는지 테스트 해봐야 한다.
session 생성
import javax.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RedisSampleController {
@GetMapping("/getSessionId")
public String getSessionId(HttpSession session) {
return session.getId();
}
}
테스트를 위한 Controller를 만들었다. HttpSession을 param으로 받아오고 이 session의 id가 Redis에 의해 공유가 되는지 확인을 해보려고 한다.
project 복제
Controller를 이렇게 만들고 project 자체를 여러개로 복사해본다.
그리고 port는 모두 달리 해서 각각 기동을 해보도록 하자. 그리고 session의 id를 확인해보도록 하자.
보다시피 모든 session id가 동일한것을 확인할 수 있다. 각기 다른 서버임에도 불구하고 하나의 Redis 서버에 연결되고 그에 따른 설정을 해놨다는것만으로도 이렇게 간단하게 세션이 공유가 되었다.
Redis CLI 에서 확인해보기
그럼 이 세션의 실체가 과연 redis에 잘 들어가 있는지 확인을 해보자.
Redis CLI 에서 들어가 있는 key 들을 조회하는 명령어는 keys이다. keys 를 통해 모든 key 목록을 조회해보면 방금 생성한 spring:session:sessions을 확인할 수 있다.
hashmap 형태로 들어가 있는 session 관련된 정보들은 hget 이라는 명령어를 통해서 가지고 올 수 있다. hgetall 이라는 명령어를 실행해 보면 방금 생성한 세션에 대한 정보들이 들어가있다. springboot application에서 생성한 세션이 Redis에 정상적으로 잘 들어갔고 잘 공유가 되고 있는것을 확인했다.
springboot app의 세션을 Redis를 통해 공유하는 예제였다. 정말 간단하다. 편리하다.
끝!
'Framework > Spring' 카테고리의 다른 글
Springboot @RestControllerAdvice 사용해 Exception 처리하기 (0) | 2021.04.27 |
---|---|
Springboot + Redis 연동하는 예제 (3) - Cluster 설정하기 (0) | 2021.04.21 |
Springboot + Redis 연동하는 예제 (1) 기본 (1) | 2021.04.16 |
Springboot + Kafka 연동하여 pub/sub 구현 예제 (2) | 2021.04.16 |
Springboot Kafka 설정 application.properties 목록 (0) | 2021.04.15 |