다중 서버 환경에서 세션을 각 서버의 메모리에 저장하면, 로그인한 서버와 이후 요청을 처리하는 서버가 달라질 때 세션을 찾지 못해 인증이 풀리는 문제가 발생합니다.
해결 방법으로는 동일한 사용자를 같은 서버로 보내는 Sticky Session, 서버 간 세션을 복제하는 세션 클러스터링, Redis 같은 외부 저장소에 세션을 중앙화하는 방식이 있습니다.
Sticky Session은 간단하지만 서버 장애와 부하 불균형에 취약하고, 세션 복제는 서버 수가 증가할수록 비용이 커집니다. Redis 방식은 수평 확장에 유리하지만 별도 인프라와 고가용성 구성이 필요합니다. 따라서 일반적인 분산 환경에서는 Spring Session과 Redis를 이용해 세션을 외부화하는 방식을 많이 사용합니다.
Sticky Session을 사용하면 서버 장애 시 어떤 문제가 발생하나요?
세션이 특정 서버 메모리에만 있다면 해당 서버가 중단될 때 세션도 함께 사라져 사용자가 다시 로그인해야 할 수 있습니다. 또한 특정 사용자 요청이 한 서버에 몰려 부하가 불균형해지고, 배포나 오토스케일링 시에도 세션을 고려해야 합니다.
Redis에 세션을 저장하면 단일 장애점이 생기지 않나요?
Redis 한 대만 사용하면 장애 시 전체 사용자의 인증에 영향을 주는 단일 장애점이 됩니다. 복제와 자동 장애 조치, 클러스터 구성, 적절한 세션 만료 시간과 모니터링을 적용하여 가용성을 확보해야 합니다.
Spring Session은 다중 서버 세션 문제를 어떻게 해결하나요?
애플리케이션 서버가 직접 관리하던
HttpSession을 Redis 같은 외부 저장소 기반 구현으로 대체합니다. 각 서버가 동일한 세션 저장소를 조회하므로 로드 밸런서가 요청을 어느 서버로 보내더라도 같은 세션을 사용할 수 있습니다.