[HTTP/Network] HTTP란?

dk.han·2022년 10월 7일
0
post-thumbnail

HTTP란 무엇인가.

1. HTTP?

HTTP는 HyperText Transfer Protocol의 약자로, 문서 간의 링크를 전송하는 프로토콜이다.
처음에는 HyperText(HTML)를 전송하는 프로토콜로 시작하였으나, 지금은 text, image, 음성, 영상, JSON, XML 등 거의 모든 형태의 데이터를 HTTP 프로토콜로 전송한다.

HTTP/1.1과 HTTP/2는 TCP 기반 프로토콜이며, HTTP/3는 UDP 기반 프로토콜이다.
현재 HTTP/1.1이 주로 사용되고 있으나, HTTP/2 와 HTTP/3의 사용도 점점 증가하고 있다.

2. HTTP 특징

1. 클라이언트 서버 구조

  • Request(요청), Response(응답) 구조로 이루어져 있다.
  • 클라이언트는 HTTP 메세지를 통해 요청을 보내고, 응답을 대기한다.
  • 서버는 요청에 대한 결과를 만들어 응답을 보내준다.
  • 클라이언트와 서버의 역할을 분리시켜야 각각 독립적으로 진화할 수 있다.
  • 클라이언트는 사용성, UI에 집중하고, 서버는 비지니스 로직, 데이터를 처리하는데 집중한다.

2. Stateless(무상태 프로토콜)

서버가 클라이언트의 상태를 보존하는 Stateful(상태유지) 라면, 항상 같은 서버가 유지되어야 한다. 만약 서버1과 통신을 하다가 서버 장애가 발생해 서버 2와 통신하게 된다면, 서버 1과 통신했던 절차들을 처음부터 다시 밟아야 한다. 서버2는 클라이언트와 처음 통신하므로 이전에 어떤 상태를 주고받았는지 모르기 때문이다.

그래서 HTTP 서버가 클라이언트의 상태를 보존하지 않는 Stateless(무상태)이기 때문에, 클라이언트는 이어지는 요청이라도 상태를 반복해서 보내주어, 필요한 정보를 모두 받아 올 수 있다.

장점: Stateless는 어떤 서버와도 통신이 가능하기 때문에, 서버 확장에 유리하다.
단점: 필요한 정보를 모두 받아와야 하므로, 클라이언트에서 많은 양의 데이터를 보내게 될 수 있다.

3. Connectionless(비연결성)

서버 1,2,3이 존재하고 연결을 유지하는 모델이라고 하자. 그러면 내가 서버 1과 통신할 때도, 서버 2, 3과도 연결을 유지해야 하기 때문에 의미 없는 서버 자원 소모가 발생하므로 비효율적이다.

  • HTTP는 기본적으로 연결을 유지하지 않는 모델
    • 서로 필요한 요청, 응답만 받고 서버와 연결을 끊어 버리므로, 서버 입장에서는 서버를 유지하는 자원을 최소한으로 줄일 수 있다.
  • 일반적으로 초 단위 이하의 빠른 응답속도를 가진다.
  • 1시간 동안 수천명이 서비스를 사용해도, 실제 서버에서 동시에 처리하는 요청을 수십개 이하로 매우 작다.
  • 서버 자원을 매우 효율적으로 사용 가능하다.

비연결성의 한계와 극복

  • 요청마다 서버와 새롭게 연결을 해야하므로 TCP/IP 연결도 새로 맺어야 한다
    • 3 way handshaske 시간이 추가 됨.
  • 웹 브라우저 사이트 요청시 HTML, JS, CSS, 이미지 등 수많은 자원이 함께 다운로드 된다.
  • 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결.
  • HTTP/2, HTTP/3에서 많은 최적화가 이루어짐.

3. HTTP 메시지

HTTP 메시지 구조

{: width="50%" height="50%"}

요청 메시지

{: width="50%" height="50%"}

request-line
method (SP(공백)) request-target (SP) HTTP-version CRLF(empty line)

HTTP 메서드
서버가 수행해야 할 동작을 지정하며, GET, POST, PUT, DELETE.. 등이 있다.

요청 대상
absolute-path[?query] (절대경로 = "/"로 시작하는 경로)

HTTP 버전
사용되는 HTTP 버전을 적어준다.

응답 메시지

{: width="50%" height="50%"}

status-line
HTTP-version (SP) status-code (SP) reason-phrase CRLF(empty line)
HTTP버전, HTTP status-code, response-message가 들어간다.

header
header-field = field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용)

  • Feild-name은 대소문자 구분 없음.
  • 메시지 바디의 내용, 바디의 크기, 압충, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등 HTTP 전송에 필요한 모든 부가정보를 포함한다.
  • 필요시 임의의 헤더 추가 가능하다.

HTTP message-body
실제 전송할 데이터를 포함한다.

  • HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능

Reference

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

0개의 댓글