쿠키(cookie)는 사용자를 식별하고 세션을 유지하는 방식 중에서 가장 널리 사용하는 방식입니다. 사용자가 특정 웹사이트에 방문할 때, 각 디바이스(local 환경) 에 저장되는 key-value쌍의 작은 데이터입니다.
쿠키에는 다양한 개인적인 데이터(이름, 위치, 이메일 주소, 선호하는 언어 등)를 저장할 수 있습니다.
HTTP 프로토콜의 특징 때문입니다. HTTP 프로토콜은 아래와 같은 특징이 있습니다.
keep-alive
옵션이 추가되어 Connection을 재활용할 수 있습니다.HTTP는 이런 두 가지 특성을 보완하기 위해 쿠키와 세션을 사용하게 되었습니다.
쿠키를 활용해 사용자를 구분하는 것은 매우 유용합니다. 다만 클라이언트가 쿠키를 임의로 수정할 수도 있고, 해커가 접근하기 쉬운 보안 취약점이 있습니다. 따라서 아이디나 비밀번호 같은 민감한 정보는 저장하지 않습니다.
보통 쿠키를 활용하는 목적은 이렇습니다.
쿠키는 일종의 방문자 이름표와 같습니다. 컨퍼런스 참석자에게 이름표 스티커를 붙여주듯이, 서버가 사용자에게 붙이는 것입니다. 웹사이트는 이런 붙여진 것들을 읽을 수 있습니다.
쿠키가 붙는 과정은 이렇습니다. 사용자가 처음 웹사이트에 방문하면 서버는 사용자에 대해 아무것도 알지 못합니다. 따라서 그 사용자를 식별하기 위해 유일한 값을 쿠키에 할당합니다. 쿠키는 임의의 이름 = 값 형태의 리스트를 가지고, Set-Cookie
같은 HTTP 응답 헤더에 작성되어 사용자에게 전달됩니다.
쿠키는 라이프타임에 따라 세션 쿠키(session cookie)와 지속 쿠키(persistent cookie)로 나눌 수 있습니다.
세션 쿠키는 사용자가 사이트 내에 머무르고 있을 때 브라우저 메모리에 저장하는 임시 쿠키입니다. 만료날짜를 지정하지 않은 쿠키이기 때문에, 브라우저를 닫으면 삭제됩니다.
세션 쿠키는 쿠키를 생성한 컴퓨터 이외에 다른 컴퓨터에는 전달할 수 없습니다. 서버가 무작위로 생성한 세션ID 를 생성하고, 이 세션 ID는 웹사이트 내에서 사용자의 행동을 추적합니다.
세션 쿠키는 사이트 요청 시에 새롭게 생성되므로 웹사이트가 요청될 때마다 새로운 사용자의 요청으로 취급합니다. (페이지가 달라질 때마다 새로운 요청)
사이트 내에서 페이지 간 이동을 할 때 사용자를 기억할 수 있게끔 합니다. 예를 들면 쇼핑몰의 장바구니가 있습니다. 로그인 하지 않은 상태에서 장바구니에 물건을 추가하여도 브라우저는 물건들을 기억하고 있습니다. 만약 세션 쿠키가 없다면 장바구니에 물건이 아무것도 없겠죠?
지속 쿠키는 만료날짜가 지정된 쿠키입니다. 개별적인 파일로 저장되어 브라우저가 종료되더라도 지속되는 쿠키입니다.
Expires
속성에 명시된 날짜에 만료되어 삭제되거나, Max-Age
속성에 명시된 기간 이후에 삭제됩니다.
대표적인 지속 쿠키로는 Google Analytics가 있습니다. (트래킹 목적)
사용자가 이전에 저장한 정보나 설정 등을 가져와 보다 나은 사용자 경험을 제공할 수 있습니다.
대개 자동 로그인 등에 사용됩니다.
https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies
https://jeong-pro.tistory.com/80
도서 <HTTP 완벽 가이드>