📌 다중 서버에서 세션관리를 어떻게 효율적으로 진행할까?
다중 서버를 사용하면 각각의 서버에 세션이 저장된다.
만약 로드벨런싱으로 들어갈 때마다 서버가 바뀐다면 로그인이 풀리는 상황이 발생한다.
그럼 이를 어떻게 처리하는 것이 좋을까?
주제: 다중 서버에서 세션관리
문제의 발단
* 앞으로 진행되는 콩콩회사의 이야기는 이해를 위한 하나의 픽션입니다. *
드디어 서비스를 완성시켰다!
콩콩회사에서 웹 사이트 출시를 준비하고 있어요.
콩콩회사 개발자 A씨는 엄청난 야근 끝에 서비스를 완성시켰어요!
그러나, A씨가 고려하지 못한 부분이 있었습니다.
야심차게 준비중인 웹 사이트는 출시 전 엄청난 마케팅과 홍보를 통해
많은 사람의 관심을 받고 있었죠.
그러나 서비스는 많은 트래픽을 감당하기 위한 준비가 없었던 것이에요!
콩콩회사 개발부 A씨는 이를 해결하기 위해 머리를 싸매고 있군요.
Q. 많은 트래픽을 감당하기 위해서 A씨가 적용할 수 있는 방안은 무엇일까요?
A씨가 적용할 수 있는 방법은 여러가지가 있겠지만, 대표적으로 서버확장이 있겠습니다.
서버확장의 두 가지 방법: 스케일 아웃, 스케일업
- 스케일 아웃: 서버를 여러 대 추가하여 시스템을 확장하는 방법
- 스케일업: 서버의 CPU나 RAM 등, 스펙 자체를 업그레이드하여 확장하는 방법
만약 스케일 아웃을 했다면 로드벨런싱을 적용하는 것은 필수입니다.
로드벨런싱은 클라이언트와 서버풀 사이에 위치하여 클라이언트의 트래픽을 분산시켜주는 장치 및 기술을 통칭합니다.
한 곳의 웹서버에만 부하가 몰리면 안되겠죠?
엥? A씨!.. 이거 왜 로그인이 풀려요??
A씨가 우여곡절 끝에 로드벨런싱 환경을 구축하여 예상 트래픽을 충분히 감당할 수 있는 환경을 만들었어요!..
드디어 모든 직원들과 테스트를 진행했어요.
‘아.. 드디어 힘들었던 야근이 끝나는 것일까..?’
.. 그러나! 다른 문제가 발생했어요!
???: A씨! 이거 로그인이 간헐적으로 유지가 안되고 풀리는데 왜 풀리는 걸까요..?
A씨는 절망에 빠졌고, 야근을 시작했어요..
Q. A씨가 개발한 서비스가 무슨 문제 때문에 로그인이 풀렸던 것일까요? 이를 해결하기 위한 방안으로는 무엇이 있을까요?
로그인을 구현할 때, 핵심 기술이 무엇일까요?
바로 세션입니다.
세션은 서버단에 저장되는 티켓입니다. 로그인을 한 사용자는 서버에 티켓이 남는거죠.
그러나 A씨는 다중서버 환경에 로드벨런싱을 적용했어요. 만약 사용자가 서버1~5 중 서버1에 로그인했다면,
서버1에만 사용자의 로그인 세션이 저장되고 다른 서버에는 없을거에요.
그렇게 된 상태에서 서버2~4 중 랜덤으로 들어가게 된다면, 다른 서버에는 세션이 남아있지 않게 되기 때문에
다른 서버에 접속한 경우, 로그인이 풀리겠죠?
이를 해결하기 위한 방법으로는 대표적으로 두 가지 방법이 있어요.
- Sticky Session
- Session Clustering
오늘의 핵심 주제입니다. 한 번 알아가봅시다!
Sticky Session
첫 요청에 대한 응답을 준 서버에만 다음 요청이 전송되도록 하는 것.
만약, 사용자가 서버1에 요청을 준 경우, 계속해서 서버1에만 요청을 준다.
일반적으로 이를 구현하기 위해 Cookie를 사용하거나 클라이언트의 IP를 트래킹하는 방법이 있다.
Sticky Session의 단점
- 로드 밸런싱이 의도한대로 잘 동작하지 않을 수도 있다.
- 특정 서버만 과부하가 올 수 있다.
- 특정 서버 Fail시 해당 서버에 붙어있는 세션들이 모두 소실될 수 있다.
그럼 더 효율적으로 관리하기 위해서는 어떻게 해야될까요?
Session Clustering
기존에는 각 서버마다 Session이 관리되었다면, 세션 클러스터링은 여러 서버의 세션을 하나로 묶어서 관리하는 방법이다.
스티키 세션과 다르게, 하나의 서버가 Fail 되어도, 다른 서버로 옮겨져서 관리된다.
크게 3가지 방법으로 구성된다.
- WAS 간 구성
데이터별 Primary/BackUp 인스턴스 지정하여 구성한다.
장점: 기존의 WAS끼리 조작하는 것이기 때문에 별도의 서버 인프라가 필요없다.
단점: 세션데이터의 백업 및 동기화 이슈, 장애 발생시 세션 복제의 이슈가 발생 - 세션 서버 구성
별도의 세션 서버를 구축하여 관리한다.
장점: 별도의 서버를 구축하기 때문에 세션 공유 설정이 용이하다.
단점: 서버 인프라 구축이 까다롭다. 단일 장애 지점으로 장애시 복제를 구성해야 한다. 성능이 좋지 못하다. - 세션 데이터그리드 구성
데이터그리드(JVM 프로세스 수를 늘리는것)에서 세션 정보를 저장하여 운영합니다.
장점: 인스턴스와 애플리케이션 간 세션 공유가 용이하다. Elastic 확장성과 안장성을 보장한다. 메모리 기반 고성능.
단점: 별도의 서버 구성으로 인한 비용 발생한다. 관리포인트가 증가한다..
출처
https://junshock5.tistory.com/91
https://kchanguk.tistory.com/146
https://m.post.naver.com/viewer/postView.naver?volumeNo=27046347&memberNo=2521903
https://library.gabia.com/contents/infrahosting/1222/