Project

세션 불일치를 해결하려면 어떤 방법들이 있을까?

수여닝 2021. 8. 14. 01:40

 

저번 포스트에서 서버를 늘리는 방법을 알아봤습니다.

그  방법은 Scale-up과  Scale-out이 있었는데,  저는 Scale-out방식을 선택해서 서버를 늘리는 방법을 선택했습니다.

하지만 Scale-out은 큰 단점이 있습니다.

 

그건 바로, 세션 불일치입니다.

 

세션 불일치가 어떤 것일까요? 그리고 어떤 상황일까요?

이렇게 되면 서버를 늘려서 많은 사용자들이 사용하기 편리하게 만든 이유가 사라질 것입니다.

불편함 때문에 더 이상 사용하지 않을 수 있기 때문입니다.

이 문제를 해결할 수 있는 방법들에 대해 알아보겠습니다.

 

 

 


 

Sticky Session

출처 : https://www.imperva.com/learn/availability/sticky-session-persistence-and-cookies/

 

sticky를 검색해보면 '끈적끈적한'이라는 의미를 가지고 있다.

그림을 보면 한 사용자의 세션이 한 서버에만 연결되어있는 것을 볼 수 있다.

즉, 이 방법은 사용자 세션을 처음 생성해준 서버가 작업을 담당한다는 것이다.

 

예를 들면, user1이 로그인을 할 때 그 요청을 서버 1이 받아서 그 이후에 user1의 모든 요청을 서버1이 담당하는 것이다.

하지만, 이 방법은 세션 불일치를 해결해줄 수는 있지만, 큰 단점이 있다.

 

  • 트래픽이 불균형하게 배분될 수 있다.

트래픽이 불균형하게 배분된다는 게 어떤 상황일까?

 

 1.  특정 서버에 트래픽이 집중될 수 있다.

 

  2. 한 서버에는 세션이 들어오지 않는 경우가 있을 수 있다.

 

 

1.  특정 서버에 트래픽이 집중될 수 있다.

이 부분을 이해하기 위해서는 공인 ip와 사설 ip에 대해 알고 있으면 이해하기가 쉽다.

 

더보기

공인 IP : IP주소 할당 공인기관에서 할당한 인터넷 상에서 사용할 수 있는 ip주소

사설 IP : 내부 네트워크상에서만 사용되는 주소로 인터넷상에서 사용할 수 없는 ip주소 (공유기 사용하는 가정용 컴퓨터가 가지는 ip)

한 기업에서 공공 와이파이를 사용해서 100명의 직원들이 업무를 처리하고 해당 서버로 요청을 보낸다고 가정해보자.

사설 ip는 인터넷상에서 사용될 수 없어서 인터넷상에서는 하나의 공인 ip로 서버로 요청이 보내질 것이다.

그러면 한 서버에 트래픽이 몰리는 경우가 될 것이다.

 

 

2.  한 서버에는 세션이 들어오지 않는 경우가 있을 수 있다.

서버 5대가 있다고 가정하자.

100명이 이 서비스를 이용한다고 가정했을 때, 서버 한대에는 20명의 세션이 저장되어있을 것이다.

그런데, 만약 한 서버가 문제가 생겨 다운되면 20명의 세션은 어떻게 될까?

로드밸런서가 20명의 세션을 다른 서버로 다시 나눠줄 것이다.

 

다운된 서버가 복구된다고 하면, 기존 20명의 트래픽을 받을 수 있을까?

이미 다른 서버로 배분되어서 다시 받을 수 없게 된다.

새로 들어오는 사용자의 세션을 받기 때문에 다시 특정 서버에 부하가 생길 수 있다.

 


 

 Sticky session은  트래픽을 분산하기 위해서 사용한 Scale-out의 단점인 세션 불일치는 해결할 수 있지만,

또 특정 서버에 트래픽이 집중되거나 들어오지 않는 경우도 있을 수 있습니다.

그래서 세션 불일치를 해결할 수 있는 다른 방법인 Session Clustering과 Session Storage를 알아볼 예정입니다.

다른 방법들은 다음 포스트에서 알아보겠습니다.

 

 

참고자료

https://www.imperva.com/learn/availability/sticky-session-persistence-and-cookies

https://smjeon.dev/web/sticky-session/

https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html