Cookie를 이해하기 위해선 HTTP의 특징을 아는 것이 선행되어야 한다.
간단하게 http 통신의 특징 2가지를 살펴보자
- Stateless (무상태성)
서버에서 클라이언트 정보를 유지 하지 않는다는 의미로,
서버는 클라이언트 정보를 저장하지 않기 때문에 모든 요청들이 독립적으로 처리된다.
같은 클라이언트에서 보낸 요청이라 할지라도 서버에선 새로히 인식하고 처리한다.
- Connectionless (비연결성)
클라이언트에서 서버로 요청을 보냈을 때 서버는 클라이언트에 응답을 보내고 연결을 끊는다.
(HTTP 1.1 부터 Connection 헤더를 keep-alive 로 설정하면 클라이언트와 서버가 연결을 유지한다.)
서버의 자원을 절약하기 위해 Stateless & Connectionless특징을 가진다.
클라이언트의 상태를 메모리에 저장하고 연결을 계속 유지하고 있을 때 서버의 자원을 계속 소모하게 되기 때문이다.
이러한 특징을 보완하기 위해서 Cookie & Seession을 사용한다.
Seession 개념 & Cookie과 비교는 → Session
Cookie
서버에서 응답을 할 때 사용자의 웹 브라우저에 전달하는 작은 데이터 조각이다.
- 클라이언트 로컬스토리지에 키와 값의 형태로 저장된다.
- 사용자의 웹 브라우저에서는 데이터 조각을 저장해 두었다가 서버에 재요청을 할 경우 쿠키 즉 저장된 데이터를 함께 전달한다.
- HTTP의 Stateless(무상태성)를 지키기 위해서도 쿠키가 쓰이는데 쿠키에 저장된 데이터들로 동일한 브라우저에서 요청이 왔는지 아닌지를 판단하기 때문이다.
쿠키의 구성요소
이름 - 쿠키를 구별하기 위해 독립적인 이름을 사용
값 - 쿠키의 이름과 관련된 값
유효기간 - 쿠키의 유지시간을 설정
도메인 - 쿠키를 전송할 도메인
경로 - 쿠키 전송 요청 경로
쿠키 동작방식
위 그림을 참조하여 동작 방식을 설명해보자면
- 클라이언트가 서버에 요청(Request)을 보낸다.
- 서버에선 쿠키를 생성하여 HTTP헤더에 쿠키를 담아 클라이언트에 응답(Response)한다.
- Response Header에 Set-Cookie 속성을 사용하여 쿠키 설정
- 클라이언트는 쿠키를 저장하고 있다가 같은 요청을 보낼 때 HTTP헤더에 쿠키를 담아 요청한다.
- 서버에선 이 쿠키를 읽어 이전 상태 정보를 확인하고 정보를 변경할때는 쿠키를 업데이트한다.
- 이후 서버에선 업데이트된 쿠키를 담아 클라이언트에 응답을 보낸다.
쿠키 사용 예시
- 웹사이트 로그인 할 때 아이디 비밀번호 저장 옵션
- 장바구니 기능
- 팝업창(24시간 동안 이 창을 보지 않음)
- 자동 로그인
쿠키의 단점
- 쿠키는 클라이언트의 로컬에 저장되기 때문에 정보를 수정할 수 있다.
- 요청 정보를 중간에서 가로챌 수 있어 보안에 취약하다.
참조
https://velog.io/@mokyoungg/HTTP-쿠키Cookie