❗예시 상황 :
로그인을 한 후에, 다른 요청을 보내면 http의 특성 상, 상태(로그인 상태)가 유지되지 않기 때문에, 로그인이 필요한 정보에 접근할 수 없는 문제가 발생한다.
서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각
사용자가 웹사이트를 방문할 경우, 해당 웹사이트의 서버를 통해 사용자의 컴퓨터에 설치(placed-on)되는 작은 기록 정보 파일이다.
쿠키를 기반으로 http에서 상태 정보를 유지할 수 있다.
1. 사용자가 웹사이트에 방문하면 해당 웹사이트의 서버는 쿠키를 사용자의 웹 브라우저에 전송한다.
2. 브라우저(클라이언트)는 쿠키를 로컬에 key-value의 데이터 형식으로 저장해둔다.
3. 쿠키를 저장해 놓았다가, 동일한 서버에 재 요청을 할 때, 저장된 쿠키를 함께 전송하게 된다.
4. 웹 서버가 응답을 할 때, 갱신할 쿠키가 있으면 갱신해서 브라우저에 쿠키를 전송한다.
📌요약: 웹페이지에 접속하면 요청한 웹 페이지를 받으면서 로컬에 쿠키를 저장하고, 클라이언트가 같은 서버에 다시 요청하면, 쿠키도 함께 전송된다.
상태가 없는(stateless) HTTP 프로토콜에서 상태 정보를 기억시켜 주기 때문에, 사용자의 로그인 상태를 유지할 수 있다.
- 세션 관리(Session management)
- 로그인, 아이디 자동 완성, 공지 하루 안보기, 팝업체크, 장바구니 등의 정보 관리
- 개인화(Personalization)
- 사용자 선호, 테마 등의 설정
- 트래킹(Tracking)
- 사용자 행동을 기록 및 분석
✔ 쿠키는 소프트웨어가 아니므로 프로그램처럼 실행될 수 없기 때문에 악성코드를 설치해 놓을 수는 없지만, 사용자의 행동을 추적하거나 쿠키를 훔쳐서 해당 사용자의 계정 접근 권한을 획득할 수도 있다.
클라이언트가 서버에 접속하면 서버가 특정 session id를 발급하고, 클라이언트는 발급받은 session id를 쿠키에 저장한다.
클라이언트가 다시 서버에 접속하면, 요청과 함께 쿠키(session id가 저장되어 있음)를 서버에 전달한다.
쿠키는 요청 때마다, 서버에 함께 전송되므로 서버에서 session id를 확인해서 알맞은 로직을 처리한다.
- 사용자의 정보가 저장되는 위치📌
- 쿠키: 로컬 → 서버의 자원을 사용하지 않는다.
- 세션: 서버 → 서버의 자원을 사용한다. 무분별하게 만들면 서버의 메모리가 감당할 수 없게 되며, 속도가 느려질 수 있다.