브라우저 쿠키 동작 이해 (Part 2)

발행: (2025년 12월 29일 오전 05:51 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

번역할 텍스트가 제공되지 않았습니다. 번역이 필요한 본문을 알려주시면 한국어로 번역해 드리겠습니다.

Introduction

파트 1에서는 쿠키가 무엇이며 왜 존재하는지에 대해 다루었습니다.
이번 두 번째 기사에서는 실제 개발에서 종종 혼란을 일으키는 주제에 초점을 맞춥니다: 브라우저가 쿠키를 어디에 저장하고 언제 실제로 전송하는지.

브라우저가 쿠키를 저장하는 위치

쿠키는 브라우저에 의해 자동으로 저장 및 관리됩니다. 정확한 저장 위치는 브라우저마다 다르지만 개념은 동일합니다.

  • General: 로컬 SQLite 데이터베이스(예: Cookies 파일)에 저장됩니다. DevTools → Application > Cookies에서 확인할 수 있습니다.
  • Safari (macOS / iOS): WebKit 내부에서 관리되며, 사용자에게 보이는 파일로는 접근하기 어려운 경우가 많습니다. cookies.sqlite에 저장되며 DevTools의 Storage 탭에서 확인할 수 있습니다.

모든 경우에 개발자는 이러한 파일을 직접 다루지 않으며, 브라우저가 모든 작업을 처리합니다.

Source:

쿠키가 전송되는 경우

쿠키는 모든 필수 조건이 충족될 때만 전송됩니다. 하나라도 조건이 충족되지 않으면 브라우저는 쿠키를 포함하지 않습니다.

조건요구사항
Domain요청 도메인이 쿠키의 Domain 속성과 일치
Path요청 경로가 쿠키의 Path 속성과 일치
SecureSecure 플래그가 설정된 경우, 요청이 HTTPS를 사용
SameSiteSameSite 조건이 만족
Expiry쿠키가 만료되지 않음

도메인 속성

Set-Cookie: token=abc; Domain=example.com;
  • example.com, www.example.com 등에 전송됩니다.
  • Domain=www.example.com을 지정하면 쿠키는 해당 정확한 호스트에만 전송됩니다.
  • Domain 속성을 생략하면 쿠키는 호스트 전용 쿠키가 되어 발급 도메인에만 전송되고 서브도메인에는 전송되지 않습니다.

경로 속성

Set-Cookie: token=abc; Path=/app;
  • /app 이하의 요청에만 전송됩니다.
  • Path=/를 사용하면 도메인에 대한 모든 요청에 쿠키가 전송됩니다.

보안 속성

Secure 플래그가 설정된 쿠키는 HTTPS를 통해서만 전송됩니다.

https://example.com   → 전송됨
http://localhost      → 전송되지 않음

이는 로컬 개발에서 흔히 발생하는 함정입니다.

HttpOnly 속성

HttpOnly 쿠키는 JavaScript에서 접근할 수 없습니다.

document.cookie; // HttpOnly 쿠키는 표시되지 않음
  • HttpOnly 쿠키는 서버에서 Set-Cookie 헤더를 사용해 설정해야 합니다.
  • 이 속성은 특히 XSS 공격에 대한 방어 수단으로 보안에 매우 중요합니다.

SameSite 속성

동작
Lax (기본값)동일 사이트 요청 및 최상위 탐색 GET 요청에 전송
None교차 사이트 요청을 허용하지만 Secure 플래그가 필요
Strict동일 사이트 요청에 오직 전송

인증 흐름 및 외부 서비스와의 연동은 SameSite 규칙에 의해 쿠키가 차단되면서 종종 실패합니다. 최신 브라우저는 이러한 규칙을 엄격히 적용하며, SameSite=None은 반드시 Secure와 함께 사용해야 합니다.

Safari의 Intelligent Tracking Prevention (ITP)

  • 서드파티 쿠키에 큰 영향을 미칩니다: 쿠키가 매우 빠르게 삭제됩니다.
  • 사용자가 7일 이내에 다시 방문하지 않으면 퍼스트파티 쿠키도 삭제될 수 있습니다.
  • “로그인 세션이 갑자기 만료됨” 또는 외부 통합이 불안정해지는 현상이 발생합니다.
  • 일반적으로 사양을 따르지만 사파리의 프라이빗 브라우징 모드에서는 다를 수 있습니다.

개발 중 흔히 발생하는 원인

  • 동시에 존재하는 서로 다른 Path 값을 가진 쿠키.
  • 다른 Domain 설정으로 인해 생성된 다수의 쿠키.
  • 크로스‑사이트 요청에서 SameSite에 의해 차단된 쿠키.
  • 로컬 환경에서 HTTP를 통해 전송되지 않는 Secure 쿠키.
  • JavaScript에서 보이지 않아 혼란을 일으키는 HttpOnly 쿠키.
  • Safari의 ITP에 의해 자동 삭제되는 쿠키.

Summary

  • 쿠키는 브라우저 내부에 저장됩니다(대부분 SQLite 사용).
  • 전송은 Domain, Path, Secure, SameSite, HttpOnly 속성에 따라 결정됩니다.
  • SameSite는 반드시 이해해야 할 중요한 최신 속성입니다.
  • Safari의 ITP는 쿠키 동작에 큰 영향을 미칩니다.
  • 쿠키가 지속되거나 사라지는 문제는 보통 설정이나 브라우저 차이 때문입니다.

다음에 할 일

다음 기사에서는 실제 코드 예제를 통해 다음 내용을 살펴볼 예정입니다:

  • 서버 측(Java)에서 쿠키 발행
  • JavaScript로 쿠키 조작
  • 로컬 개발 시 흔히 발생하는 함정

Source: https://zenn.dev/bysontech/articles/68c9e472adb403

죄송합니다만, 번역을 진행하려면 실제 기사 본문 텍스트가 필요합니다.
위 링크의 내용을 그대로 복사해서 제공해 주시면, 해당 부분을 한국어로 번역해 드리겠습니다.

Back to Blog

관련 글

더 보기 »

HTTP 캐싱, 복습

번역하려는 텍스트를 제공해 주시겠어요? 텍스트를 알려주시면 한국어로 번역해 드리겠습니다.