Infrastructure
세션 불일치 문제와 해결방법
Hero_O
2022. 7. 25. 08:00
세션 불일치
세션 불일치란?
세션 불일치 문제란, 여러 대의 서버를 운용 하면서 부하 분산을 할 때, 각 서버에 세션을 저장하다 보니 클라이언트의 요청이 이전과는 다른 서버로 갔을 때, 세션 데이터를 찾을 수 없는 상황을 얘기한다.
예시
예를들어 만약 로그인을 세션으로 구현 했다면, 세션 불일치 문제가 발생했을 때 로그인이 풀릴 수 있다.
- 1번 서버에 Login 을 진행함.
- 3번 서버에 로그인 후 할 수 있는 작업에 대한 API 요청
- 3번 서버에서는 로그인 상태를 확인할 수 있는 세션정보가 없음
- 로그인이 되지 않은 것으로 판단 함.
세션 불일치 문제 해결방법
Sticky Session
내용
클라이언트에 요청을 로드밸런서가 확인(IP tracking or Cookie를 확인한다.)하여 항상 같은 서버로 요청을 보냄.
단점
- 로그인한 서버 로만 요청이 몰린다는 것은 특정 서버에 부하가 집중될 수 있다는 것이다.
- 세션이 저장되어 있는 서버가 죽었을 때, 세션 정보를 잃어 버릴 수 있다
Session Clustering
내용
클러스터링은 여러 노드들을 하나의 시스템 처럼 사용할 수 있게 함을 의미하는데, 세션 클러스터링이란 하나의 서버에 저장된 세션을 모든 노드에 똑같이 복사하는 것을 의미한다.
단점
- 클러스터링 작업을 위한 많은 메모리가 필요하다.
- 서버의 복제를 위해 네트워크 트래픽이 발생하고 성능 저하로 이어진다.
- 복제를 하기까지 시간이 소요되기 때문에, 세션 불일치 위험이 여전히 존재한다.
- 서버의 대수가 늘어 날 때, 기존 서버의 수정이 필요하다.
Session Storage
내용
독립된 세션 저장소를 준비하고, 다 수의 서버들이 해당 세션 저장소를 공유한다.
예시
- Redis 등의 공용의 캐싱 서버에 세션 정보를 저장해 두고 다 수의 서버들이 모두 해당 Session Storage를 통해 세션을 관리한다.
단점
- 세션 저장소가 다운 되면 모든 서버의 세션정보를 잃어버릴 수 있다.
Reference
- 세션 불일치 문제 해결방법