HTTP 1.1 기준으로 작성한 글입니다.
HTTP는 상태를 계속 유지하지 않는 스테이트리스
(stateless) 프로토콜입니다.
HTTP 프로토콜 독자적으로, request와 response를 교환하는 동안에 상태를 관리하지 않는것인데요.
이는 이전에 보냈던 리퀘스트나 되돌려준 리스폰스에 대해서 전혀 기억하지 못한다는 뜻입니다.
이는 많은 데이터를 빠르고 정확하게 처리하는 범위성
(scalability)을 확보하기 위해서 이렇게 설계되어 있는 것입니다.
하지만 장점만 보고 이런 stateless한 프로토콜을 사용하기에는 단점이 너무나도 컸는데, 예를 들면 로그인
입니다.
로그인이 필요한 서비스의 경우 당연하게도 다른페이지로 이동하더라도 로그인 상태를 유지해야할 의무가 있습니다.
하지만 stateless 프로토콜인 HTTP/1.1은 상태를 유지하지 않기 때문에 범위성은 가져오되 상태 관리를 할 수 있도록 해주는 쿠키
(Cookie)라는 기술을 도입했습니다.
쿠키는 리퀘스트와 리스폰스에 쿠키 정보
를 추가해서 클라이언트의 상태를 파악하기 위한 시스템입니다.
쿠키는 서버에서 리스폰스로 보내진 Set-Cookie
라는 헤더 필드
에 의해 쿠키를 클래이언트에 보존하게 됩니다. 다음 번에 클라이언트가 서버로 리퀘스트를 보낼 때 자동으로 쿠키 값을 넣어서 송신하죠.
그렇게되면 서버가 쿠키를 통해 이전의 리퀘스트와 리스폰스의 상태를 확인할 수 있게됩니다.
순서로보면 아래와 같습니다.
1. 클라이언트가 서버에게 리퀘스트 송신
2. 리스폰스에 Set-Cookie로 쿠키를 붙여서 송신
3. 클라이언트가 서버에게 쿠키를 붙여서 다시 서버에게 리퀘스트 송신
4. 서버가 쿠키를 통해서 req, res 이전 상태 확인