Back-End/HTTP

[HTTP][모든 개발자를 위한 HTTP 웹 기본 지식] - HTTP 기본

얄루몬 2022. 2. 14. 13:26

💻본 포스팅은 '모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한'님의 강의를 듣고 작성되었습니다.
https://inf.run/kXeZ

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com


[HTTP]

HTTP는 HyperText Transfer Protocol로 HyperText Markup Language를 전송할 때 사용하는 프로토콜로 시작했다.

그러나 현대에 들어와서는 XML이나 HTML 같은 마크업 언어 뿐만 아닌 다양한 형태의 메시지를 전송할 때 사용하며 HTTP는 지금 모든 메시지의 전송에 중심에 있다고 해도 과언이 아니다.

 

[HTTP 메시지 전송 예시]

  • HTML, TEXT
  • 이미지, 음성, 영상, 파일
  • JSON, XML(API)
  • 거의 모든 형태의 데이터를 전송할 수 있다.
  • 서버간 데이터를 주고 받을 때도 대부분 HTTP를 사용한다

 

 

 

[HTTP 역사]

  • HTTP/0.9 1991년: GET 메서드만 지원, HTTP 헤더X 
  • HTTP/1.0 1996년: 메서드, 헤더 추가
  • HTTP/1.1 1997년: 가장 많이 사용, 우리에게 가장 중요한 버전
  • RFC2068 (1997) -> RFC2616 (1999) -> RFC7230~7235 (2014)
  • HTTP/2 2015년: 성능 개선
  • HTTP/3 진행중: TCP 대신에 UDP 사용, 성능 개선

 

[HTTP/3는 왜 TCP가 아닌 UDP를 선택했을까?]

TCP는 안정적이고 순서를 보장해서 데이터를 전송해주기 때문에 많이들 선호한다.  그러나 TCP 자체는 데이터가 많고, 많은 데이터 때문에 속도가 느리다는 단점이 있다.

또한 TCP는 3way handshake의 단계를 거쳐야 해서 복잡하기 때문에 이러한 문제와는 거리가 먼 UDP를 이용해서 HTTP/3를 개발하고 있다.

 

[기반 프로토콜]

  • TCP: HTTP/1.1, HTTP/2 

 

  • UDP: HTTP/3 

 

  • 현재 HTTP/1.1 주로 사용 
    • HTTP/2, HTTP/3 도 점점 증가

 

 

 

[HTTP의 특징]

  • 클라이언트 서버 구조
  • 무상태 프로토콜(스테이스리스), 비연결성 
  • HTTP 메시지
  • 단순함, 확장 가능

 

[클라이언트 서버 구조]

  • Request Response 구조이다
  • 클라이언트는 서버에 요청을 보내고, 응답을 대기한다.
  • 서버가 요청에 대한 결과를 만들어 응답한다.

Request Response 구조

 

  • Request - 클라이언트가 서버에 요청을 보내고 응답을 대기할 때 쓰는 메시지 타입
  • Response - 서버가 클라이언트 요청에 응답을 만들어 응답을 보낼 때 쓰는 메시지 타입

 

 

 

[무상태 프로토콜]

  • 서버가 클라이언트의 상태를 보존하지 않는 것을 무상태 프로토콜이라 한다.

 

  • 장점 - 서버의 확장성이 높다 
    • 우리는 이를 스케일 아웃이라 한다.

 

  • 단점 - 클라이언트가 추가 데이터를 전송한다.

 

[상태 유지 프로토콜의 경우 - Stateful]

상태 유지 프로토콜의 경우

 

[무상태 프로토콜의 경우 - Stateless]

무상태 프로토콜의 경우

 

[Stateless의 한계]

  • 모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다.

 

  • 무상태
    • 예) 로그인이 필요 없는 단순한 서비스 소개 화면

 

  • 상태 유지 
    • 예) 로그인

 

  • 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지

 

  • 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지

 

  • 상태 유지는 최소한만 사용

 

 

[비 연결성]

연결을 유지하는 모델과 유지하지 않는 모델이 있다.

  • HTTP의 경우엔 기본이 연결을 유지하지 않는 모델이다.
  • 일반적으로 초 단위 이하의 빠른 속도로 응답을 한다.
  • 수천명이 서비스를 사용해도 실제 서버에서 동시 처리 요청은 수십개 이하로 매우 작다.
    • 예) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지 않는다.
  • 서버 자원을 매우 효율적으로 사용할 수 있다.

 

[비 연결성의 한계와 극복]

  • TCP/IP 연결을 새로 맺어야 함 - 3 way handshake 시간 추가
  • 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, css, 추가 이미지 등 등 수 많은 자원이 함께 다운로드
  • 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결
  • HTTP/2, HTTP/3에서 더 많은 최적화

HTTP 한계와 극복

 

 

 

[HTTP 메시지]

 

 

 

[단순함과 확장 가능]

HTTP는 단순하다

HTTP 메시지도 단순하다.

크게 성공하는 표준 기술은 단순하지만 확장 가능한 기술이다.

 

 

 

 

 

 

[HTTP]