세션과 쿠기

byeol·2023년 3월 22일
0

로그인 처리를 배울 때 등장하는 개념인 세션과 쿠키를 정리해보려고 한다.

HTTP 프로토콜 환경은 connectionless하며 stateless하기 때문에 서버는 매번 클라이언트가 누군지 확인해야 한다.

  • connectionless

    클라이언트가 요청을 보내고 이에 서버가 응답하면 서버는 연결을 끊어버린다.
  • stateless
    통신이 끝나면 상태를 유지하지 않는다.

이 두가지의 특성을 보완하고자 쿠키와 세션을 사용한다.

쿠키

쿠키는 클라이언트의 정보를 클라이언트 로컬에 저장하는 것이다.
나는 velog에 들어오면 항상 로그인 상태가 유지되는데 이 또한 나에게 velog에 대한 쿠키가 저장되어 있기 때문이다.

이 쿠키가 얼마만큼의 시간동안 유효한가를 설정할 수 있다. 따라서 브라우저가 종료되어도 쿠키는 유효 시간내에 있다면 인증이 가능하다.

쿠키는 최대 300개까지 저장이 가능하고
한 도메인 당 최대 20개,
한 쿠키 당 4KB까지 저장이 가능하다.

그렇다면 쿠키는 어떻게 생성되고 어떤 내용을 포함하고 있을까?

그림으로 정리하면 위와 같다.

클라이언트가 서버에 요청을 보내면 서버는 쿠키를 생성한다. 그 쿠키를 클라이언트에 보낼 때는 Response Header의 Set-Cookie 속성을 통해 보낸다. 이를 바탕으로 클라이언트는 쿠키를 생성하고 클라이언트 로컬에 저장한다.

이후 같은 요청을 보낼 때 Request 헤더에 쿠키를 같이 실어서 보낸다. 이건 사용자가 요청하는 것이 아니라 자동으로 쿠키를 같이 실어서 보낸다. 서버는 해당 서비스를 한 후 쿠키의 내용을 업데이트해 Responose Header에 실어서 보낸다. 이를 바탕으로 클라이언트는 업데이된 쿠키를 저장한다. (기존 저장했던 쿠키를 업데이트 하기)

쿠키에 포함되는 내용

  • 이름 : 각 쿠키를 구별하기 위한
  • 값 : 쿠키의 이름과 관련된
  • 유효기간 : 쿠키 유지 시간
  • 도메인 : 쿠키를 전송할 도메인
  • 경로 : 쿠키를 전송할 요청 경로

세션

쿠키 기반, 사용자 정보파일을 클라이언트가 아닌 서버 측에서 관리한다.

세션 ID로 클라이언트를 구분한다.
브라우저가 종료할 때까지 인증상태를 유지한다.
일정시간 응답이 없으면 정보가 유지되지 않게 설정할 수 있다.(브라우저를 종료하지 않더라도)

사용자 정보를 서버에 두기 때문에 보안에는 좋지만 사용자가 많을수록 메모리를 많이 차지한다.

즉 동시 접속자가 많은 경우 서버에 과부하를 주게 되어 성능 저하

어떤 흐름인지 살펴보자

세션은 쿠키 기반이기 때문에 세션 ID는 쿠키에 저장되며 이후 발급된 세션ID는 쿠키에 저장된 정보로써 함께 서버로 전달된다.

클라이언트가 요청을 보내면 서버는 쿠키를 생성하고 클라이언트에게 유일한 세션 ID를 발급한다.

이 쿠키와 세션 ID를 응답에 보내고 이를 바탕으로 클라이언트는 쿠키를 생성하고 안에 세션 ID를 저장한다.

후에 같은 요청을 보낼 때 해당 쿠키를 보내는데 그 쿠키에는 세션 ID가 포함되어 있다. 서버는 쿠키에 저장된 세션 ID를 확인하고 사용자 ID와 매핑된 서비스를 제공한다. 이후 업데이트 된 쿠키와 세션ID를 클라이언트에 보낸다.

profile
꾸준하게 Ready, Set, Go!

0개의 댓글