쿠키와 세션의 5가지 핵심 차이점, 개발자라면 3분 안에 마스터!
📋 목차
1. HTTP 통신의 한계와 상태 유지의 필요성 🤔
웹에서 사용하는 HTTP 프로토콜은 기본적으로 **'상태가 없는(Stateless)'** 특성을 가집니다. 즉, 서버는 클라이언트가 이전에 어떤 요청을 보냈는지 기억하지 못합니다. 쇼핑몰에서 상품을 장바구니에 담고 다른 페이지로 이동했을 때, 서버가 "이 손님이 방금 그 상품을 담았지"라고 기억하지 못한다면 장바구니는 계속 비어있게 될 겁니다.
이러한 불편함을 해결하고, 사용자의 로그인 상태, 장바구니 정보 등을 기억하기 위해 등장한 기술이 바로 **쿠키와 세션**입니다. 두 기술은 웹의 '기억력'을 담당하는 핵심적인 역할을 합니다.
2. 클라이언트의 작은 보관함: 쿠키(Cookie) 🍪
쿠키는 **클라이언트(사용자의 웹 브라우저)에 저장**되는 작은 텍스트 파일입니다. 서버가 사용자의 브라우저에 "이 정보를 잠시 가지고 있어 줘"라고 보내면, 브라우저는 이 쿠키를 저장했다가 다음 요청 시 서버에 함께 보내 사용자를 식별하게 됩니다.
- 저장 위치: 클라이언트 (사용자 컴퓨터의 웹 브라우저)
- 주요 특징: ID, 이름, 방문 기록 등 만료일이 있는 작은 데이터를 저장. 사용자가 브라우저 설정을 통해 삭제 가능.
- 예시: "오늘 하루 이 팝업 보지 않기", "아이디 저장" 기능
1. 사용자가 웹사이트 방문
2. 서버가 사용자 정보(예: ID)를 담은 쿠키를 생성하여 응답 헤더에 담아 전송
3. 브라우저는 쿠키를 저장
4. 사용자가 같은 웹사이트에 다시 요청을 보낼 때, 브라우저는 저장된 쿠키를 요청 헤더에 담아 함께 전송
5. 서버는 쿠키를 읽고 사용자를 식별
3. 서버의 비밀 저장소: 세션(Session) 📁
세션은 쿠키와 달리 **서버에 정보를 저장**하는 방식입니다. 서버는 각 사용자를 구별하기 위해 고유한 **세션 ID**를 생성하고, 이 ID만을 쿠키를 통해 클라이언트에게 전달합니다. 클라이언트는 요청할 때마다 이 세션 ID를 서버에 보내고, 서버는 ID를 확인하여 해당 사용자의 정보를 찾아 응답합니다.
- 저장 위치: 서버 (웹 서버 메모리 또는 데이터베이스)
- 주요 특징: 로그인 정보 등 민감하고 중요한 데이터를 서버에서 관리. 쿠키에는 식별자인 세션 ID만 저장.
- 예시: 로그인 상태 유지, 장바구니 정보 관리
1. 사용자가 로그인 등 상태 정보가 필요한 요청 전송
2. 서버는 고유한 세션 ID를 생성하고, 사용자 정보를 해당 ID와 함께 서버에 저장
3. 서버는 생성된 세션 ID를 쿠키에 담아 클라이언트에게 전송
4. 클라이언트는 이후 요청 시 세션 ID가 담긴 쿠키를 함께 전송
5. 서버는 세션 ID를 확인하고 저장된 사용자 정보를 참조하여 응답
4. 쿠키와 세션의 결정적 차이점 (핵심 비교) 📊
두 기술의 가장 핵심적인 차이점을 표로 정리하면 다음과 같습니다.
| 구분 | 쿠키 (Cookie) | 세션 (Session) |
|---|---|---|
| 저장 위치 | 클라이언트 (웹 브라우저) | 서버 |
| 보안 | 상대적으로 취약 (탈취, 변조 가능) | 상대적으로 안전 (서버에 저장) |
| 생명 주기 | 브라우저 종료와 무관 (만료일 지정) | 브라우저 종료 시 삭제 (기본값) |
| 속도 | 빠름 (서버 조회 불필요) | 상대적으로 느림 (서버 조회 필요) |
| 서버 부하 | 거의 없음 | 사용자 많을수록 부하 증가 |
5. 언제 무엇을 사용해야 할까? (사용 사례) 🎯
두 기술의 장단점이 명확하므로, 상황에 맞게 적절히 사용하는 것이 중요합니다.
🍪 쿠키 사용 사례
보안상 중요하지 않으면서, 사용자 편의를 위해 유지되어야 하는 정보에 주로 사용됩니다.
예: 아이디 저장, 오늘 하루 팝업 보지 않기, 최근 본 상품 목록
📁 세션 사용 사례
보안이 중요하고, 서버에서 관리해야 하는 사용자 정보에 사용됩니다.
예: 로그인 상태 유지, 장바구니 정보, 결제 정보 등
쿠키 vs 세션 핵심 요약
자주 묻는 질문 ❓
이제 쿠키와 세션의 차이점이 명확하게 정리되셨나요? 두 기술의 원리를 정확히 이해하고 상황에 맞게 사용하는 것이 안정적인 웹 서비스를 만드는 첫걸음입니다. 😊

댓글
댓글 쓰기