🍪 쿠키 (Cookie)
◾ 사용자가 접속한 사이트의 서버에서 사용자 컴퓨터에 저장하는 데이터
📌 생성 과정
1️⃣ 클라이언트가 페이지 요청
2️⃣ 웹 서버가 쿠키 생성
3️⃣ 생성한 쿠키에 정보 담아 클라이언트에게 HTTP 화면과 같이 돌려줌
4️⃣ 받은 쿠키 클라이언트의 로컬 PC에 저장
5️⃣ 서버에 재요청 / 동일 사이트 재방문 시 요청과 쿠키 함께 전송
📌 특징
◾ 저장 정보
◽ 이름, 값, 만료일(저장 기간), 경로
◾ 사용 이유
◽ HTTP의 무상태성과 비연결성
ㄴ서버는 리소스를 아끼기 위해 클라이언트 상태를 가지고 있지 않고 클라이언트가 요청 시 모든 정보를 담아 보냄 / 클라이언트와 한 번 연결 후 연결을 종료함
ㄴ때문에 웹사이트는 사용자를 구별할 수 없고 사용자는 매번 번거로운 인증 절차를 진행해야 했음
ㄴ따라서 간단한 사용자 정보를 클라이언트 측에 저장하여 HTTP의 단점을 해
◾ 저장 용량
◽ 클라이언트 : 300개
◽ 하나의 도메인 : 20개
◽ 하나의 쿠키 : 4KB
📌 종류
◾ Session cookie
◽ 세션 동안만 저장되고 사라지는 쿠키
◾ Persistent cookie
◽ 하드 디스크에 저장되는 쿠키
◽ 웹 페이지 접속할 때마다 서버에 전송
◾ Secure cookie
◽ 암호화된 쿠키
◾ HTTP Only cookie
◽ 자바스크립트 같은 비HTTP API의 접근을 제한하는 쿠키
📌 사용 예시
◾ 자동 로그인
◽ 쿠키를 통해 로컬에 로그인 정보를 저장하고 서버에 해당 정보 전송해 사용자 인증
◾ 하루동안 보지 않기
◽ 쿠키에 만료일 설정해 보고싶지 않은 정보를 설정
◾ 최근 검색 리스트
◽ 쿠키에 최근 검색한 정보 저장해 보여줌
🖥 세션 (Session)
◾ 클라이언트와 서버 간의 연결 상태
◽ 클라이언트가 웹사이트에 접속해 해당 창을 닫기 전까지의 상태
📌 특징
◾ 저장 정보
◽ 쿠키 정보 + 각 클라이언트에 고유 세션 ID 부여
◾ 저장 용량
◽ 제한 없음
📌 동작 순서
1️⃣ 클라이언트가 페이지 요청
2️⃣ 웹 서버가 클라이언트의 Request-Header 필드 쿠키 확인, 클라이언트가 세션 ID를 전송했는지 확인
3️⃣ 세션 ID 존재하지 않을 시 세션 ID 생성해 클라이언트에게 전송
4️⃣ 받은 세션ID 클라이언트의 쿠키에 저장
5️⃣ 서버에 재요청 / 동일 사이트 재방문 시 요청과 쿠키 + 세션ID 함께 전송
6️⃣ 전달받은 세션ID로 세션에 있는 클라이언트 정보를 가지고 요청 처리 후 응답
📌 사용 예시
◾ 화면 이동 시 로그인 유지
📋 요약
|
쿠키(Cookie) |
세션(Session) |
저장 위치 |
클라이언트 로컬 PC |
웹 서버 |
저장 형식 |
text |
object |
사용 자원(리소스) |
클라이언트 리소스 |
서버 리소스 |
용량 제한 |
클라이언트당 300개 도메인당 20개 쿠키당 4KB |
없음 |
속도 |
빠름 |
느림 |
보안 |
취약 |
우수 |
만료 시점 |
저장 시 만료 시점 설정 가능 (디폴트 : 브라우저 종료 시) |
❓ 보안이 취약한 쿠키를 사용하는 이유
◾ 서버에 저장되는 세션을 사용하기에 서버 자원에 한계가 있고, 속도가 느려질 수 있기 때문에 자원 관리 면에서 쿠키와 세션을 적절한 요소에 병행 사용하여 서버 자원의 낭비를 방지하고 웹사이트 속도를 높일 수 있다.