Cookie

September 02, 2022

브라우저 cookie 란

Cookie를 이해하기 위해선 HTTP의 특징을 아는 것이 선행되어야 한다.

간단하게 http 통신의 특징 2가지를 살펴보자

  1. Stateless (무상태성)

서버에서 클라이언트 정보를 유지 하지 않는다는 의미로,

서버는 클라이언트 정보를 저장하지 않기 때문에 모든 요청들이 독립적으로 처리된다.

같은 클라이언트에서 보낸 요청이라 할지라도 서버에선 새로히 인식하고 처리한다.

  1. Connectionless (비연결성)

클라이언트에서 서버로 요청을 보냈을 때 서버는 클라이언트에 응답을 보내고 연결을 끊는다.

(HTTP 1.1 부터 Connection 헤더를 keep-alive 로 설정하면 클라이언트와 서버가 연결을 유지한다.)

서버의 자원을 절약하기 위해 Stateless & Connectionless특징을 가진다.

클라이언트의 상태를 메모리에 저장하고 연결을 계속 유지하고 있을 때 서버의 자원을 계속 소모하게 되기 때문이다.

이러한 특징을 보완하기 위해서 Cookie & Seession을 사용한다.

Seession 개념 & Cookie과 비교는 → Session


Cookie

서버에서 응답을 할 때 사용자의 웹 브라우저에 전달하는 작은 데이터 조각이다.

  • 클라이언트 로컬스토리지에 키와 값의 형태로 저장된다.
  • 사용자의 웹 브라우저에서는 데이터 조각을 저장해 두었다가 서버에 재요청을 할 경우 쿠키 즉 저장된 데이터를 함께 전달한다.
  • HTTP의 Stateless(무상태성)를 지키기 위해서도 쿠키가 쓰이는데 쿠키에 저장된 데이터들로 동일한 브라우저에서 요청이 왔는지 아닌지를 판단하기 때문이다.

쿠키의 구성요소

이름 - 쿠키를 구별하기 위해 독립적인 이름을 사용

값 - 쿠키의 이름과 관련된 값

유효기간 - 쿠키의 유지시간을 설정

도메인 - 쿠키를 전송할 도메인

경로 - 쿠키 전송 요청 경로


쿠키 동작방식

cookie-1

위 그림을 참조하여 동작 방식을 설명해보자면

  1. 클라이언트가 서버에 요청(Request)을 보낸다.
  2. 서버에선 쿠키를 생성하여 HTTP헤더에 쿠키를 담아 클라이언트에 응답(Response)한다.
    1. Response Header에 Set-Cookie 속성을 사용하여 쿠키 설정
  3. 클라이언트는 쿠키를 저장하고 있다가 같은 요청을 보낼 때 HTTP헤더에 쿠키를 담아 요청한다.
  4. 서버에선 이 쿠키를 읽어 이전 상태 정보를 확인하고 정보를 변경할때는 쿠키를 업데이트한다.
  5. 이후 서버에선 업데이트된 쿠키를 담아 클라이언트에 응답을 보낸다.

쿠키 사용 예시

  • 웹사이트 로그인 할 때 아이디 비밀번호 저장 옵션
  • 장바구니 기능
  • 팝업창(24시간 동안 이 창을 보지 않음)
  • 자동 로그인

쿠키의 단점

  • 쿠키는 클라이언트의 로컬에 저장되기 때문에 정보를 수정할 수 있다.
  • 요청 정보를 중간에서 가로챌 수 있어 보안에 취약하다.

참조

https://velog.io/@mokyoungg/HTTP-쿠키Cookie

https://noahlogs.tistory.com/38

https://interconnection.tistory.com/74