HTTP 프로토콜에는 비연결성(Connectionless)과 비상태성(Stateless)이라는 특징이 있다.
이는 서버의 자원을 절약하기 위해 모든 사용자의 요청마다 연결과 해제의 과정을 거치기 때문에 연결 상태가 유지되지 않고, 연결 해제 후에 상태 정보가 저장되지 않는다는 것이다.
하지만, 이로 인해 사용자를 식별할 수 없어서 같은 사용자가 요청을 여러번 하더라도 매번 새로운 사용자로 인식하는 단점이 있다.
하지만 우리가 사용하고 있는 웹사이트를 생각해보면, 로그인을 한 번 하고나면 그 사이트에서는 다시 로그인할 필요 없이 여러 페이지의 기능들을 이용할 수 있고 심지어 브라우저를 종료했다가 나중에 다시 접속했을 때도 그 로그인 상태를 유지할 수도 있다.
이렇게 HTTP의 비연결성과 비상태성을 보완하여 서버가 클라이언트를 식별하게 해주는 것이 쿠키와 세션이다.
- 비연결성은 통신 주체 간의 연결을 유지하지 않음으로 리소스를 아끼는 등의 이득을 취함.
- 무상태성은 클라이언트의 정보를 서버가 유지하지 않음으로, 응답의 멱등성과 서버 scale out 의 확장성 등의 이득을 취함.
서버가 브라우저에게 세션ID 를 심어주는 저장소 이름이 "쿠키"
쿠키는 웹 사이트에 접속할 때 생성되는 정보를 담은 임시 파일
쿠키의 데이터 형태는 Key 와 Value로 구성되고 String 형태로 이루어져 있다.
쿠키의 구성 요소
쿠키는 서버를 대신해서 이러한 정보들을 웹 브라우저에 저장. (정확히는, 웹 브라우저를 이용하고 있는 컴퓨터에 저장)하고 사용자가 요청을 할 때 그 정보를 함께 보내서 서버가 사용자를 식별할 수 있게 해준다.
쿠키 | 세션 | |
---|---|---|
저장위치 | 클라이언트 | 서버 |
저장형식 | text(string) | Object |
리소스 | 클라이언트 리소스 | 서버 리소스 |
용량제한 | 도메인당 20개, 1쿠키당 4KB | 제한 없음 |
만료시점 | 쿠키 저장시 설정 | 알수 없음 |