본문 바로가기
Study/Server

[Network] HTTP란? 그리고 HTTP 1.1, HTTP 2

by _royJang 2021. 9. 2.

Rest API가 HTTP/1.0의 특징과 연관이 있듯 gRPC에 대해 알아보니 HTTP/2.0의 특징과 큰 연관이 있는 듯 하다. 근본이 되는 기술을 공부해 두는게 좋겠지.. 면접에서도 종종 나오는 질문인듯하고. 아자아자!

HTTP란?

HTTP(Hypher Text Transfer Protocol)란 웹에서 데이터를 주고 받기 위한 프로토콜 즉, 일종의 약속이다. 주로 TCP/IP 전송계층을 사용한다.(Google님이 HTTP를 3.0버전을 UDP를 사용하여 제작했다. 정보를 찾아보니 많은 장점이 있던데 이를 통해 또 어떤 기술이 생겨날지 기대된다.)

HTTP의 특징

  • TCP/IP 전송 계층을 사용하는 애플리케이션 계층의 프로토콜
  • 비연결성 프로토콜
  • Client 측과 Server측의 request, response를 통해 통신

사용하는 요청 메시지

  • PUT : 특정 리소스 전체를 수정하는 데 사용.
  • PATCH : 리소스의 일부를 수정하는 데 사용.
  • GET : 특정 리소스의 출력 요청. 데이터를 받기만 함.
  • POST : 특정 리소스에 엔티티를 제출할 때 사용.
  • DELETE : 특정 리소스 삭제.
  • HEAD : 응답 본문을 제외한 데이터 요청.
  • CONNECT : 목적 리소스로 식별되는 서버로 터널을 맺음.
  • OPTIONS : 목적 리소스의 통신을 설정하는데 사용.

사용되는 응답 코드

  • 1xx : 요청을 받았으며 프로세스를 계속 진행.
  • 2xx : 요청을 성공적으로 받았음.
    • 200 OK
    • 201 Created
    • 202 Accepted
  • 3xx : 요청 완료를 위해 추가 작업 조치가 필요.(리다이렉션)
  • 4xx : 요청을 처리할 수 없음(클라이언트 오류)
    • 400 Bad Request
    • 403 Forbidden
    • 404 Not Found
  • 5xx : 유효한 요청에 대한 충족을 실패(서버 오류)
    • 500 Internal Server Error
    • 502 Bad Gateway
    • 503 Service Unavailable

버전 별 HTTP 전송 데이터

HTTP/1.1

HTTP/2

v1.1 은 메세지를 일반 텍스트 형식으로 보냈으나 v2는 Binary Framing 계층이 추가됐고 이를 통해 Header frame과 Data frame을 바이너리로 인코딩 후 전송.

버전 별 HTTP 특징

HTTP/1.1 이전 버전 단점

  • 기존의 HTTP/1 버전은 1Request & 1Response Per Connection, 즉, 연결 한번에 하나씩의 데이터 교환만이 가능하였다. 데이터를 교환하고자 할 때 마다 새로운 연결을 하여야 하였으므로 성능이 좋지 않았고 서버 부하상태에 들어가기 쉬웠다.

HTTP/1.1 장점

  • 특정 시간동안 커넥션을 닫지 않는 방식인 Persistent Connection 기능을 도입하였다.
  • 하나의 커넥션에서 응답을 기다리지 않고 원하는 요청을 한번에 보내 서버측에서 이를 순차적으로 처리해 처리 결과만을 보내는 Pipelining 기능이 도입됐다. --> 지연시간 단축

HTTP/1.1 단점

  • 한번에 보낸 요청 중 먼저 온 요청의 처리가 되지 않는다면 그 이후의 요청이 처리되지 않는 문제점이 있다.(Head Of Line Blocking)
  • Header가 같을 것이라 확신이 드는 요청 또한 모든 Header 값을 전송해야 한다.

HTTP/2 장점

  • 추가된 Binary Framing 계층을 통해 메세지를 HEADER frame과 DATA frame으로 분리하여 데이터를 교환함으로 전송 속도가 증가하고 오류가 날 확률이 낮아진다.
  • 프레임으로 쪼개어진 메세지가 전송되기에 Request, Response에 순서가 의미가 없어짐으로 Head Of Line Blocking 문제가 해결된다.
  • 리소스간에 가중치를 줄 수 있어 데이터 우선순위를 지정할 수 있다.
  • Server 측 에서 Client가 다음에 요청할 데이터를 예측하여 미리 보내 줄 수 있다.(Server Push)
  • 중복이 있는 Header일 경우 static dynamic table을 이용하여 허프만 인코딩을 통해 압축이 가능하다. 헤더의 크기가 85% 줄어드는 효과를 볼 수 있다.

결론

어마어마한 효율성 증가로 생각된다. gRPC 공부하자.

 

참고 : https://www.youtube.com/watch?v=xcrjamphIp4&t=585s (쿨라임님의 10분 테코톡을 참고하였습니다.)