Cookie
기본 정보
- 명칭: Cookie
- 한글명: 쿠키
- 분류: 브라우저 데이터 저장 기술
- 주요 용도: 사용자 정보 저장 및 상태 유지
- 관련 주제: #Cookie #HTTP #Session #JWT #보안
개요
Cookie는 웹 서버가 사용자의 브라우저에 저장하는 작은 데이터 조각이다.
웹은 기본적으로 Stateless(무상태) 프로토콜인 HTTP를 사용하기 때문에 사용자를 기억하지 못한다. 이를 보완하기 위해 Cookie를 사용하여 로그인 유지, 사용자 설정 저장, 장바구니 정보 유지 등의 기능을 구현한다.
Cookie 자체는 클라이언트(브라우저)에 저장되며, 서버는 요청 시 함께 전달받아 사용자를 식별하거나 필요한 정보를 처리한다.
Cookie 구조
사용자
↓
브라우저
↓
Cookie 저장
↓
HTTP 요청
↓
Cookie 자동 전송
↓
웹 서버
동작 과정
웹사이트 접속
↓
Server
↓
Set-Cookie
↓
브라우저 저장
↓
다음 요청
↓
Cookie 자동 포함
↓
Server 처리
HTTP Header 예시
서버 응답
Set-Cookie:
user=cloud;
Path=/;
HttpOnly
브라우저 요청
Cookie:
user=cloud
브라우저가 자동으로 Cookie를 포함하여 전송한다.
Cookie 구성 요소
| 속성 | 설명 |
|---|---|
| Name | 쿠키 이름 |
| Value | 저장 값 |
| Expires | 만료 시간 |
| Max-Age | 유지 시간 |
| Path | 적용 경로 |
| Domain | 적용 도메인 |
| Secure | HTTPS 전용 |
| HttpOnly | JavaScript 접근 차단 |
| SameSite | CSRF 방지 설정 |
PHP Cookie 생성
setcookie(
"user",
"cloud",
time()+3600
);
1시간 동안 유지된다.
PHP Cookie 조회
echo
$_COOKIE['user'];
PHP Cookie 삭제
setcookie("user","",time()-3600);
만료 시간을 과거로 설정하여 삭제한다.
JavaScript 생성
document.cookie ="user=cloud";
JavaScript 조회
console.log(document.cookie);
HttpOnly 쿠키는 JavaScript에서 접근할 수 없다.
Session Cookie
브라우저 종료 시 삭제된다.
Browser 종료
↓
Cookie 삭제
Persistent Cookie
만료 시간까지 유지된다.
Expires 2030-01-01
자동 로그인 등에 사용된다.
HttpOnly
Set-Cookie:
token=abc;
HttpOnly
JavaScript 접근을 차단하여 XSS 공격 위험을 줄인다.
Secure
Set-Cookie:
token=abc;
Secure
HTTPS 연결에서만 전송된다.
SameSite
Strict
동일 사이트에서만 전송
SameSite=Strict
Lax
일반적인 웹사이트에서 가장 많이 사용된다.
SameSite=Lax
None
크로스 사이트 전송 허용
SameSite=None;
Secure
HTTPS와 함께 사용해야 한다.
Cookie와 Session 관계
Browser
↓
Cookie
(Session ID)
↓
Server
↓
Session Data
Cookie에는 Session ID만 저장되고 실제 데이터는 서버에 저장되는 경우가 많다.
Cookie와 JWT 관계
Browser
↓
HttpOnly Cookie
↓
JWT
↓
API 요청
JWT를 HttpOnly Cookie에 저장하여 사용하는 방식도 널리 활용된다.
Cookie 장점
- 사용이 간단함
- 브라우저 자동 관리
- 로그인 유지 가능
- 사용자 설정 저장 가능
- 서버 부담 감소
Cookie 단점
- 클라이언트에 저장됨
- 용량 제한(약 4KB)
- 변조 가능성 존재
- 민감한 정보 저장 부적합
보안 위험
XSS
JavaScript를 통해 Cookie 탈취 가능
예방
- HttpOnly
- CSP 적용
CSRF
사용자의 Cookie를 이용한 위조 요청
예방
- SameSite 설정
- CSRF Token 사용
Session Hijacking
Session Cookie 탈취 공격
예방
- HTTPS
- Secure Cookie
- Session 재생성
- 짧은 만료 시간
Cookie 활용 사례
- 로그인 유지
- 자동 로그인
- 장바구니
- 언어 설정
- 다크모드 설정
- 최근 본 상품
- 팝업 하루 동안 보지 않기
- 사용자 환경 설정
Cookie와 LocalStorage 비교
| Cookie | LocalStorage |
|---|---|
| 자동 전송 | 자동 전송 안 함 |
| 약 4KB 제한 | 약 5~10MB |
| HttpOnly 지원 | 지원 안 함 |
| 서버 인증에 적합 | 클라이언트 데이터 저장에 적합 |
| 만료 시간 설정 가능 | 직접 삭제 전까지 유지 |
Cookie와 Session 비교
| Cookie | Session |
|---|---|
| 브라우저 저장 | 서버 저장 |
| 용량 제한 있음 | 서버 자원 사용 |
| 속도 빠름 | 보안 우수 |
| 설정 저장에 적합 | 로그인 인증에 적합 |
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
- 민감한 정보는 Cookie에 직접 저장하지 않기
- 인증 정보는 HttpOnly Cookie 사용
- HTTPS 환경에서는 Secure 옵션 활성화
- SameSite=Lax 또는 Strict 적용
- 만료 시간을 명확하게 설정
- JWT 저장 시 HttpOnly Cookie 사용 고려
- 로그인 시 Session ID 재생성
- XSS 및 CSRF 방어 적용
- Cookie 최소 개수 유지
- 개인정보는 암호화 또는 서버 저장 방식 사용
Cookie와 함께 사용하는 기술
대표 활용 사례
- 그누보드 자동 로그인
- 워드프레스 로그인 유지
- 쇼핑몰 장바구니
- ERP 사용자 설정
- SaaS 로그인
- 관리자(Admin) 페이지
- 다국어 설정
- 테마(다크모드) 저장
관련 문서
출처
- MDN Web Docs - HTTP Cookies
- RFC 6265 - HTTP State Management Mechanism
- OWASP Cookie Security Guide