2024.05.13 - [Spring/대용량 트래픽] - Spring cache abstraction, Vegeta 오픈소스 사용해보기
이전글에서는 Redis를 Cache로써 활용해, 트래픽이 클 경우 대폭 성능향상과, Vegeta 오픈소스를 이용해서 트래픽이 많은 상황에서의 실험까지 해봤다. 이번글은 캐시가아닌 세션으로써의 활용을 살펴본다.
Spring FrameWork에서는 HTTP 세션정보를 저장하고, 관련기능을 제공하는 Spring Session이있다.
Session
클라이언트 <-> 서버 간의 상호작용을 하기위한 유지되는 상태 데이터이다.(이전요청에서 생성된 데이터 활용가능)
Session은 포괄적인 의미로 다양하게 분류하고 식별할 수 있다.
- HTTP Session
- TCP Session
- Socket Session
등이있다.
Spring Session
웹 어플리케이션에서 세션관리를 위한 인터페이스와, 세션 저장소를 제공
- HTTP Session
- WebSocket
- WebSession(Spring WebFlux)
스프링에서 사용하기 위해서는 gradle.build 파일에 의존성을 추가해줘야한다.
implementation 'org.springframework.session:spring-session-core'
이렇게 선언해주면 되긴 한다만, 나는 레디스에 세션정보를 저장하고 활용할 것이기 때문에 위 의존성을 추가하고 있는 spring-session-data-redis를 의존성 추가한다.
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.session:spring-session-data-redis'
** Redis 뿐만아니라 JDBC, Hazelcast, Mongodb와도 연동이 가능하다.
.yml 파일설정
spring:
session:
store-type: redis
data:
redis:
host: 127.0.0.1
port: 6379
Session store를 Redis로 사용하겠다는 것과, Redis 접속정보를 설정해줘야한다.
그리고 Redis의 변화를 살펴보기 위해 redis-cli monitor로 모니터링 해준다.
public Map<String, String> home(HttpSession session){
Integer visitCount = (Integer) session.getAttribute("visits");
if(visitCount == null){
visitCount = 0;
}
session.setAttribute("visits", ++visitCount);
return Map.of("session id", session.getId(), "visits", visitCount.toString());
}
이렇게 HttpSession을 인자로 받게끔 컨트롤러를 작성해준뒤, 내 로컬 PC 주소로 들어가보면
JSON 형식으로, 방문횟수와 session id를 응답하는 걸 확인할수있다. 재방문하면 "visits"은 계속 증가한다.
그렇다면 로컬말고, 여러개의 서버에서 해당 Redis의 세션정보를 저장하는 흐름을 살펴보자.
먼저 터미널에 명령어를 입력해서 jar파일을 하나 만든다.
./gradlew build
명령어를 입력하고 8080포트로 WAS를 실행시킨다.
java -jar build/libs-0.0.1-SNAPSHOT.jar
그리고 이미 8080포트는 작동하고 있기때문에 임의로 8090포트를 써서 WAS를 실행시켰다.
터미널에서 다음과 같이 입력하면 된다.
./gradlew bootRun --args='--serverport=포트번호'
나는 18080포트로 했다.
https://shanepark.tistory.com/433
여러 포트로 실행하는걸 잘 정리해놓은 블로그가 있어서 첨부한다. 도움이 많이되었다!
Redis에 들어있는 세션정보를 서로 다른서버에서 공유하며 Consistency하게 "visits"값이 증가하는 걸 볼수있다.
켜놨던 redis-cli에서 monitor를 관찰해보자
- HGETALL : 세션정보를 확인한다.
- HMSET : 설정한 값들 저장/갱신
- PEXPIREAT : TTL값 갱신
Redis-cli로 직접 Key가 어떻게 저장되어있는지 확인해보면 아까 localhost:8080으로 접속했던 session id와 동일하다.
당연하지만 Value의 타입은 hash로 되어있다.
저장된 값들도 확인할 수 있다.
확인할수 있는 정보
- 방문횟수
- 관리되는 멤버들
- 생성시간
- 마지막 접속시간
이렇게 세션으로 활용되는 Spring Data Redis에 대해 알아봤다.
다음은 Spring에서의 Pub/Sub에 대한 활용을 알아보자!
2024.05.14 - [Spring/대용량 트래픽] - Spring Boot Pub/Sub
'Spring > 대용량 트래픽' 카테고리의 다른 글
Prometheus, Grafana 오픈소스로 Redis 모니터링하기 (0) | 2024.05.21 |
---|---|
Spring Boot Pub/Sub (0) | 2024.05.14 |
Spring cache abstraction, Vegeta 오픈소스 사용해보기 (0) | 2024.05.13 |
Spring Boot Cache (0) | 2024.05.08 |
Redis Cache로 실습하기 (0) | 2024.05.08 |