HTTP(Inflearn)

HTTP

Inflearn 김영한 강사님의 모든 개발자를 위한 HTTP 웹 기본 지식 을 듣고 정리하는 글입니다.


모든 것이 HTTP

HTTP(HyperText Transfer Protocol) 메세지에 모든 것을 전송한다.


역사

  1. HTTP/0.9 (1991년) : GET method만 지원. HTTP header X.
  2. HTTP/1.0 (1996년) : method, header 추가.
  3. HTTP/1.1 (1997년) : 가장 많이 사용.
  4. HTTP/2 (2015년) : 성능 개선
  5. HTTP/3 : TCP 대신 UDP 사용. 성능 개선.

강의에서는 HTTP/1.1 을 기준으로 공부를 하라고 한다.


기반 protocol


HTTP 특징


Client-Server 구조

예전에는 이러한 분리없이 하나였다고 한다. 이렇게 분리하면

  1. Business logic, data 를 서버에 위임할 수 있다. 그 행위에만 집중하면 된다.
  2. UI, UX와 같은 화면구성은 Client에 위임하여 거기에만 집중할 수 있다.

라는 장점이 있다. 따라서 각각 독립적인 진화가 가능하다.


Stateless Protocol


만약 stateful 하다면?

# 노트북 매장에서 손님과 점원의 대화
고객 : 노트북 얼마에요?
점원 A : 100만원 입니다.

고객 : 2개 구매할게요.
점원 A : 200만원 입니다. 현금, 카드 어떤 것으로 결제하실건가요? 
→ 이전 '100만원짜리 노트북'이라는 정보가 유지. 개수 정보와 결제 방법도 유지된다.

고객 : 카드로 할게요.
점원 A : 200만원 결제 완료 됐습니다!

만약 여기서 점원이 중간에 바뀐다면? 결국 고객은 처음부터 무엇을 살것인지, 몇개을 살것인지, 어떤 방식으로 결제할 것인지 다시 다 말해줘야 한다.


stateless의 경우는?

# 노트북 매장에서 손님과 점원의 대화
고객 : 노트북 얼마에요?
점원 A : 100만원 입니다.

고객 : 노트북 2개 구매할게요.
점원 B : 노트북 2개 200만원 입니다. 현금, 카드 어떤 것으로 결제하실건가요? 
→ 이전 '100만원짜리 노트북'이라는 정보가 유지. 개수 정보와 결제 방법도 유지된다.

고객 : 노트북 2개 구매를 카드로 할게요.
점원 C : 200만원 결제 완료 됐습니다!

이런식으로 점원에게 처음부터 다시 설명해줘야 한다. → Client가 보내는 데이터가 많아진다는 것.


stateful, stateless 정리


예시

inflearn1_1

inflearn1_2

inflearn1_3

이런식의 차이가 있다. (사진은 인프런 김영한 강사님의 모든 개발자를 위한 HTTP 웹 기본 지식 에서 제공하는 자료를 일부 캡쳐한 것입니다.)

사진 출처 - 모든 개발자를 위한 HTTP 웹 기본 지식[김영한]


한계


Conectionless

난 처음엔 ‘그냥 계속 연결시켜 놓으면 안되나…? 어차피 버튼 누르고, 검색계속 할텐데…’ 라고 생각했다. 그러나 실제로 ‘초 단위 이하의 빠른 응답’ + ‘브라우저에서 연속으로 버튼을 클릭하는 행위는 거의 없음’ 이라는 상황이기 때문에 굳이 연결을 유지할 필요가 없다라는 말을 이해하게 됐다. 비연결성이기 때문에 서버의 자원을 더욱 효율적으로 사용할 수 있는 것이다.


한계와 극복

그러나! 연결을 유지하지 않기 때문에 매번 연결이 있을 때마다 3 way handshake를 해줘야 한다. 그리고 요청을 하여 html을 가져오면, 그에 필요한 javascript를 가져오기 위해 다시 연결요청을 한다. 그리고 또 필요한 다른 미디어 파일을 가져오기 위해서 또 연결 요청을 하게 된다. 사용자는 1번의 요청을 한 것처럼 보이지만, 브라우저는 서버와 3번의 연결을 한 것이 된다

→ HTTP Persistence Conections로 문제를 해결.

inflearn1_4

inflearn1_5

사진 출처 - 모든 개발자를 위한 HTTP 웹 기본 지식[김영한]


Stateless하게 설계하는 것이 중요

대용량 트래픽이 드어올 때, scale out 하는 것이 가능하기 때문이다.


http message 부터는 다음 포스팅에서 이어 하겠다.