쿠키 (Cookie)
쿠키(Cookie)에 대해 정리한 페이지입니다.
Tags
Cookie
개요
쿠키(Cookie)
에 대해 정리한 페이지입니다.
쿠키 (Cookie)
쿠키의 개념
쿠키(Cookie)
는 웹 브라우저에서 사용하는 저장 수단으로, key-value
쌍으로 데이터가 저장됩니다. 쿠키는 HTTP 요청 시 자동으로 헤더에 포함되어 전송되기 때문에 주로 인증 정보와 같이 서버와의 통신에 필요한 데이터를 저장합니다. 많은 용량의 쿠키가 저장되어 있을 경우 통신 과정에서 오버헤드가 발생할 수 있기 때문에 일반적으로 쿠키 한 개의 용량을 4KB로 정도로 제한하며, 도메인 하나당 저장할 수 있는 쿠키의 개수는 약 20개입니다. 또한, 쿠키는 Expires
혹은 Max-Age
속성을 통해 데이터 저장 시 만료 날짜를 지정할 수 있고, Path
속성을 통해 같은 도메인 내에서도 쿠키가 전송될 URL의 범위를 설정할 수 있다는 특징이 있습니다.
쿠키의 동작 원리
- 브라우저에서 서버로 HTTP 요청을 보냅니다.
서버에서 HTTP 응답 헤더의
Set-Cookie
로 쿠키를 전송하면 브라우저는 이를 저장합니다.1 2
HTTP/1.1 200 OK Set-Cookie: session_id=abc123; Expires=Sun, 13 Apr 2025 14:14:00 GMT; Secure; HttpOnly;
- 사용자가 동일 사이트를 재방문하면 브라우저는 HTTP 요청 헤더의
Cookie
로 서버에 쿠키를 자동 전송합니다. - 서버는 전송받은 쿠키를 활용하여 사용자를 식별하거나, 세션 관리, 또는 개인화된 응답을 제공합니다.
쿠키의 사용 예시
쿠키를 사용하는 예시는 다음과 같습니다.
세션 관리(Session Management)
로그인 상태, 장바구니 내용 등 사용자의 상태를 기억할 때 쿠키를 사용합니다.
개인화(Personalization)
사용자가 선택한 언어, 테마, 사용자 환경 설정 등을 저장하기 위해 쿠키를 사용합니다.
트래킹(Tracking)
웹 사이트 방문 기록, 사용자 행동 추적(Google Analytics 등), 사용자 맞춤형 광고를 위해 쿠키를 사용합니다.
쿠키의 종류
쿠키의 종류는 다음과 같습니다.
세션 쿠키(Session Cookie)
세션 쿠키는
Expires
와Max-Age
속성이 없는 쿠키로, 브라우저 메모리에 저장되며 브라우저 종료 시 자동 삭제됩니다. 로그인 세션이나 일시적인 상태 유지를 위해 사용됩니다.지속 쿠키(Persistent Cookie)
지속 쿠키는
Expires
속성에 명시된 날짜에 삭제되거나 또는Max-Age
속성으로 지정된 기간 동안 기기에 유지되는 쿠키입니다. 사용자의 환경 설정이나 방문 기록 저장에 주로 사용됩니다.퍼스트파티 쿠키(First-Party Cookie)
퍼스트파티 쿠키는 사용자가 방문 중인 웹 사이트에서 직접 생성한 쿠키로, 해당 도메인에서만 읽거나 수정할 수 있습니다.
서드파티 쿠키(Third-Party Cookie)
웹 사이트에 삽입된 광고나 외부 스크립트 등 다른 도메인에서 생성한 쿠키로, 주로 광고 추적에 사용됩니다. 최근 개인정보 보호를 위해 차단하는 브라우저가 늘어나고 있습니다.
쿠키의 속성
1
2
HTTP/1.1 200 OK
Set-Cookie: session_id=abc123; Domain=example.com; Path=/account; Max-Age=6000; Secure; HttpOnly; SameSite=Lax;
쿠키의 주요 속성은 다음과 같습니다.
Domain
1 2
HTTP/1.1 200 OK Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>;
쿠키가 어느 도메인에서 전송될 수 있는지를 제한합니다. 별도 설정이 없으면 기본적으로 쿠키가 생성된 서버의 도메인으로 설정됩니다. 도메인이 명시되면 하위 도메인에 한해 사용이 허용됩니다.
Path
1 2
HTTP/1.1 200 OK Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value>;
쿠키를 어느 URL 경로에서 전송할지를 정의합니다. 예를 들어,
Path=/docs
로 설정하면/docs
또는 그 하위 경로에서만 쿠키가 전송됩니다.Expires
/Max-Age
1 2
HTTP/1.1 200 OK Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>;
1 2
HTTP/1.1 200 OK Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<number>;
쿠키의 유효 기간을 정의합니다.
Expires
는 특정 시간과 날짜,Max-Age
는 쿠키 생성 시점부터의 유효 시간을 초 단위로 설정합니다.Expires
와Max-Age
를 둘 다 설정했을 경우,Max-Age
가 우선순위를 갖습니다.Info.
쿠키 만료 시점을 설정할 때, 만료 시점의 시간과 날짜는 서버의 시간이 아니라 쿠키가 저장되는 클라이언트의 시간을 기준으로 합니다.Secure
1 2
HTTP/1.1 200 OK Set-Cookie: <cookie-name>=<cookie-value>; Secure;
이 속성이 설정된 쿠키는 HTTPS 프로토콜 상에서 암호화된 요청일 경우에만 전송됩니다.
HttpOnly
1 2
HTTP/1.1 200 OK Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly;
이 속성이 설정된 쿠키는 JavaScript(Ex. document.cookie)를 통해 접근할 수 없습니다. 해당 쿠키는 서버에 전송하는 용도로만 사용할 수 있습니다.
XSS(Cross-Site Scripting)
공격을 방지하기 위해HttpOnly
속성을 사용합니다.SameSite
1 2
HTTP/1.1 200 OK Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Strict;
1 2
HTTP/1.1 200 OK Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Lax;
1 2
HTTP/1.1 200 OK Set-Cookie: <cookie-name>=<cookie-value>; SameSite=None; Secure;
쿠키가 크로스 사이트(Cross-Site) 요청과 함께 전송되는 것을 제한합니다. 이 속성은
CSRF(Cross-Site Request Forgery)
공격을 방지하기 위해 사용됩니다. 가능한 속성 값으로는 다음 3가지가 존재하며, 기본 값은SameSite=Lax
입니다.Info.
동일 사이트와 교차 사이트에 대해선 다음 링크를 참고하시길 바랍니다.
사이트 (Site)Strict
브라우저가 동일 사이트 요청에만 쿠키를 전송되도록 제한합니다.
SameSite=Strict
속성이 있는 쿠키는 다른 도메인 요청에서 전송되지 않습니다.Lax
기본적으로
Strict
와 동일하게 동작하나, 사용자가 링크를 클릭했을 때처럼 외부 사이트에서 원래 사이트로 이동할 때는 쿠키가 전송됩니다.<a href>
,<link>
,<form method=get>
에서는 쿠키가 전송됩니다. 쿠키에SameSite
속성을 지정하지 않은 경우SameSite=Lax
가 적용됩니다.None
모든 크로스 사이트 요청에 쿠키를 전송합니다. 이 값을 사용하는 경우, 반드시
Secure
속성이 설정되어야 합니다.