세션 클러스터링

세션 클러스터링에 대해 정리해보자.

세션이란 HTTP 단방향 통신에서 매번 요청시마다. 클라이언트가 누군지 확인하지 않아도 되도록 , 로그인 시 인증된 사용자 정보를 세션으로 담고
이후 클라이언트 요청시 클라이언트 세션키를 기반으로 세션을 캐치한다.

일반적으로 한대의 서버만 운용시에는 발생하지 않는 문제가 있다.
앞단의 Load Balancer가 있고, 여러대의 WAS 가 있을때 이다.

Image for post
Image for post

간단히 위와 같은 구조의 연결로 볼 수 있다.

LB 에의해 지속적으로 WAS1에 붙게 되는 사용자가 있다.
서버 장애가 발생 하거나 , 부하로 LB 에서 WAS2 로 사용자를 연결하게 되면.
WAS2에서는 사용자에 대한 세션정보가 없기 때문에 , 인증 요청을 위해 로그인페이지를 띄우거나 하게 된다.

이를 위한 방법으로 세션 클러스터링이 있다.

세션 러스터링은 여러대의 WAS 가 세션을 공유 함으로써
위와 같이 세션 정보의 유실에 의한 문제를 해결한다.

WebLogic, Tomcat 등 여러 WAS 에서도 세션 클러스터링 기능을 지원한다.

세션정보 저장하는 DB를 공유하여 세션클러스터링을 하기도 한다.
RDS, NoSQL(Redis..등)를 사용하기도 한다.

세션정보가 공유되기만 하면 되기 때문에, 어떤 방법으로 구현하든 상관없을듯 하지만, 세션정보 요청 트래픽을 고려해야겠다.

AWS ELB 에서는 sticky session 으로 , 한번 접속된 인스턴스로 계속적으로 보내주도록 설정할 수 있다. 하지만 세션 클러스터링이 아니기 때문에 인스턴스내 세션정보가 영속성을 갖지않고 서버 재기동 등으로 유실될수는 있겠다.

Written by

엘디는 사랑입니다.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store