브라우저 쿠키 동작 이해 (Part 2)
Source: Dev.to
번역할 텍스트가 제공되지 않았습니다. 번역이 필요한 본문을 알려주시면 한국어로 번역해 드리겠습니다.
Introduction
파트 1에서는 쿠키가 무엇이며 왜 존재하는지에 대해 다루었습니다.
이번 두 번째 기사에서는 실제 개발에서 종종 혼란을 일으키는 주제에 초점을 맞춥니다: 브라우저가 쿠키를 어디에 저장하고 언제 실제로 전송하는지.
브라우저가 쿠키를 저장하는 위치
쿠키는 브라우저에 의해 자동으로 저장 및 관리됩니다. 정확한 저장 위치는 브라우저마다 다르지만 개념은 동일합니다.
- General: 로컬 SQLite 데이터베이스(예: Cookies 파일)에 저장됩니다. DevTools → Application > Cookies에서 확인할 수 있습니다.
- Safari (macOS / iOS): WebKit 내부에서 관리되며, 사용자에게 보이는 파일로는 접근하기 어려운 경우가 많습니다.
cookies.sqlite에 저장되며 DevTools의 Storage 탭에서 확인할 수 있습니다.
모든 경우에 개발자는 이러한 파일을 직접 다루지 않으며, 브라우저가 모든 작업을 처리합니다.
Source: …
쿠키가 전송되는 경우
쿠키는 모든 필수 조건이 충족될 때만 전송됩니다. 하나라도 조건이 충족되지 않으면 브라우저는 쿠키를 포함하지 않습니다.
| 조건 | 요구사항 |
|---|---|
| Domain | 요청 도메인이 쿠키의 Domain 속성과 일치 |
| Path | 요청 경로가 쿠키의 Path 속성과 일치 |
| Secure | Secure 플래그가 설정된 경우, 요청이 HTTPS를 사용 |
| SameSite | SameSite 조건이 만족 |
| 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로 쿠키 조작
- 로컬 개발 시 흔히 발생하는 함정
죄송합니다만, 번역을 진행하려면 실제 기사 본문 텍스트가 필요합니다.
위 링크의 내용을 그대로 복사해서 제공해 주시면, 해당 부분을 한국어로 번역해 드리겠습니다.