HTTP 쿠키(Cookie)란?

Jungee·2022년 10월 22일
0

WEB

목록 보기
1/1
post-thumbnail

목차

  1. 쿠키(Cookie)란
  2. 쿠키를 사용하는 이유
  3. 쿠키 동작 방식
  4. 쿠키 구성 요소
  5. 쿠키의 단점


쿠키(Cookie)란

클라이언트가 어떠한 웹사이트를 방문할 경우, 웹서버가 웹 브라우저에게 보내어 저장한 후, 서버의 부가적인 요청이 있을 때 다시 서버로 보내주는 작은 기록 정보 파일(Key-Value 형식의 문자열)이다.

웹사이트는 쿠키를 통해 접속자의 장치를 인식하고, 접속자의 설정과 과거 이용내역에 대한 일부 데이터를 사용자의 브라우저에 저장하여 사용자의 고유 정보 식별이 가능하다. 이를 통해 사용자가 웹 사이트의 모드(라이트 모드, 다크 모드), 언어, 로그인 했을때 다음에 사이트에 재방문 시에도 설정이 그대로 유지될 수 있다.또한 쿠키에 담겨있는 사용자의 설정과 과거 이용내역을 통해 사용자의 행동과 패턴을 분석하여 트래킹 할 수 있다.

일반적으로 쿠키는 만료일이 있다. 예를 들어, 브라우저를 닫는 경우 자동으로 삭제되는 쿠키(세션 쿠키)도 있으며, 일부는 수동으로 삭제되기 전까지 남아있는 등 더 오랜기간 동안 컴퓨터에 저장되는 쿠키(지속적 쿠키)도 있다.

클라이언트는 최대 300까지 쿠키를 가질 수 있으며, 하나의 사이트 당 최대 20개, 하나의 쿠키 당 최대 4KB까지 저장할 수 있다.


쿠키를 사용하는 이유

HTTP 프로토콜은 비연결성무상태의 특징이 있다. 비연결성이란 클라이언트가 서버에 요청을 하면 서버는 응답하게 된다. 이렇게 한번의 요청과 응답으로 서버는 클라이언트에 모든 정보를 담아 보내고 서로의 접속을 끊게 된다는 특징이다. 무상태란 접속을 끊는 순간 서버와 클라이언트의 통신이 끊기고 상태정보를 유지하지 않는다는 특징이다.

이러한 HTTP의 특징은 리소스를 줄일 수 있다는 장점이 있지만 사용자의 정보를 저장할 수 없기 때문에 웹사이트는 사용자를 구별할 수 없고 사용자는 매번 번거로운 인증 절차를 진행해야 했다. 그에 비해 쿠키는 간단한 사용자의 정보를 기억할 수 있는 수단으로, HTTP의 단점을 보완할 수 있게 되었다.


쿠키 동작 방식

  1. 클라이언트가 서버에 어떠한 요청을 보낸다.
  2. 서버는 요청한 정보를 응답 헤더의 Set-Cookie에 담아 응답한다.
  3. 서버로부터 받은 쿠키를 웹 브라우저 내부의 쿠키저장소에 저장한다.
  4. 이후 서버에 요청을 보낼 경우, 저장된 쿠키를 요청 헤더에 쿠키를 담아 보낸다.
  5. 서버는 모든 요청에 대해 쿠키를 통해 사용자를 식별하고, 업데이트할 정보가 있다면 해당 쿠키를 요청한 정보와 함께 돌려보낸다.

쿠키 구성 요소

쿠키 구성 요소는 개발자 도구를 통해 쿠키를 확인 할 수 있다. 사진을 보면 쿠키를 구성하고 있는 요소들을 확인 할 수 있다. 각 항목의 뜻하는 것은 다음과 같다.

  • 이름(Name) : 각각의 쿠키의 이름
  • 값(Value) : 쿠키의 내용 (대부분의 경우 보안처리를 한다)
  • 도메인(Domain) : 쿠키가 전송되게 될 호스트를 명시하고, 만약 명시되지 않았다면 현재 문서 위치의 호스트을 기본값으로 갖는다.
  • 경로(path) : 쿠키 Header를 전송할 요청 경로
  • 유효시간(Expires / Max-Age) : 유지시간을 가지고 있는 쿠키의 유지시간
  • 크기(Size) : 쿠키의 크기
  • Secure : HTTP 프로토콜 상 암호화된 요청일 경우 전송
  • HttpOnly : Cross-site 스크립트 공격을 방지한다. JavaScript의 document.cookie API 접근 불가
  • SameSite : 쿠키가 Cross-site 요청과 함께 전송되지 않음을 요구하게 만들어 위조 공격에 대한 보호 방법을 제공한다.

쿠키의 단점

  1. 보안에 취약 : 요청 시 쿠키의 값을 그대로 보내기 때문에 쉽게 조작하거나 가로챌 수 있다.
  2. 작은 용량 : 사이트 당 20개 총 300개가 최대이며 하나의 쿠키는 최대 4KB를 넘을 수 없다.
  3. 웹 브라우저마다 지원 형태가 달라 브라우저간의 공유가 불가능하다.
  4. 네트워크 부하 : 쿠키의 정보는 요청 시 항상 서버에 전송되기 때문에 쿠키의 크기가 클 경우 네트워크의 부하가 커진다.
  5. 사용자가 쿠키의 사용을 거부할 경우 사용 불가능하다.

참고
https://inpa.tistory.com/entry/WEB-📚-JWTjson-web-token-란-💯-정리
https://kobrekim.com/footer-ko-kr/cookie-policy-ko-kr/what-are-cookies-and-why-we-use-them-ko-kr/
https://medium.com/@ddinggu/cookie란-a650c6d2803e
https://velog.io/@qodlstjd12/쿠키란-무엇인가
https://fomaios.tistory.com/entry/Network-쿠키Cookie란-What-is-a-Cookie
https://lovefor-you.tistory.com/247

profile
프론트엔드 개발자 유정화입니다 :)

0개의 댓글