HTTP 에서는 서버가 클라이언트의 상태를 보존하지 않는다.
Stateful vs Stateless
- 상태 유지 : 중간에 다른 점원으로 바뀌면 안됨.
- 상태가 유지되는 때에는 점원 A가 고객의 중문 상태에 대해 기억하고 있어서(고객은 자기 주문 상태 기억 못 함) 중간에 다른 점원으로 바뀔 때 상태 정보를 다른 점원에게 미리 알려줘야 한다.
- 이렇게 점원 A가 고객의 상태를 기억하고 있는 것을 상태를 유지한다고 한다.)
- 무상태 : 중간에 다른 점원으로 바뀌어도 된다.
- 무상태에서는 고객이 자신의 주문을 기억하고 있다면 중간에 다른 점원으로 바뀌어도 주문을 할 수 있다.
- 갑자기 고객이 증가해도 점원을 대거 투입할 수 있다. -> 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.
- 무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한한 서버 증설 가능
TCP / IP의 경우 기본적으로 연결을 유지한다.
연결을 유지하는 모델에서는 클라이언트 1, 2는 요청을 보내지 않더라도 계속 연결을 유지해야 한다. 이 경우 연결을 유지하는 서버의 자원이 계속 소모 된다.
HTTP 1.0 기준으로, HTTP는 연결을 유지하지 않는 모델이다.
일반적으로 초 단위 이하의 빠른 속도로 응답하며, 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다.
하지만 비연결성은 웹 브라우저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트, css, 추가 이미지 등 수많은 자원이 함께 다운로드 된다.
해당 자원들을 각각 보낼 때마다 연결 끊고 다시 연결하고를 반복하는 것은 비효율적이기 때문에 지금은 HTTP 지속 연결(Persistent Connections)로 문제를 해결한다.