세션 (Session)

클라이언트의 상태를 저장하는 서버 공간을 말한다.

  1. 웹브라우저가 웹 서버에 요청하게 되면, 웹 서버가 해당 웹브라우저에 유일한 ID를 부여함
  2. 해당 세션 ID는 응답(HTML 페이지를 돌려줄 때) HTTP 헤더에 넣어져 전달된다.
Set−Cookie: JSESSIONID=pi0fo9v2kdi5nuha3bcgiu8fq2
  1. 웹브라우저는 이후 웹브라우저를 닫기 까지 해당 웹 서버 요청할 때 부여된 세션 ID를 HTTP 헤더에 넣어서 전달한다.
Cookie: JSESSIONID=pi0fo9v2kdi5nuha3bcgiu8fq2
  1. 웹 서버는 세션 ID를 확인하고, 해당 세션에 관련된 정보를 확인한 후, HTML 페이지를 돌려준다.

INFO

클라이언트에 서버 상태를 저장하는 방식이 쿠키라면 서버가 저장하는 것이 세션이다.

구현 방식

  • 인-메모리
  • 데이터베이스
  • 캐시 서버

한계점

세션은 보안적으로 취약한 쿠키를 해결하기 위해 등장했다.
그러나 세션에도 몇몇 문제점이 존재한다.

정합성

단일 서버가 아닌 여러개의 서버가 있을 경우에는 서버간 세션 정합성 문제가 발생한다.
이를 해결하기 위해 Sticky Session이나 Redis Clustering 방식으로 문제를 해결할 수 있다.

Sticky Session

로드밸런서가 세션 기간 동안 동일한 클라이언트의 request를 항상 동일한 서버로 라우팅 해주는 기능이다.

  • 여러 서버들은 세션 데이터를 교환할 필요가 없다.
  • 정합성 이슈에서 자유로워 진다.
  • 특정 서버에 과부하가 발생할 수 있으며, 트래픽이 균등하게 배분될 수 없다.
  • 로드밸런싱으로 인해 트래픽이 분산되긴 하지만, Sticky Session을 사용했을 때 특정 서버에 몰린 사람들만 활발하게 활동하는 경우 해당 서버만 과부하가 걸릴 수 있다.

Session Clustering

세션 클러스터링은 다중 서버 환경에서 어느 서버가 요청을 처리하더라도 동일한 로그인 세션을 사용할 수 있도록 세션을 공유하는 방식이다.

클러스터링이란?

클러스터링(군집화)이란 데이터를 여러개의 부분집합(Clusters)으로 분할하는 것을 의미한다.

네트워크 부하

접속 중인 사용자가 많을수록 서버가 관리하는 세션 상태값이 늘어나게 된다.
그만큼 서버 메모리에 부하를 준다.

출처 및 참고자료

https://www.fun-coding.org/post/crawl_advance1.html