Django PreCourse 3-1) Session & Cookie

Turtle·2023년 12월 20일
0
post-thumbnail

📌HTTP 특성

  • HTTP인터넷 상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다.
    클라이언트가 서버에서 요청을 보내면 서버는 응답을 보냄으로써 데이터를 교환한다.
  • HTTP비연결성무상태성이라는 특징을 가지고 있다.
  • HTTP는 요청 처리 후 연결을 끊어버리기 때문에 클라이언트의 상태 정보 및 현재 통신 상태가 남아있지 않다.
  • 비연결성의 장점은 서버의 자원 낭비를 줄일 수 있다는 것이다. 만약 다수의 클라이언트와 연결을 유지한다면 자원 낭비가 심해질 것이다.
  • 비연결성은 클라이언트를 식별할 수 없다는 단점이 존재한다. 로그인을 하더라도 다음 요청에서 해당 클라이언트를 기억하지 못해서 무한 로그인을 해야할 것이다.
  • 이와 같은 문제점을 해결하기 위해 CookieSession이라는 기술이 존재하는데 이 둘의 정의는 무엇이고 차이점은 무엇인지 알아보자.

📌쿠키(Cookie)

  • 쿠키(Cookie)란 클라이언트가 어떤 웹 사이트를 방문한 경우, 그 사이트가 사용되고 있는 서버를 통해 클라이언트의 브라우저에 설치되는 작은 파일 기록을 말한다.

  • 서버는 클라이언트의 로그인 요청에 대한 응답을 작성할 때, 클라이언트 측에 저장하고 싶은 정보를 응답 헤더의 Set-Cookie에 담는다.(쿠키는 Key-Value 형식의 문자열) 이후 해당 클라이언트는 요청을 보낼 때마다 매번 저장된 쿠키를 요청 헤더의 Cookie에 담아 보낸다. 서버는 쿠키에 담긴 정보를 바탕으로 해당 요청의 클라이언트가 누군지 식별할 수 있다.

  • 쿠키의 저장 위치 : 클라이언트

  • 쿠키의 처리 주체 : 서버/클라이언트(서버에서도 쿠키에 저장할 값을 설정할 수 있음)

  • 쿠키 제한 : 쿠키 당 4kb, 도메인 당 20개까지)

  • 쿠키 보안 : 비교적 낮음

  • 쿠키 유효기간 : 데이터 형식에 유효기간을 같이 저장(설정된 유효기간이 지나면 클라이언트에서 파기, 유효기간과 무관하게 직접 파기도 가능)

📌세션(Session)

  • 세션(Session)은 비밀번호 등 클라이언트의 인증 정보를 쿠키가 아닌 서버 측에 저장하고 관리한다.

  • 서버는 클라이언트의 로그인 요청에 대한 응답을 작성할 때, 인증 정보는 서버에 저장하고 클라이언트의 식별자인 JSESSIONID를 쿠키에 담는다. 이후 클라이언트는 요청을 보낼 때마다 JSESSIONID쿠키를 함께 보낸다. 그리하면 서버는 JSESSIONID의 유효성을 판별해 클라이언트를 식별한다.

  • 세션의 저장 위치 : 서버

  • 세션의 처리 주체 : 서버

  • 세션 제한 : 명시적인 용량 제한 없음

  • 세션 보안 : 비교적 높음

  • 세션 유효기간 : 데이터 형식엔 유효기간 없음(서버에서 원하는 시점에 파기)

📌세션 기반 인증의 장단점

장점

  • 서버가 클라이언트의 웹 브라우저에 의존하지 않아도 된다.
  • 쿠키를 포함한 요청이 외부에 노출되어도 세션ID 자체는 유의미한 개인 정보를 담지 않는다.
  • 각 사용자마다 고유한 세션ID가 발급되기 때문에 요청이 들어올 때마다 회원 정보를 확인(로그인)할 필요가 없다.

단점

  • 해커가 세션ID를 중간에 탈취하여 클라이언트인 척 위장할 수 있다.
  • 서버에서 세션 저장소를 사용하기 때문에 요청이 많아지면 서버에 부하가 발생한다.

0개의 댓글