Cookie and Session
HTTP는 Stateless 프로토콜이기 때문에 클라이언트의 상태를 기억할 수 없다. 이를 보완하기 위한 방법이 바로 쿠키(Cookie)와 세션(Session)이다. 두 기술은 비슷해 보이지만, 저장 위치, 보안, 성능 측면에서 차이가 있으며, 상황에 따라 적절한 선택이 필요하다.
쿠키 (Cookie)
- 저장 위치: 클라이언트(브라우저)
- 사용 목적: 사용자의 상태를 클라이언트에 저장 (예: 자동 로그인, 테마 설정)
- 특징
- HTTP 요청 시마다 자동으로 서버에 전송됨
Set-Cookie헤더로 서버가 생성- 만료일 설정 가능 (
Expires,Max-Age) - 보안 취약점 있음: XSS, 탈취 등의 위험
- 보호 방법:
HttpOnly,Secure,SameSite속성
세션 (Session)
- 저장 위치: 서버
- 사용 목적: 로그인 상태 유지, 사용자 인증 등 민감한 정보 처리
- 특징
- 세션 ID만 클라이언트에 저장 (
Set-Cookie: sessionId=...) - 서버가 실제 데이터를 저장하고 관리
- 보안성이 높음 (데이터가 클라이언트에 노출되지 않음)
- 리소스 소비가 커서 사용자 수가 많으면 서버 부담 가능
- 세션 ID만 클라이언트에 저장 (
쿠키 vs 세션 비교
| 항목 | 쿠키 | 세션 |
|---|---|---|
| 저장 위치 | 클라이언트 | 서버 |
| 보안성 | 낮음 (노출 가능성 있음) | 높음 (서버에서만 접근 가능) |
| 용량 제한 | 약 4KB | 제한 없음 (서버 리소스 기반) |
| 유효 시간 | 지정 가능 | 브라우저 종료 시 or 타임아웃 |
| 서버 부담 | 낮음 | 높음 |
| 사용 예시 | 자동 로그인, 방문 기록 | 로그인 상태, 인증 유지 |
오늘의 인사이트
- 쿠키는 브라우저에 저장되므로 클라이언트 중심의 상태 관리에 적합.
- 세션은 서버가 상태를 관리하므로 보안이 중요한 정보에 적합.
- 실제 웹 애플리케이션에서는 둘을 조합해서 사용하는 경우가 많다. 예: 쿠키에 토큰을 저장하고, 서버는 토큰 검증을 통해 세션을 유지.
추가 학습 예정
express-session,cookie-parser등 Node.js에서의 쿠키/세션 사용법- JWT (JSON Web Token)와의 차이점
- SameSite 쿠키 정책과 CORS 관련 보안 이슈