HTTP/1.1, HTTP/2 : TCP를 기반으로 동작
HTTP/3 : UDP를 기반으로 동작
TCP 기반으로 동작하게 되면 3way-handShake 동작으로 인해 빠른 속도를 내지 못하기 때문에 UDP 기반으로 성능 최적화를 위해 HTTP/3가 나오게 되었다.
goole에 'hello'를 검색을 하면 네트워크 탭에서 어떤 프로토콜을 사용하는지 확인할 수 있다.
클라이언트-서버 구조
HTTP는 클라이언트가 요청을 생성하기 위한 연결을 연다음 응답을 받을때 까지 대기하는 전통적인 클라이언트-서버 모델을 따른다.
무상태 프로토콜
HTTP는 무상태 프로토콜이며, 이는 서버가 두 요청간에 어떠한 데이터(상태)도 유지하지 않음을 의미한다.
비연결성을 가진다.
HTTP 메시지를 통해 통신한다.
HTTP는 단순하며 확장가능하다.
클라이언트 서버 구조를 갖추면 양쪽이 서로 독립적으로 동작하게 된다.
클라이언트 : UI와 사용성에 집중
서버 : 비즈니스 로직, 데이터에 집중
항상 같은 서버가 유지되어야 서버와 통신하던 클라이언트의 데이터가 보존되므로 클라이언트 1에는 서버 1이 유지되어야 한다.
통신하던 서버에 오류가 발생하거나 중간에 통신하는 서버를 변경하면 새로운 서버와 처음부터 다시 통신을 시작해야 한다.
클라이언트가 요청할 때 필요한 데이터를 모두 가지고 통신을 하기 때문에 서버에서 상태를 보관하지 않아도 된다.
무상태 프로토콜(Stateless)은 서버가 클라이언트의 상태를 보존하지 않기 때문에 서버 확장이 가능하다.
통신하던 서버에 오류가 발생하거나 중간에 통신하는 서버가 변경되어도 통신을 처음부터 시작할 필요가 없다.
<예시>
중간에 다른 점원으로 바뀌면 안되며, 만약 중간에 점원이 바뀔 경우엔 상태 정보를 미리 바뀔 점원에게 알려주어야 한다.
점원이 바뀌지 않을 때
- 고객 : 이 노트북 얼마인가요?
- 점원 : 100만원 입니다.
- 고객 : 2개 구매할게요.
- 점원 : 200만원 입니다. 신용카드와 현금 중에 어떤 수단으로 결제하겠습니까?
- 고객 : 신용카드로 구매할게요.
- 점원 : 200만원 결제 완료되었습니다.
점원이 중간이 바뀔 때
- 고객 : 이 노트북 얼마인가요?
- 점원 1 : 100만원 입니다.
- 고객 : 2개 구매할게요.
- 점원 2 : ? 무엇을 2개 구매하시나요?
- 고객 : 신용카드로 구매할게요.
- 점원 3 : ? 무엇을 신용카드로 결제하시나요?
중간에 다른 점원으로 바뀌어도 클라이언트(고객)이 모든 정보를 담고 있으므로 갑자기 고객이 증가하더라도 점원을 대거 투입할 수 있으며 이는 클라이언트 요청이 증가하더라도 서버를 대거 투입할 수 있다는 의미가 된다.
점원이 바뀌지 않을 때
- 고객 : 이 노트북 얼마인가요?
- 점원 : 100만원 입니다.
- 고객 : 노트북을 2개 구매할게요.
- 점원 : 200만원 입니다. 신용카드와 현금 중에 어떤 수단으로 결제하겠습니까?
- 고객 : 노트북 2개의 결제를 신용카드로 구매할게요.
- 점원 : 200만원 결제 완료되었습니다.
점원이 중간에 바뀔 때
- 고객 : 이 노트북 얼마인가요?
- 점원 1 : 100만원 입니다.
- 고객 : 노트북을 2개 구매할게요.
- 점원 2 : 200만원 입니다. 신용카드와 현금 중에 어떤 수단으로 결제하겠습니까?
- 고객 : 노트북 2개의 결제를 신용카드로 구매할게요.
- 점원 3 : 200만원 결제 완료되었습니다.
클라이언트 - 서버의 연결을 유지하는 모델
연결된 클라이언트와 통신을 하지 않더라도 연결이 되어 있기 때문에 서버의 자원이 낭비된다.
클라이언트 - 서버의 연결을 유지하지 않는 모델
클라이언트와 필요한 통신이 끝나면 서버는 연결을 끊어 유지하지 않기 때문에 자원 낭비를 최소한으로 한다.
시작라인
헤더
메시지 바디
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC