본문 바로가기
Web Development/웹

로드밸런싱 할때, 로그인처리 문제

by doriver 2024. 6. 27.

문제상황

내부 톰캣을 사용하고 HttpSession으로 인증처리를 하는 springboot프로젝트 
똑같은거 3개 A,B,C가 있다

 

이 3개의 WAS를 로드밸런싱으로 이용할때
사용자 a가 로그인을 A를 통해서 한 상태에서

, a가 보낸 요청이 B나 C에게도 도착할 수 있다.

해결방안

세션 스티키니스 (Session Stickiness)

 

사용자가 최초로 연결된 서버에 세션이 유지되도록 하는 로드 밸런서의 기능
이를 통해 사용자가 로그인한 서버에 이후의 모든 요청이 전달되도록 합니다.

쿠키 기반 스티키니스

로드 밸런서가 사용자에게 특정 쿠키를 발급하고
, 이후 요청에서 해당 쿠키를 참조하여 같은 서버로 라우팅합니다.

IP 해시 기반 스티키니스

사용자의 IP 주소를 해싱하여 항상 동일한 서버로 요청을 보냄

 

세션 클러스터링

모든 WAS 서버 간에 세션을 공유하는 방법

데이터베이스를 사용한 세션 공유
모든 WAS가 공통된 데이터베이스에 세션을 저장하고, 이를 통해 세션을 공유합니다.

인메모리 데이터 그리드 사용
Redis, Hazelcast와 같은 인메모리 데이터 그리드를 사용하여 세션을 공유합니다.

스프링 세션 (Spring Session)

모든 WAS가 동일한 세션 데이터를 공유

Spring Session을 사용하면 Redis, JDBC, MongoDB 등을 사용하여 세션을 공유

의존성

spring-session-data-redis
spring-boot-starter-data-redis
설정
spring.session.store-type= redis

@Configuration
@EnableRedisHttpSession
@Bean : RedisConnectionFactory 

>> 이러한 설정을 통해 세션이 Redis에 저장되고, 모든 WAS가 동일한 세션 데이터를 공유

 

'Web Development > ' 카테고리의 다른 글

8.22  (1) 2024.08.22
응답코드 01  (0) 2024.07.17
좋아요 기능(SpringBoot) MySQL > Redis로 컨버터했음  (0) 2024.06.26
요청, 요청처리, 응답  (0) 2024.06.05
웹 API( SpringBoot + Tomcat )  (0) 2024.05.19