Server

Cookie / Session - sticky session / session clustering

기기디 2022. 2. 12. 19:26

정의

  • HTTP프로토콜의 비연결성과 무상태성을 보완하기 위하여 사용하는 기록정보 파일을 말한다.

쿠키

  • 클라이언트가 어떤 웹사이트를 방문할 경우 그 사이트의 서버를 통해 클라이언트 브라우저에 저장되는 기록정보 파일을 말한다.

세션

  • 클라이언트가 어떤 웹사이트를 방문할 경우 그 사이트의 서버에 저장되고 관리하는 기록정보파일을 말한다.

구조/특징

쿠키

  • key-value형식으로 저장된다.
HttpServletResponse:
           Status = 200
          Headers = [Set-Cookie:"userName=ssg", "password=ssg123"]
  • 서버에서 클라이언트로 Response객체를 보낼때 응답헤더의 Set-Cookie에 담아 전송한다.
HttpServletRequest:
      HTTP Method = GET
      Request URI = /user
          Headers = [Cookie:"userName=ssg"; "password=ssg123"]
  • 클라이언트에서 서버로 요청을 보낼때 항상 저장되어있는 쿠키를 요청헤더의 Cookie에 담아 전송한다.

세션

  • 동작방식 : 클라이언트가 서버로 요청전송시 첫 요청이라면 서버에서는 session을 생성하고 session id값을 쿠키에 담아 반환한다.
  • 세션아이디는 브라우저 단위로 저장되고 브라우저 종료시 소멸된다.
  • 기본적으로 서버에 저장한다는 점에서 쿠키보다는 보안이 우수하다.

주의해야할 점

쿠키

  • 요청시 쿠키의 값을 그대로 보내기에 유출 및 조작의 위험이 있어 보안에 취약하다.
  • 4kb의 용량제한이 있어 많은 정보를 담을 수 없다.
  • 브라우저마다 쿠키에 대한 지원스펙이 다르기 때문에 브라우저간 쿠키가 공유되지 않아 사용자를 다르게 인식할 수있다.
  • 쿠키의 사이즈가 커지면 커질수록 네트워크부하가 심해진다.

세션

  • 사용자정보를 서버에 두기 때문에 사용자가 많아질수록 서버 메모리를 많이 차지하게 되어 서버 성능저하의 요인이 될 수 있다.

용도

쿠키

  • ID저장,로그인 상태유지 / 7일간 다시보지 않기 / 검색내역기반의 광고추천
  • 세션관리/개인화/트래킹

세션

Stick Session

  • 로드밸런싱하는 환경에서 서버서간 세션상태를 동기화 시키기 위하여 사용하는 기술이다.
  • 클라이언트가 첫 요청한 서버로 계속해서 요청을 주고받는 방식이다. 브라우저의 쿠키에 이용한 서버가 어딘지를 저장하는 방법이 있다.
  • https://aws.amazon.com/ko/blogs/aws/new-elastic-load-balancing-feature-sticky-sessions/
  • 장점
    • Ip Hash방식으로 서버를 고정하면 생길 수 있는 트래픽쏠림 현상을 해결할 수 있다.
  • 단점
    • 사용자가 사용할 서버가 고정되기에 트래픽이 몰리는 문제가 발생할 수 있다. 로드밸런싱이 제대로 동작히 않는 현상이 생긴다.

Session Clustering

  • 로드밸런싱하는 환경에서 서버서간 세션상태를 동기화 시키기 위하여 사용하는 기술이다.
  • 여러 서버들의 세션을 묶어 관리하는 기술을 말한다.
  • 장점
    • 사용자가 어느 서버에 접속해도 동일한 세션데이터를 받을수 있도록 보장한다.
    • 사용자가 특정 서버에 고정되지 않기 떄문에 트래픽쏠림 문제를 해결할 수 있다.
  • 단점
    • 세션 데이터가 저장될 떄마다 모든 서버에 해당 데이터가 입력되어야 함에 따라 성능저하가 올 수 있다.
    • 개별서버에서 모든 서버의 세션정보를 저장해야하므로 많은 메모리를 요구하게 된다.
  • 이런 단점들을 보완하기 위하여 하나의 서버에서만 session을 동기화하고 나머지 서버에는 session키만 들고 있게 하는 primary-secondary session복제방식과 여러 서버에서 하나의 별도의 세션저장소를 사용하는 세션스토리지 방식이 있다.