▼ Backend/스프링 (Spring)

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

Valar 2023. 2. 3. 16:31
반응형

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

Spring Boot | 로그인 구현하기 (Spring Security)

 

들어가기에 앞서..

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

 

📌 Redis 설치 방법

윈도우 10 | 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"

 

@EnableSpringHttpSession

 

❗ 마무리

이제는 해당 프로젝트의 jar를 포트별(java -Dserver.port=포트 -jar demo.jar) 로 각각 실행하고 다른 포트로 로그인을 시도해도 Redis에 등록된 세션 정보를 공통으로 바라봄으로써 세션이 유지되는걸 확인 할 수 있다.

추가 적으로 앞 단에 Nginx의 로드밸런싱 설정을 통해 부하 분산 또한 간단하게 적용이 가능하다.

 

 

 

반응형