Skip to content

다중 서버 환경에서 세션 불일치 문제와 해결방법

⚠️ 문제점

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)을 보관하고 요청마다 전달, 서버는 토큰만 검증함
  • 서버 확장성과 장애 대응에 유리
  • 서버 간 세션 동기화 불필요
  • 단점:
    • 토큰 탈취 시 보안 취약
    • 토큰 무효화가 까다로움(블랙리스트 관리 필요)