Cookie

[이 글은 기존 github 블로그에서 2022.08.12에 작성된 글입니다.]

🍪 쿠키란?

사용자를 식별하고 세션을 유지하는 방식.
쿠키는 캐시와 충돌할 수 있기때문에 대부분 쿠키에 있는 내용을 캐싱하지 않는다.

마치 헨젤과 그레텔에서 자신들을 찾을 수 있는 단서로 쿠키 부스러기로 흔적을 남기는 것과 같아서 쿠키라는...소리가 있다. 그래서 사이트는 이 이야기처럼 쿠키에 담긴 사용자의 흔적을 사용할 수 있다.

 

쿠키 타입

  • 세션 쿠키: 사용자가 사이트를 탐색할 때, 관련한 설정과 선호 사항들을 저장하는 임시 쿠키. 사용자가 브라우저를 닫으면 삭제된다.
  • 지속 쿠키: 사용자가 주기적으로 방문하는 사이트에 대한 설정 정보나 로그인 이름을 유지하려고 사용. 디스크에 저장되어 브라우저를 닫거나 컴퓨터를 재시작하더라도 남아있다.

동작 방식

  1. 웹 서버는 처음 사용자에 대해서 아무것도 모르는 상태이지만 사용자가 다시 돌아왔을 때, 해당 사용자를 식별하기 위한 유일한 값을 쿠키에 할당한다. 쿠키는 어떤 정보든 포함할 수 있지만 서버가 사용자 추적 용도로 생성한 유일한 단순 식별 번호만 포함하기도 한다.
  2. 서버는 쿠키 값으로 데이터베이스에서 사용자의 정보(구매 내용, 주소, 검색이력)를 찾는데 사용할 수 있다. 많은 웹 서버가 정보를 쿠키에 유지하려고 한다.
  3. 브라우저는 쿠키 콘텐츠를 브라우저 쿠키 데이터베이스에 저장한다.
  4. 이후, 사용자가 같은 사이트를 방문하면 브라우저는 서버가 이 사용자에게 할당했던 쿠키를 헤더에 포함해 전송한다.

예시:브라우저에서 확인하기

  • Name: 쿠키 이름
  • Value: 쿠키 값
  • Domain: 쿠키의 도메인 (위 예시에서는 stackoverflow.com)
  • Path: 해당 경로에 속하는 페이지에만 쿠키를 전달한다
  • Expires/Max-Age: 쿠키 파기 시점. 쿠키 생명주기
  • Secure: 해당 쿠키를 SSL 커넥션일 경우에만 보낼지 여부

브라우저는 보통 각 사이트에 두 개 혹은 세 개의 쿠키만 보내고 쿠키를 생성한 서버에게만 그 쿠키에 담긴 정보를 전달한다.

  • 쿠키를 모두 전달하면 성능이 크게 저하된다.
  • 쿠키는 서버에 특화된 이름/값 쌍을 포함하고 있기 때문에 각자 필요로 하는 쿠키 이름/값 형태가 다르다.
  • 특정 사이트에서 제공한 정보를 신뢰하지 않는 사이트에서 가져갈 수 있어 잠재적인 개인정보 문제를 일으킬 수 있다.

광고

많은 웹 사이트가 광고를 붙이고 있다. 이 광고는 웹 사이트에서 직접 붙이는 것이 아니고 광고를 관리하는 협력 업체와 계약을 한것이다(예. GoogleAds) 이 광고들은 웹 사이트 자체의 일부인 것처럼 제작되고, 지속 쿠키를 만들어낸다. 예를 들어 티스토리 블로그에서 봤던 광고가 깃헙 호스팅 블로그에서 보이는 것은 브라우저가 앞서 만든 지속 쿠키를 광고사 서버로 전송하기 때문이다. 광고사는 여기에 referer 헤더를 접목하여 사용자 프로필과 웹 사이트 사용 습관, 검색 내용에 대한 방대한 데이터를 구축할 수 있다. 개인정보를 다루거나 사용자를 추적하는 기술은 잘못된 의도로 사용될 수 있기 때문에 항상 조심해야한다.세션 추적쿠키는 웹 사이트에 수차례 트랜잭션을 만들어내는 사용자를 추적하는 데 사용한다. 커머스 앱에서 장바구니, 조회했던 상품이 유지되는 것도 쿠키가 있기 때문이다.