로그인을 통해 볼 수 있는 서비스, 장바구니 서비스 등 클라이언트가 정보를 유지하는 stateful한 성격의 서비스가 많아졌다. 정보를 유지할수 없는 Connectionless, Stateless의 성격을 가진 HTTP의 단점을 해결하기 위해 쿠키라는 개념이 도입됐다.
Set-Cookie 응답 헤더로 넘어온 쿠키를 다시 Cookie 요청 헤더로 돌려보내는 것은 브라우저라는 HTTP 클라이언트만 해주는 매우 독특한 작업이다
- 웹 서버가 브라우저에게 지시하여 사용자의 로컬 컴퓨터 또는 메모리에 저장하는 작은 기록 정보 파일이다.
- 파일에 담긴 정보는 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀔 수 있다.
- 본적으로 HTTP 통신을 기반으로 하며 브라우저에서 돌아가는 웹사이트나 웹애플리케이션에서 널리 사용되고 있다.
- NAME : 쿠키의 이름
- VALUE : 저장된 값
- EXPIRES : 쿠키 만료일
- DOMAIN : 쿠키가 사용되는 도메인 지정. 한 도메인에서 다른 도메인에 대한 쿠키를 사용하지 못하게 설정
- PATH : 쿠키를 반환할 경로를 결졍. 도메인의 루트 경로로 이동할 경우 쿠키가 전송 된다
- SECURE : 보안 연결 설정
매 헤더(Http Header)에 추가하여 보내기 때문에 상당한 트래픽을 발생시킨다
결제 정보 등을 쿠키에 저장하게 되면 보안에 대한 문제점(변조, 유실, 도난 등)이 발생할 수 있다
<차이점>
cookie: 사용자의 로컬 컴퓨터에 정보를 저장한다.
session: 서버와 사용자의 메모리(브라우저)에 정보를 저장한다. 따라서 관리하기 편하고 효율적이다.
HTTP Session id를 식별자로 구별하여 접속한 서버 db에 정보를 저장한다.
클라이언트는 HTTP Session id를 쿠키로 저장된 형태로 가지고 있습니다.
메모리에 저장하기 때문에 브라우저가 종료되면 사라집니다.
서버에 저장하기 때문에 관리하기 편하고 효율적이다
load-balancing(부하 분산 - 수많은 사용자로부터 동시에 들어오는 요청을 처리하기 위해 여러 대의 서버로 골고루 분산될 수 있도록 한다), 시스템 효율성에서 다루기 어렵다
세션 저장장치가 부족한 시스템에서는 적합하지 않다
서버는 세션 데이터를 클라이언트에게 보내기 전에 암호화해야한다.
많은 세션 데이터를 허용하고 효율적으로 관리하기 위해서는 (브라우저들은 쿠키의 크기와 개수에 제한을 두고 있기 때문) 쿠키를 만들기전에 데이터를 압축하는 과정과 클라이언트에게 쿠키를 받기 전 압축 해제하는 과정이 필요할 것이다.