다중 서버 환경에서 세션 불일치 문제와 해결방법
⚠️ 문제점
1. 세션 불일치(Session Inconsistency)
- 세션 정보는 일반적으로 서버의 메모리에 저장된다.
- 클라이언트의 요청이 로드 밸런싱을 통해 다른 서버로 전달되면, 해당 서버에는 세션 정보가 없을 수 있다.
- 이로 인해 사용자가 로그인했음에도 불구하고 다시 로그인해야 하는 상황 발생.
2. 서버 확장성 저하
- 각 서버가 독립적으로 세션을 관리하면, 서버 수가 늘어날수록 세션 동기화가 복잡해짐.
- 세션 복제를 위한 네트워크 비용과 메모리 사용량이 증가.
3. 장애 복원력 부족
- 특정 서버에 세션이 저장되어 있고 해당 서버가 장애가 나면, 세션 정보가 유실됨
- 사용자는 다시 로그인해야 하는 불편을 겪게 됨.
☑️ 해결방법
1. 스티키 세션(Sticky Session)
- 사용자 요청이 항상 사용자 세션 정보가 저장된 서버로 가도록 고정하는 방식 (쿠키, IP 등)
- 로드 밸런서가 특정 클라이언트의 요청을 항상 같은 서버로 전달
- 세션 일관성을 보장할 수 있다
- 단점:
- 특정 서버에 트래픽이 몰려 부하 불균형 발생 가능
- 서버 장애 시 세션 유실되므로 사용자는 다시 로그인해야함
2. 세션 클러스터링(Session Clustering)
- 한 서버에 생성된 세션을 다른 서버에 복제하여 모든 서버가 동일한 세션을 공유하는 방식
- 모든 서버가 동일한 세션 정보를 유지하므로 스티키 세션의 트래픽 몰림 현상과 세션 정보 유실 문제 해결이 가능함
- 단점:
- 메모리의 비효율적인 사용(세션 중복 저장)
- 세션 복제에 따른 네트워크 트래픽 부담
- 복제 지연으로 일시적으로 세션 불일치 발생 가능성 존재
3. 스토리지 분리
- 서버 메모리가 아닌 외부 스토리지에 저장 (Redis,Memcached, 데이터베이스(MySQL, PostgreSQL 등))
- 서버 간 세션 공유 용이
- 서버 장애 시에도 세션 보존 가능
- 스티키 세션/클러스터링의 문제 대부분 해결 가능
- 단점:
- 단일 장애 지점(Single Point of Failure, SPOF) -> 저장소 장애 시 전체 인증 시스템에 영향
- 외부 저장소 관리 및 운영 리소스 추가 필요
- 저장소 복제 지연예 따른 일시적 세션 불일치 발생 가능성 존재
4. 세션리스 인증(Token 기반, JWT 등)
- 세션을 서버에 저장하지 않고, 클라이언트가 토큰(JWT)을 보관하고 요청마다 전달, 서버는 토큰만 검증함
- 서버 확장성과 장애 대응에 유리
- 서버 간 세션 동기화 불필요
- 단점:
- 토큰 탈취 시 보안 취약
- 토큰 무효화가 까다로움(블랙리스트 관리 필요)