1 minute read

Cookie와 Session

Cookie와 Session이 필요한 이유

HTTP는 상태가 없는(Stateless) 프로토콜이기 때문에 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성이 있어 어떤 사용자가 접속했는지에 대한 정보를 파악할 수 없다.

어떤 사용자가 접속했는지에 대한 정보를 파악할 수 없다. 따라서, 쿠키 또는 세션을 사용하여 사용자를 구분하고 각 사용자에 맞는 정보를 제공한다.


쿠키란 클라이언트의 웹 브라우저에 저장되는 작은 데이터 조각으로 서버가 클라이언트의 요청을 식별하는데 사용된다. 쿠키를 활용해서 사용자를 구분하는게 매우 유용하지만, 클라이언트가 수정할 수도 있고 해커가 탈취할 수도 있기 때문에 보안에 취약하다. 따라서, 아이디 및 비밀번호와 같은 민감한 정보들을 저장하는데 사용하지는 않고 세션 ID를 관리하거나 사용자 테마같은 개인화나 트래킹에 사용한다. 아래와 같은 목적으로 사용한다.

  • 세션 ID 관리, 서버에 저장해야 할 민감한 정보에 대한 식별자 ID
  • 개인화, 사용자 선호 및 테마
  • 트래킹, 사용자 행동 기록 및 분석


쿠키의 사용 예

  • 방문 사이트에서 로그인 시, ”아이디와 비밀번호를 저장하시겠습니까?”
  • 쇼핑몰의 장바구니 기능
  • 자동로그인, 팝업에서 ”오늘 더 이상 이 창을 보지 않음” 체크, 쇼핑몰의 장바구니


Session

세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다. 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다. 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다. 즉 동접자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 된다.

  • 민감한 정보 관리, 사용자의 비밀번호 및 개인정보


세션의 사용 예

  • 로그인 같이 보안상 중요한 작업을 수행할 때 사용


Cookie와 Session의 차이점

  • 가장 큰 차이점은 사용자의 정보가 저장되는 위치이다. 때문에 쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용한다.
  • 보안 면에서 세션이 더 우수하며, 요청 속도는 쿠키가 세션보다 더 빠릅니다. 그 이유는 세션은 서버의 처리가 필요하기 때문이다.


JWT

  • 인증 정보에 대한 별도의 저장소가 필요없다.
  • 사용자가 로그인을 요청 시 서버에서는 어떠한 데이터를 기반으로 인증이 가능한 토큰을 만들어서 클라이언트에 전달하는 방식이다. 클라이언트는 요청 시 토큰을 서버로 보내고 서버는 토큰에 대한 유효성을 검사하여 사용자가 인증되었는지 판별한다.
  • 클라이언트 인증 정보를 저장하는 세션과 다르게, 서버는 무상태가 된다.


쿠키와 로컬스토리 모두 클라이언트의 웹 브라우저에 저장되는 저장소이지만 쿠키는 웹 요청은 쿠키정보를 포함하여 서버로 전송됩니다. 하지만 로컬스토리지는 서버로 전송이 이루어지지 않아 네트워크 트래픽 비용을 줄여준다.

쿠키는 4KB의 용량을 가지고 있지만 로컬스토리지는 용량의 제한이 없다. 또한 쿠키는 만료일자가 지정되어있고 영구 쿠키를 원할 경우 만료일자를 멀게 설정하여 세션 쿠키를 활용할 수 있다. 하지만 로컬스토리지는 별도의 만료일자의 설정 없이 영구적인 데이터 보관이 가능하다.



Updated: