웹에서 사용자의 상태 정보 저장 및 유지를 위해 사용하는 것으로, HTTP의 특징이자 약점인 비연결성과 무상태성을 보완한다.
HTTP의 특징으로 요청과 응답이 완료 되면 연결을 끊는 Connectionless(비연결성)와 이전 상태 정보를 유지하지 않는 Stateless(무상태성)가 있다.
그러나 웹 사이트를 이용하다 보면 데이터가 유지되어야 하는 상황이 필연적으로 있기 마련이다.
이런 경우 상태 저장 및 유지를 위해 쿠키(Cookie)와 세션(Session)을 사용한다.
🍪 쿠키 Cookie
클라이언트(브라우저)에 저장되는 작은 데이터 파일로, Key-Value 쌍으로 이루어짐
특징
- 클라이언트(브라우저)에 저장
- 이름(Key), 값(Value), 만료일(저장기간), 경로 정보로 구성
- 클라이언트에 총 300개의 쿠키 저장 가능
- 하나의 도메인 당 20개의 쿠키 보유 가능
- 하나의 쿠키는 4KB(4096byte)까지 저장 가능
- 유효 시간이면 브라우저가 종료되어도 인증이 유지
- 별도의 요청없이 자동으로 Request Header에 쿠키를 실어 서버로 전송
동작 순서
- 클라이언트가 페이지를 요청
- 웹 서버에서 쿠키 생성
- 생성한 쿠키를 HTTP 헤더에 포함, 클라이언트에게 응답
- 클라이언트는 쿠키를 가지고 있다가 서버에 요청시 함께 전송
- 웹 사이트 재방문 시, 클라이언트 PC가 해당 쿠키를 보유하고 있다면 요청 페이지와 함께 쿠키 전송
⚙️ 세션 Session
일정 시간 동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술. 쿠키 기반으로 동작하나 클라이언트가 아닌 서버에 저장된다.
특징
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장
- 웹 서버에 저장되는 쿠키(세션 쿠키)
- 브라우저를 닫거나 서버에서 세션을 삭제했을 때만 제거가 되므로 쿠키보다 비교적 보안이 좋음
- 서버 용량이 허용하는 한에서 저장 데이터의 제한이 없음
- 각 클라이언트에 고유 세션 ID(Session ID)를 부여, 세션 ID를 통해 클라이언트를 구분하여 각 요구에 맞는 서비스를 제공
동작 순서
- 클라이언트가 페이지를 요청
- 서버는 클라이언트의 Request Header Cookie를 확인, 클라이언트 Session ID 를 확인
- Session ID가 존재하지 않을시 생성하여 클라이언트에게 응답
- 클라이언트는 서버로부터 받은 Session ID를 쿠키에 저장
- 클라이언트는 서버에 요청시 해당 쿠키 Session ID 값을 함께 서버에 전달
- 서버는 전달받은 Session ID로 세션에 있는 클라이언트 정보를 가지고, 요청을 처리한 후 응답
쿠키와 세션의 차이
| 쿠키 | 세션 |
|---|
| 저장 위치 | 클라이언트 | 서버 |
| 보안 | 변조 또는 유출의 위험 존재 | 쿠키에 비해 상대적으로 안전 |
| 생명 주기 | 만료날짜까지, 만료날짜 미설정시 브라우저 종료시까지 | 브라우저를 종료시까지, 명시적으로 세션 종료시까지 |
| 속도 | 빠름 | 느림 |
| 저장 형식 | Text | Object |
| 데이터 용량 | 쿠키 하나당 4KB | 서버의 디스크 용량에 따름 |
| 특이 사항 | 해당 도메인에 발송되는 모든 요청에 자동으로 실려 전송 | 각 브라우저 당 하나씩 세션 방을 가짐 |
참고:
쿠키(Cookie)와 세션(Session)의 차이 (+캐시(Cache))
세션 vs 쿠키 vs 캐시 차이점
쿠키(Cookie) & 세션(Session)
[Web] 웹 브라우저 쿠키(Cookie)와 세션(Session)의 개념
쿠키(Cookie)와 세션(Session)