JWT - Session

Frog Lemon·2025년 1월 1일
0

WEB

목록 보기
1/1
post-thumbnail

세션이란?

세션(Session)은 클라이언트와 서버 간의 상태를 유지하기 위한 기술이다. 클라이언트가 서버에 접속해서 통신을 시작한 시점부터 종료할 때까지의 기간 또는 그 기간 동안 서버에서 클라이언트를 식별하고 상태를 유지하는 방식이다.



세션의 주요 특징

1. 상태 유지

  • HTTP는 무상태(Stateless) 프로토콜이기 때문에, 기본적으로 클라이언트와 서버 간의 이전 요청 상태를 기억하지 않는다.
  • 세션은 클라이언트를 식별해 서버가 클라이언트 상태를 유지하도록 도와준다.

2. 서버에 저장

  • 세션 정보는 보통 서버의 메모리나 데이터베이스에 저장된다.
  • 클라이언트는 세션 ID를 쿠키나 URL 파라미터 등을 통해 서버로 전송한다.

3. 유효 기간

  • 세션은 기본적으로 유효 기간(예: 30분)이 있으며, 유효 기간 동안 클라이언트와 서버의 상태를 유지한다.
  • 유효 기간이 지나면 세션 정보는 삭제된다.

세션의 구성 요소

1. 세션 ID

  • 세션을 식별하는 고유한 키.
  • 보통 랜덤 문자열로 생성되어 클라이언트에 전달된다.

2. 세션 저장소

  • 서버에서 세션 데이터를 저장하는 공간.
  • 메모리, 데이터베이스, 파일 시스템 등을 사용한다.

3. 쿠키

  • 세션 ID를 저장하고 클라이언트가 서버에 요청할 때마다 이를 전송하는 역할.

세션의 동작 원리

[로그인을 통한 세션 동작 구조]

1. 클라이언트가 서버로 요청을 보낸다

  • 주소, 로그인등을 클라이언트가 서버로 요청한다.

2. 서버는 해당 요청이 최초인지 판단한다.

  • 해댕 요청에 대한 응답하는 메서드가 존재하는지 확인한다.
  • 최초 요청이면 세션ID를 생성하고 메모리나 데이터베이스에 저장한다.
  • 최초 요청이 아니라면 Client에게 전달받은 SessionId를 메모리나 데이터베이스에서 찾는다.

3. 클라이언트한테 세션ID를 전달한다.

  • 서버는 HTTP Header 안에 쿠키 안에 세션 ID를 담아 클라이언트에 전달한다.

  • 세션 ID는 일반적으로 쿠키를 통해 클라이언트의 브라우저에 저장된다.

4. 다음 요청 부터 Client는 Header안 쿠키에 세션ID를 들고 간다.

  • 클라이언트는 이후 요청마다 세션 ID를 서버로 전송한다.
  • 서버는 세션 ID를 확인하여 저장된 세션 정보를 로드한다.

5. 세션 종료

  • 세션의 유효 기간이 만료, 사용자의 로그아웃, 사용자 브라우저 종료등을 하면 세션이 종료되고, 서버는 해당 세션 데이터를 삭제한다.

세션과 로드밸런싱

만약 서버1이 동시 요청을 100개까지 정상적으로 처리한다고 했을때 101번째 부터는 요청을 처리하는 속도가 느려질 것이다. 그때 101번째 요청부터 서버2로 요청을 넘겨 분담하는 것이 로드 밸런싱이다.

궁금증

  1. Client가 서버1에 요청을 보낸다면 서버1 안에서 세션ID를 생성,저장 후에 Client한테 header안의 쿠키를 통하여 세션ID를 담아 보낼 것이다.
  2. 만약 Client가 요청을 보냈는데 로드 밸런싱으로 인해 서버2로 세션ID를 보내면 서버2는 해당 세션ID를 저장하고 있지 않기 때문에 최초의 요청으로 받아들일것이다.

이 문제를 어떻게 해결할까?


해결방안

1. Sticky Session 사용

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

예를 들어, Client가 1번부터 3번까지의 서버 중 1번 서버에 세션을 생성하였다면, 이후에 Client가 보내는 모든 요청은 1번 서버로만 보내지게 된다. 즉, Load Balancer는 User가 첫 번째 세션을 생성한 서버로 모든 요청을 리다이렉트 하여 고정된 세션만 사용하게 한다.

장점

  • 서버들간의 세션 데이터 교환을 할 필요가 없다.

단점

  • 특정 서버에 과부하가 발생할 수 있다.
  • 트래픽이 균등하게 배분될 수 없다.
  • 특정 서버의 사람들만 활발히 활동할 경우 해당 서버만 과부하가 걸린다.

2. Session Storage 사용

세션을 저장하는 공간을 의미한다. 각 서버는 세션 스토리지를 공유하여 사용한다.
많은 사람들이 이 방식을 채택한다고 한다.

장점

  • Sticky Session처럼 트래픽이 몰리는 현상을 방지할 수 있다.
  • 서버가 증설되더라도 각 서버에 세션 스토리지의 정보만을 입력하면 사용가능하다.

단점

  • 세션 스토리지에 문제가 생기면 모든 세션이 이용이 불가하다.

3. 세션 복제

하나의 세션 저장소에서 변경이 발생하면 변경 사항이 모든 다른 세션에 복제를 하는 것이다.

장점

  • 세션을 복제한다면 클라이언트가 이후에 어떤 서버에 접속하더라도 로그인 정보가 세션에서 복제되어 있으므로 세션을 사용 가능하다.
  • 장애가 발생하더라도 서비스가 중단 되지 않는다.

단점

  • 모든 서버가 동일한 세션 객체를 가져야 하기 때문에 많은 메모리가 필요하다.
profile
노력과 끈기를 추구합니다. 레몬이 좋아!

0개의 댓글