세션(Session)

2023. 11. 17. 14:36카테고리 없음

세션(Session)

  • 사용자가 웹사이트에 로그인했을 때 해당 사용자에 대한 정보를 일정 시간 동안 서버에 기록하고 보관하여 해당 사용자와의 연결 상태를 유지하는 것을 말함
  • 일정 시간이란 사용자가 웹 사이트에 접속한 시점부터 종료하는 순간까지를 의미
  • 연결상태 유지 보다 안정성을 더 중요시 함
  • 사용자별로 Session ID를 부여하여 구분
  • 세션의 키값은 클라이언트에 세션 데이터는 서버 측에 저장

 

단일 서버에서 세션을 관리한다면 문제가 없지만 오토스케일 등을 통해 분산된 서버 환경에서 세션을 관리할 경우에는 세션 불일치 문제가 발생 할 수 있음

이를 보완할 수 있는 방법으로는 Sticky Session과 Session Clustering 등이 존재

 

세션 불일치

 

1. Sticky Session

  • 특정 세션의 요청을 최초 요청된 서버로만 지속적으로 연결
  • 세션을 통해 트래픽 분산이 가능
  • A 사용자가 최초 요청을 보낸 서버가 1번 서버라면 그 이후로 A가 보내는 요청은 전부 1번 서버가 처리
  • 대표적으로 쿠키게 이용 서버를 저장하여 다음 요청시에도 해당 서버로 요청을 보내는 방법이 있음

 

좌 Sticky Session 적용 전                                                                                 우 Sticky Session 적용 후

 

 

단점

  • 한 서버에 의존하기 떄문에 트래픽이 집중(트래픽 쏠림 현상)되어 제 기능을 하지 못하는 경우가 발생 할 수 있음
  • 다른 서버는 여유롭더라도 Sticky Session 설정이 되어 있으면 같은 서버로만 요청을 보내야 하기 때문에 자원을 효과적으로 사용하지 못하는 경우가 발생
  • 서버에 장애가 발생될 경우 해당 서버에 연결된 세션이 끊겨 서버에 저장된 세션 정보를 모두 유실할 수도 있음

방안

  • 여러 서버를 하나의 서버처럼 동작하도록 하는 클러스터링 기술을 사용 (session clustering)

 

2. Session clustering

  • 여러 컴퓨터(서버)를 연결하여 하나의 시스템(서버)처럼 동작하도록 하는 기술을 의미
  • 여러대의 WAS를 동일한 세션으로 관리하는 방식
  • 각각의 WAS 세션을 하나의 동일한 세션으로 관리하기 때문에 사용자가 기존 서버가 아닌 다른 서버로 접속을 하더라도 세션 불일치에 대한 위험이 없음
  • 개별 서버에 문제가 발생하더라도 세션 연결에 위험이 없음
  • 하나의 서버에만 트래픽을 몰리는 Sticky Session의 단점을 해결
  • All-to-All Session Replication 방식과 Primary-Secondary Session Replication 방식이 있음

 

 

2.1 All-to-all 세션 복제 방식

  • 하나의 세션 저장소에 변경이 감지되면 변경된 내용을 나머지 모든 세션 저장소에 복제

 

단점

  • scale-up을 할 경우 새로운 서버가 지속적으로 추가될 때마다 새로운 서버의 정보(IP, PORT 등)를 기존 서버에 입력하고 클러스터링 해줘야 함
  • 새로운 서버를 생성 할 떄마다 기존 서버 정보를 수정해야 하기 때문에 에러가 발생할 가능성이 있음
  • 세션 데이터가 저장될 때마다 모든 서버에 해당 데이터가 입력되어야 하기 때문에 성능 저하가 발생 할 수 있음

방안

  • 모든 WAS가 아닌 하나의 서버에만 세션을 동기화하고, 그외 서버에는 세션 키만 저장하여 값을 백업하는 primary-sencondary session 복제 방식을 사용
  • 여러 서버가 하나의 별도 세션 저장소(Redis)를 사용

 

2.2 Session clustering(Primary-secondary session)

  • Primary 서버는 Secondary(Backup) 서버에 세션 객체의 key-value 전체를 복제
  • Primary 서버와 Secondary 서버 이외의 서버에는 세션 Key만 저장
  • 각 서버에 세션 전체의 정보를 저장 하던 기존 방법에 비해 메모리 사용 감소

단점

  • Primary 서버와 Secondary 서버를 제외한 나머지 서버에 세션 정보를 요청할 경우 다시 Primary 서버에 요청하여 해당 key 값에 맞는 데이터 값을 받아와야함

 

4. Redis

  • 여러 서버가 별도의 세션 서버(Redis)를 두어 세션 스토리지를 관리
  • key-value 형태의 데이터를 저장하는 비 관계형 데이터베이스
  • Inmemory DB이기 때문에 읽는 속도가 빠름
  • scale up으로 새로운 서버를 추가하더라도 Redis 서버에 연결만 하면 되기 떄문에 기존 서버를 수정할 필요 없음
  • 새로운 서버가 추가될 때마다 기존 서버를 수정해야 되는 session clustering의 문제점 해결

 

 

단점

  • 세션을 저장하고 있는 Redis 자체에 장애가 발생할 경우 모든 세션을 잃어버릴 위험이 있음