Spring Boot

[Spring Boot] Redis로 세션 클러스터링 적용하기

hnev 2023. 1. 24. 14:29

프로젝트에 세션 로그인 처리가 되어있는 가정하에 진행되었습니다.

[Spring Boot] 로그인 처리 with Spring Security

 

들어가기에 앞서..

다양한 방식의 세션 클러스터링 방법이 있지만 해당 프로젝트는 jar로 패키징되는 내장형 톰캣 실행으로 별도의 WAS 없이 실행하고, 또 스프링 부트에서는 간단한 방법으로 Redis를 통해 세션 정보를 등록하는 방법을 사용할 수 있습니다.

 

📌 Redis 설치 방법

[윈도우] Redis 설치 및 기본 명령어

[도커] Redis 생성 및 redis-cli 접속하기

 

 

build.gradle
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
    session:
      store-type: redis

 

@EnableRedisHttpSession

 

SpringBootApplication에 해당 어노테이션을 추가합니다.

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

 

redis-cli
keys *

 

기존의 로그인을 통해 세션 정보가 Redis에 정상적으로 등록되는지 확인합니다.

127.0.0.1:6379> keys *
1) "spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME:tester"
2) "spring:session:sessions:expires:cebc32c2-bc3c-4b7b-8361-7724566a0f2a"
3) "spring:session:sessions:cebc32c2-bc3c-4b7b-8361-7724566a0f2a"
4) "spring:session:expirations:1674537120000"

 

❗ 마무리

이제는 해당 프로젝트의 jar를 포트별(java -Dserver.port=포트 -jar demo.jar) 로 각각 실행하고 다른 포트로 로그인을 시도해도 Redis에 등록된 세션 정보를 공통으로 바라봄으로써 세션이 유지되는걸 확인 할 수 있다. 여기서 그 앞 단에 Nginx의 로드밸런싱 설정을 통해 부하 분산 또한 간단하게 적용이 가능하다.