이 글은 HTTP의 구조를 다루지 않고 오로지 HTTP의 기본 개념만을 다룹니다.
즉, HTTP의 Body나 Head의 구조는 다른 글로 정리할 예정입니다.
이 글은 특성의 이점과 예시사항을 중점으로 적은 글이니 참고 바랍니다
HTTP는 Hyper Text Transfer Protocol의 약어이다.
이를 해석하면 Hyper Text를 전송하는 규약인데 Hyper Text란 무엇일까?

우리는 주로 웹을 이용하면 위와 같이 마우스를 클릭했을 때 해당 링크로 이동한다
이를 하이퍼 링크라고 하는데
하이퍼텍스트는 하이퍼링크를 나타낼 수 있는 텍스트
= 하이퍼링크를 통해 사용자가 한 문서에서 다른 문서로 이동할 수 있도록 하는 글
- TCP/IP 프로토콜 중 Application 프로토콜 중 하나
- 하이퍼 텍스트를 전송하는 통신 규약 (HTML을 주고 받는다)
- 한 문서에서 다른 문서로 이동할 수 있도록 인터넷에서 글을 주고 받기 위한 약속
현재 인터넷은 클라이언트 - 서버 구조로 이루어진다.
클라이언트는 쉽게 설명하면 웹 브라우저를 이용하는 사용자이다.
우리가 네이버에 들어가 스포츠, 뉴스 등 여러 카테고리를 클릭하는데 이 때의 행위를 클라이언트라고 부를 수 있다.
만약 스포츠 카테고리를 누른다면 클라이언트가 서버에 클릭한 정보를 넘기고, 네이버 측 서버에서 해당 요청에 대한 응답을 해주는 것이다.
서버란 네트워크에서 다른 컴퓨터나 소프트웨어와 같은 클라이언트에게 서비스를 제공하는 컴퓨터이다.
즉 클라이언트(내 컴퓨터)가 서버에게 데이터를 전송(뉴스 클릭)하면 해당하는 데이터를 응답하는 것이 서버 컴퓨터이다.
즉, 클라이언트는 서버에게 Request(요청)를 하면, 서버는 클라이언트에게 Response(응답) 해준다. 이것이 클라이언트, 서버의 구조이다.
HTTP 프로토콜을 통해 클라이언트와 서버간의 통신을 통해 하이퍼텍스트를 주고받는다!

서버가 클라이언트의 이전 요청에 대한 정보를 기억하지 않는다는 것을 의미한다.
ex)
클라이언트 : 아메리카노 얼마인가요?
서버 : 5000원입니다.
클라이언트 : 2잔주세요
서버 : 무슨 음료로 2잔 드릴까요?
즉 이전의 요청과 관련된 상태를 기억하지 않고 오로지 새로운 요청만 받아드린다
무상태성은 상태를 저장하지 않기에 성능적으로도 이점을 가지지만 유연해진다.
왜 상태를 저장하지 않는데 유연해질까?
클라) 아메리카노 1잔 얼마에요?
서버) 5000원 입니다.
클라) 아메리카노 1잔 주세요(무상태성이기에 아메리카노를 직접으로 말함)
서버) 네 드릴게요(어떤 점원이 와도 대답이 가능하다)
클라) 아메리카노 1잔 얼마에요?
서버) 5000원 입니다.
클라) 1잔 주세요 그럼 (상태를 알기에 가능)
서버) <-- 이 때 점원이 만약 바뀐다면? 이전에 무슨 대화를 나눴는지 모르기에 대답 불가
위 상황에선 stateful하다면 적은 정보로 의사소통이 가능하지만 만약 점원이 교체된다면 이전의 정보를 모르기 때문에 의사소통이 불가능하다.
그러나 stateless하다면 모든 정보를 요청으로 받기 때문에 점원이 교체되어도 원활한 의사소통이 가능하다.
개발을 한다면 한 시스템이 계속 사용되기보다 계속해서 업데이트 되어간다.
즉 응답하는 서버를 쉽게 바꿀 수 있어야 하기 때문에 stateless 상태를 유지하는 것이다.
여러 클라이언트(A,B,C) 가 하나의 서버에 접속하는 식으로 인터넷을 동작한다.
만약 세 클라이언트(A, B, C) 연결을 유지하면 계속해서 서버의 자원이 소모되게 된다.
HTTP는 이를 끊어 클라이언트마다 하나의 연결만을 유지한다.-> 최소한의 자원 사용
연결을 끊어서 해결하나 싶었는데.. 새로운 문제가 생겼네..?
연결을 다시 할 때마다 3way handshake를 계속 해줘야 함
-> persistent connection으로 해결
HTTP 1.1부터 위의 문제를 해결하기 위해 고안된 연결방법
하나의 TCP 연결로 여러 요청을 할 수 있다.

기존에는 요청마다 연결을 수립했다(낭비)

영속성 연결을 이용하면 자원의 낭비를 줄일 수 있다.
클라이언트와 서버간의 연결을 계속 유지하면 서버자원이 소모되기 때문에 비연결성을 사용하나,매 요청마다 handshake를 수행하기엔 또 서버자원이 소모되니 Persistent Connection을 사용하여 일시적으로 연결을 유지하고 일정 시간 통신이 없으면 연결을 끊어 비연결성을 지킨다
즉, 요청이 있을 때는 연결을 유지하고 요청이 일정 시간 없다면 끊는다고 이해하면 된다.