23 Feb 2023

[Web] 쿠키와 세션

Cookie와 Session이 왜 만들어졌는가?

HTTP 프로토콜은 connectionless, stateless 한 특성을 가진다.

connectionless : 클라이언트가 요청을 한 후, 응답을 받으면 연결을 끊어버리는 특징. 클라이언트가 서버에 request를 보내면 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는다.

stateless : 통신이 끝나면 상태를 유지하지 않는 특징. 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는다.

이 두 가지 특징으로 사용자 정보가 들어오더라도 유지할 수 없어 통신할 때 지속적으로 받아야 한다는 불편함이 생긴다.

이를 해결하기 위해 나온 것이 쿠키(Cookie)와 세션(Session)이다.

쿠키

클라이언트의 로컬에 저장되는 키와 값이 들어있는 데이터 파일. 웹 브라우저가 지정하는 메모리 또는 하드디스크에 저장된다.

쿠키의 특징

  • 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지되고 유효 시간이 지정되지 않는다면 브라우저 종료 시 만료

  • 클라이언트에 300개까지 쿠키 저장 가능, 하나의 도메인당 20개의 값만 가질 수 있으며 하나의 쿠키는 최대 4KB
  • Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키 생성 가능
  • 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 request시에 Request Header를 넣어서 자동으로 서버에 전송

쿠키의 동작 방식

  1. 클라이언트가 페이지 요청
  2. 서버에서 쿠키 생성
  3. HTTP 헤더에 쿠키 포함하여 response
  4. 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관
  5. 같은 요청을 할 경우 HTTP 헤더에 쿠키 포함 request
  6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트 하고 변경된 쿠키를 HTTP 헤더에 포함시켜 response

세션

쿠키를 기반으로 하지만, 세션은 서버에서 관리함.(서버의 메모리 사용)

세션의 특징

  • 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속이 끝나고 브라우저를 종료할 때까지 인증 상태를 유지

  • 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안이 좋음
  • 동접자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 될 수 있음

세션의 동작 방식

  1. 클라이언트가 서버에 접속 시 세션 ID를 발급 받음
  2. 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
  3. 클라이언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 request
  4. 서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라이언트 정보를 가져와서 사용
  5. 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 response

쿠키 vs 세션 정리

  쿠키 세션
저장 위치 클라이언트(사용자) 컴퓨터 서버의 메모리
보안 약함 강함
요청 속도 빠름 느림(서버의 처리 필요)
만료 시점 쿠키 저장 시 만료 시간 설정 클라이언트의 로그아웃 / 설정 시간 내 반응이 없을 때
리소스 클라이언트의 리소스 서버의 리소스
용량 제한 한 도메인 당 20개, 한 쿠키 당 4KB 제한없음(서버 메모리)

세션이 보안적으로 더욱 좋지만, 사용자의 수 만큼 서버 메모리를 차지하기 때문에 이런 문제를 보완한 토큰 기반의 인증 방식을 사용하는 추세

JSON 포맷을 이용하는 JWT(Json Web Token)을 주로 사용한다고 한다.

Thank You For Reading
SeungJun Jeon

점점 강해지고 있습니다.

comments powered by Disqus