HTTP 프로토콜은 비연결지향(Connectionless)과 무상태(Stateless)라는 특징이 있다. 즉, 클라이언트의 로그인 정보나 브라우저에서 입력한 값 등이 페이지를 이동할 때 유지되지 않는 것이다. 이러한 한계를 보완하기 위해 사용하는 것이 쿠키, 세션, 웹 스토리지이다.
클라이언트의 로컬에 키와 값의 형태로 저장되며, 이름, 값, 만료시간, 경로 정보 등을 포함한다.
Response Header의 Set-Cookie
속성을 사용하면 클라이언트에 쿠키를 만들 수 있다.
클라이언트가 별도의 설정을 하지 않아도 브라우저가 Request 시에 Request Header에 넣어서 자동으로 서버로 전송한다. (도메인을 설정할 경우 선택적으로 보내는 것도 가능)
Expires(날짜와 시간)
혹은 Max-Age(초)
를 명시할 경우 Persistent Cookie, 아무것도 명시하지 않을 경우 Session Cookie가 된다.
쿠키의 경우 최대 4KB의 값만 저장할 수 있으며, 지속 쿠키의 경우 로컬환경에 파일로 저장되기 때문에 보안에 취약할 수 있다.
클라이언트가 서버와 연결을 유지하고 있는 상태.
하지만 이 경우에는 서버에 세션에 대한 정보(클라이언트의 정보)를 저장하고, 클라이언트에게는 클라이언트를 구분할 수 있는 세션ID를 부여하는 일련의 방식 자체를 지칭.
클라이언트가 Request를 보내면 Response에 Set-Cookie
를 통해 세션 ID를 발급한다.
클라이언트는 이후 다시 서버에 Request를 보내면 세션 ID를 같이 전달하게 되고, 서버는 해당 세션을 찾아 적절한 Response를 보내준다.
즉, 세션은 서버에 중요한 정보를 저장하기 때문에 쿠키에 비해 비교적 안전하다.
하지만 서버의 리소스를 사용해 정보를 저장하기 때문에 세션을 많이 사용할 경우 서버에 부하가 생기게 될 수 있다. (특히 로그인에 많이 사용하기 때문에 유저 수가 늘어날 경우 유의)
쿠키 vs 세션
서버가 아닌, 클라이언트에 데이터를 저장할 수 있도록 지원하는 HTML5의 새로운 기능.
4KB 밖에 저장하지 못하는 쿠키와 다르게 웹 스토리지는 약 5-10MB(데스크탑 기준)까지 저장공간을 이용할 수 있다.
www.google.com
에서 로컬 스토리지에 저장한 데이터에 www.naver.com
에서 접근 할 수 없다.쿠키 vs 웹 스토리지
Reference