업데이트됨 1개월 전
웹사이트에 로그인하고, 브라우저를 닫고, 다음 날 돌아왔을 때 여전히 로그인되어 있다면 — 그게 쿠키입니다. 장바구니가 지난주에 담아둔 물건을 기억하고 있다면 — 쿠키입니다. 광고가 어제 검색한 것을 알고 인터넷 전체를 따라다닌다면 — 그것도 쿠키입니다.
쿠키는 웹사이트가 여러분의 컴퓨터에 저장하는 작은 데이터 조각입니다. 브라우저는 모든 요청마다 자동으로 이 데이터를 함께 전송합니다. 이 단순한 메커니즘 덕분에 현대 웹은 끊김 없이 이어지는 경험처럼 느껴집니다.
쿠키가 해결하는 문제
HTTP는 잊도록 설계되었습니다. 모든 요청은 처음 보는 낯선 사람이 보내는 것처럼 도착합니다. 정적 페이지를 제공하는 데는 이것이 우아한 설계입니다 — 추적할 상태도 없고, 손상될 기억도 없습니다. 하지만 문제가 생깁니다. 어떻게 로그인 상태를 유지할까요? 장바구니는 어떻게 유지될까요? 5초 전에 여기 있던 사람이 바로 지금의 당신이라는 걸 웹사이트는 어떻게 알까요?
쿠키가 그 답입니다. 서버가 여러분의 컴퓨터에 메모를 남기면, 다음번에 브라우저가 그 메모를 서버에게 보여줍니다. 서버가 "이걸 기억해"라고 하면, 브라우저가 저장하고, 이후 모든 요청에 그 메모가 포함됩니다.
쿠키가 작동하는 방식
웹사이트를 방문하면, 서버는 응답에 Set-Cookie 헤더를 포함할 수 있습니다:
브라우저는 이것을 저장하고, 이후 요청에 자동으로 포함시킵니다:
이 과정은 눈에 보이지 않게 일어납니다. 여러분은 전혀 알 수 없습니다. 브라우저가 서버가 정한 규칙에 따라 저장과 전송을 처리합니다.
쿠키의 구조
**도메인과 경로(Path)**는 쿠키가 어디로 전송될지를 제어합니다. example.com에 설정된 쿠키는 example.com과 그 서브도메인으로 전송됩니다. Path는 특정 URL로 범위를 제한합니다.
만료일(Expires)과 Max-Age는 수명을 결정합니다. 이 값들이 없으면 브라우저를 닫을 때 쿠키가 사라집니다 — 세션 쿠키입니다. 값이 있으면 쿠키가 지속됩니다 — 만료되거나 직접 삭제할 때까지 브라우저를 재시작해도 살아남습니다.
Secure는 HTTPS 전용을 의미합니다. 암호화되지 않은 연결로는 절대 전송되지 않으므로 도중에 가로채일 위험이 없습니다.
HttpOnly는 JavaScript가 접근할 수 없음을 의미합니다. 쿠키는 HTTP 통신을 위해서만 존재하며, 페이지에서 실행되는 스크립트에는 보이지 않습니다.
SameSite는 크로스 사이트 동작을 제어합니다:
- Strict: 크로스 사이트 요청에는 절대 전송되지 않음
- Lax: 페이지 이동 시에는 전송되지만 임베드된 요청에는 전송되지 않음
- None: 어디서나 전송 (Secure 필요)
자사 쿠키 vs. 서드파티 쿠키
example.com에 있을 때 해당 사이트가 쿠키를 설정하면, 이는 자사(퍼스트파티) 쿠키입니다. 방문 중인 사이트가 여러분에 대한 무언가를 기억하는 것입니다.
example.com에 있지만 임베드된 추적기를 통해 analytics.com의 쿠키가 설정된다면, 이는 서드파티 쿠키입니다. 방문하지 않은 사이트가 여러분에 대한 무언가를 기억하는 것입니다.
이 구분은 매우 중요합니다. 자사 쿠키는 로그인과 장바구니를 가능하게 합니다. 서드파티 쿠키는 크로스 사이트 추적을 가능하게 합니다 — 웹 전체에서 여러분을 따라다니며, 방문한 모든 곳의 프로필을 만듭니다.
편의를 위한 기능으로 시작한 것이 감시를 위한 인프라가 되었습니다. 브라우저는 이제 서드파티 쿠키를 적극적으로 제한하고 있습니다 — 유용한 기억은 유지하면서 불쾌한 종류는 제거하려는 것입니다.
쿠키가 가능하게 하는 것들
세션: 한 번 로그인하면 서버가 세션을 생성하고 세션 ID 쿠키를 건네줍니다. 이후 모든 요청은 여전히 당신임을 증명합니다. 이것이 없으면 매 페이지 로드마다 로그인해야 합니다.
환경설정: 언어 선택, 다크 모드, 대시보드 레이아웃. 쿠키가 기억하므로 방문할 때마다 다시 설정할 필요가 없습니다.
장바구니: 물건을 담고, 브라우저를 닫고, 내일 다시 들어와도 장바구니가 유지됩니다. 쿠키가 서버에게 무엇을 보관할지 알려줬기 때문입니다.
분석: 어떤 페이지를 방문하는지, 얼마나 머무는지, 어디서 왔는지. 이는 사이트 개선에 도움이 되기도 하고, 추적 생태계에 정보를 제공하기도 합니다.
보안: 속성들이 중요한 이유
쿠키의 모든 보안 속성은 누군가가 그 속성 없이 악용하는 방법을 찾아냈기 때문에 존재합니다.
Secure 없이: 세션 쿠키가 암호화되지 않은 HTTP로 전송됩니다. 같은 WiFi 네트워크에 있는 누구든 읽을 수 있고, 세션을 탈취해 여러분 행세를 할 수 있습니다.
HttpOnly 없이: 크로스 사이트 스크립팅 공격이 document.cookie를 읽어 세션을 공격자에게 전송하는 JavaScript를 주입합니다. 당신은 로그아웃되고, 공격자가 당신으로 로그인됩니다.
SameSite 없이: 악의적인 사이트가 여러분의 은행에 요청을 임베드합니다. 브라우저가 친절하게 뱅킹 쿠키를 첨부합니다. 공격자가 여러분의 인증된 세션을 이용해 돈을 이체했습니다.
이 속성들은 형식적인 체크리스트가 아닙니다. 각각이 특정 공격 경로를 차단합니다.
개인정보 보호와 동의
서드파티 추적 쿠키는 규제를 촉발했습니다. EU의 GDPR과 캘리포니아의 CCPA는 웹사이트가 필수적이지 않은 쿠키를 설정하기 전에 동의를 구하도록 요구합니다.
모든 웹사이트에 이제 동의 배너가 표시되는 이유가 바로 이것입니다. 사이트 운영에 필수적인 쿠키는 동의가 필요 없습니다. 분석, 광고, 추적 — 이것들은 허락이 필요합니다.
법이 기술을 따라잡았습니다. 그 집행이 실질적인지는 또 다른 문제입니다.
한계
쿠키는 의도적으로 작습니다:
- 쿠키당 최대 약 4KB
- 도메인당 최소 50개
- 총 최소 3,000개
이런 제한이 있는 이유는 쿠키가 모든 요청과 함께 전송되기 때문입니다. 쿠키가 크면 브라우징이 느려집니다. 클라이언트 측에 상당한 데이터를 저장해야 한다면, 로컬 스토리지나 IndexedDB를 사용하세요.
웹의 기억과 망각
쿠키는 HTTP에 내재된 망각을 해결했습니다. 상태 없는 웹에 기억을 부여했습니다. 이는 인증, 개인화, 상거래 — 우리가 당연시하는 상호작용형 웹을 가능하게 했습니다.
하지만 기억은 침해적일 수 있습니다. 서드파티 쿠키는 기억하는 것을 감시로 바꿨습니다. 이제 브라우저는 웹에게 선택적으로 잊는 법을 다시 가르치고 있습니다 — 사이트 운영에 필요한 자사 쿠키의 기억은 유지하면서, 어디서나 여러분을 따라다니는 서드파티 추적은 차단하면서.
기술은 단순합니다: 자동으로 전송되는 작은 텍스트 파일. 하지만 사용성, 보안, 개인정보 보호에 대한 그 함의는 전혀 단순하지 않습니다.
쿠키에 관해 자주 묻는 질문
웹사이트가 저장한 쿠키를 직접 볼 수 있나요?
네. 대부분의 브라우저에서 개발자 도구(F12)를 열고, Application 또는 Storage 탭으로 이동한 다음, 사이드바에서 쿠키를 찾으세요. 현재 사이트의 모든 쿠키가 이름, 값, 도메인, 만료일, 보안 속성과 함께 표시됩니다.
브라우저를 닫으면 사라지는 쿠키가 있는 이유는 무엇인가요?
그것들은 세션 쿠키입니다 — Expires나 Max-Age 속성이 없습니다. 브라우저는 이를 임시적인 것으로 처리하여 세션이 끝날 때 삭제합니다. 지속 쿠키는 만료 시점을 지정하므로 브라우저를 재시작해도 살아남습니다.
모든 쿠키를 차단하면 웹사이트가 작동하지 않나요?
대부분 작동하지 않습니다. 로그인 유지와 같은 필수 기능에는 쿠키가 필요합니다. 쿠키 없이는 매 페이지 로드가 처음부터 시작됩니다 — 장바구니도, 세션도, 환경설정도 없습니다. 대부분의 사람들은 서드파티 쿠키는 차단하면서 자사 쿠키는 허용합니다.
광고에서 서드파티 쿠키를 대체하는 것은 무엇인가요?
여러 접근 방식이 등장하고 있습니다. Google의 Topics API는 크로스 사이트 추적 없이 브라우징 기록에서 관심사를 추론하고, 문맥 광고는 사용자 기록보다 페이지 내용을 기반으로 타겟팅하며, 퍼스트파티 데이터 전략은 사이트가 사용자와 직접적인 관계를 구축하도록 장려합니다. 감시 광고 모델은 천천히나마 해체되고 있습니다.
이 페이지가 도움이 되었나요?