다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우에는 세션 불일치 문제가 발생할 수 있습니다. 만약 서버 A, B를 관리하고 있을 때, 로드밸런서는 사용자의 요청을 상황에 맞게 A, B 중 한 곳으로 전달합니다. 유효한 로그인 요청이 A 서버로 처음 도착하면 사용자에 대한 세션 정보는 A 서버에 저장됩니다. 이후에 해당 사용자의 또 다른 요청이 로드 밸런서에 도착했을 때, B 서버로 도착하게 되면 사용자의 세션 데이터가 존재하지 않기 때문에 요청이 제대로 처리되지 않습니다. 이를 세션 불일치 문제라고 합니다.
세션 불일치 문제는 어떻게 해결할 수 있나요? 🤔
세션 불일치 문제는 크게 3가지 방식으로 해결할 수 있습니다. 스티키 세션 방식, 세션 클러스터링 방식, 스토리지 분리 방식입니다.
스티키 세션 방식은 사용자 요청이 항상 사용자 세션 정보가 저장된 서버로 가도록 고정하는 방식입니다. 사용자 요청의 쿠키나 IP를 통해서 어느 서버로 고정 시킬지 결정합니다. 해당 방식은 단순하다는 장점이 존재합니다. 반면, 특정 서버에 트래픽이 집중될 수 있다는 문제점과 사용자의 세션 정보를 가지고 있는 서버가 다운되면 해당 서버에 고정된 사용자는 다시 로그인해야하는 문제점이 존재합니다.
세션 클러스터링 방식은 특정 서버에 사용자 세션 정보가 생성될 때, 다른 서버로 정보를 복제하는 방식입니다. 여러 서버에 세션 정보를 중복으로 저장하므로 스티키 세션의 트래픽 몰림 현상과 세션 정보 유실 문제를 해결한다는 장점이 있습니다. 반면, 세션 정보를 중복 저장한다는 점에서 메모리를 비효율적으로 사용하며, 세션 정보 복제 과정에서 발생하는 네트워크 트래픽 문제, 세션 정보 복제 지연으로 인한 일시적인 세션 정보 유실 문제가 발생할 수 있습니다.
스토리지 분리 방식은 세션 정보를 저장하는 공간을 외부로 분리하는 방식입니다. 세션 클러스터링 방식, 스티키 세션 방식에서 발생하는 문제를 해결할 수 있습니다. 해당 방식은 스토리지에 대한 단일 장애 지점(Single Point Of Failure)이 문제가 될 수 있으며, 클러스터링과 같은 HA 구성으로 단일 장애 지점을 해소하여도 복제 지연으로 인한 일시적인 세션 정보 유실 문제는 발생할 수 있습니다. 또한, 외부 스토리지를 관리하기 위한 추가적인 리소스가 요구될 수 있습니다.
'개발 > Programming' 카테고리의 다른 글
[CI/CD] Github Action, AWS로 Java 자동 빌드/배포하기 (3) | 2024.01.15 |
---|---|
[트러블 슈팅] '채식이들' 메인 페이지-제품 출력 에러 해결(java.lang.NullPointerException) (2) | 2023.04.16 |
[SMTP] 메일 전송을 위한, Google Gmail SMTP 설정 (5) | 2023.03.21 |
[프로그래밍] 자주 사용하는 정규식 표현 정리 (3) | 2023.03.08 |
[IDE] MacOS 터미널(CLI)에서 IntelliJ 바로 실행하기 (2) | 2023.02.27 |