Cookie
기본 정보
- 명칭: Cookie
- 한글명: 쿠키
- 분류: 웹 데이터 저장 기술
- 저장 위치: 사용자 웹 브라우저
- 주요 용도: 로그인 유지, 사용자 설정 저장, 세션 관리
- 관련 기술: HTTP, Session, JWT, 웹 보안
개요
Cookie는 웹 브라우저에 저장되는 작은 데이터 조각이다.
웹사이트는 쿠키를 이용하여 사용자의 로그인 상태를 유지하거나, 장바구니 정보, 언어 설정, 자동 로그인, 사용자 환경설정 등을 저장할 수 있다.
쿠키는 브라우저가 서버에 요청(Request)을 보낼 때 자동으로 함께 전송되므로, 서버는 이를 통해 사용자를 식별하거나 이전 상태를 유지할 수 있다.
Cookie 구조
사용자
↓
브라우저
↓
Cookie 저장
↓
HTTP 요청
↓
Cookie 자동 전송
↓
웹 서버
동작 과정
사용자 로그인
↓
서버
↓
Set-Cookie
↓
브라우저 저장
↓
다음 요청
↓
Cookie 자동 전송
↓
로그인 유지
HTTP 응답 예시
서버가 쿠키를 생성한다.
HTTP/1.1 200 OK
Set-Cookie: session_id=abc123; Path=/; HttpOnly
HTTP 요청 예시
브라우저가 자동으로 쿠키를 전송한다.
GET /mypage HTTP/1.1
Cookie: session_id=abc123
주요 특징
- 브라우저에 저장
- 자동 전송
- 로그인 유지
- 사용자 설정 저장
- 만료 시간 설정 가능
- 도메인별 관리
- 보안 옵션 제공
Cookie 구성 요소
| 항목 | 설명 |
|---|---|
| Name | 쿠키 이름 |
| Value | 저장되는 값 |
| Domain | 적용 도메인 |
| Path | 적용 경로 |
| Expires | 만료 시간 |
| Max-Age | 유지 시간 |
| Secure | HTTPS에서만 전송 |
| HttpOnly | JavaScript 접근 차단 |
| SameSite | CSRF 공격 방지 |
Cookie 생성 (PHP)
setcookie(
"username",
"cloud",
time() + 3600
);
1시간 동안 유지된다.
Cookie 읽기 (PHP)
echo $_COOKIE["username"];
Cookie 삭제 (PHP)
setcookie(
"username",
"",
time() - 3600
);
JavaScript에서 생성
document.cookie = "theme=dark";
JavaScript에서 조회
console.log(document.cookie);
만료 시간 지정
document.cookie =
"theme=dark; max-age=3600";
로그인 과정
로그인
↓
Session 생성
↓
Session ID
↓
Cookie 저장
↓
브라우저
↓
다음 요청
↓
Session 조회
일반적으로 로그인 정보 자체를 저장하는 것이 아니라 세션 ID를 저장한다.
Cookie와 Session
| Cookie | Session |
|---|---|
| 브라우저 저장 | 서버 저장 |
| 용량 제한 있음 | 서버 메모리 사용 |
| 클라이언트 관리 | 서버 관리 |
| 변조 가능성 존재 | 상대적으로 안전 |
실무에서는 Session ID를 Cookie에 저장하는 방식이 가장 많이 사용된다.
Cookie와 JWT
| Cookie | JWT |
|---|---|
| 브라우저 저장 | 브라우저 또는 앱 저장 |
| 서버와 함께 사용 | 토큰 기반 인증 |
| 자동 전송 | 직접 Authorization 헤더에 포함하는 경우가 많음 |
| 세션 인증 | API 인증 |
Cookie와 Local Storage
| Cookie | Local Storage |
|---|---|
| 자동 전송 | 자동 전송 안 됨 |
| 용량 약 4KB | 약 5~10MB |
| 만료 시간 설정 가능 | 직접 삭제 전까지 유지 |
| 서버 통신용 | 클라이언트 데이터 저장 |
보안 옵션
HttpOnly
Set-Cookie:
session=abc;
HttpOnly
JavaScript에서 접근할 수 없도록 설정한다.
Secure
Set-Cookie:
session=abc;
Secure
HTTPS에서만 전송된다.
SameSite
SameSite=Lax
CSRF 공격을 방지하는 데 사용된다.
대표 값
- Strict
- Lax
- None
장점
- 로그인 유지
- 사용자 설정 저장
- 자동 전송
- 서버에서 쉽게 사용 가능
- 대부분의 브라우저 지원
단점
- 용량 제한(약 4KB)
- 클라이언트 저장
- 보안 설정이 중요
- 너무 많은 쿠키는 요청 크기를 증가시킴
대표 활용 분야
- 로그인 유지
- 자동 로그인
- 장바구니
- 다국어 설정
- 다크모드 저장
- 최근 방문 기록
- 사용자 환경설정
- 방문자 추적
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
- 로그인 정보 대신 Session ID 저장
- 민감한 데이터는 Cookie에 저장하지 않기
- HttpOnly 활성화
- Secure 옵션 사용
- SameSite 설정 적용
- HTTPS 사용
- 만료 시간 관리
- 필요한 최소 데이터만 저장
- 쿠키 암호화 검토
- 개인정보 저장 금지
Cookie와 함께 사용하는 기술
대표 활용 사례
- 로그인 유지
- 쇼핑몰 장바구니
- 관리자 페이지 인증
- 다크 모드 설정
- 언어 설정
- 사용자 환경설정 저장
- 방문자 통계
- 인증 토큰 관리
관련 문서
출처
- MDN Web Docs - HTTP Cookies
- RFC 6265 HTTP State Management Mechanism