[컴퓨터 네트워크] 11. Application Layer (4) : HTTP/2

2024. 4. 16. 17:40·CS/컴퓨터 네트워크
반응형

HTTP/2

지난 글에서 HTTP/1 과 HTTP/1.1 에 대해서 정리했었다.

간단히 말해서 HTTP/1 은 base HTML 에 대해서도 TCP Connection을 만들고, 이 HTML 을 구성하는데 필요한 referenced object 들에 대해서도 매번 TCP connection 을 만들어서 데이터를 가져오는 방식이었다.

각 오브젝트 하나를 가져오는데 2RTT 의 시간이 필요했다.

 

HTTP/1.1 은 이를 약간 개선해서, 한번 TCP Connection 을 만들면 이 연결로 base HTML 과 referenced object 까지 한번에 가져와서 오브젝트를 가져오는 시간을 거의 반으로 줄이는 개선된 프로토콜이었다.

 

HTTP/2 는 여기에서 한 단계 더 발전한 프로토콜이다.

HTTP/2 의 목표는 multi-object HTTP 요청에 대한 응답 delay 를 1.1보다 줄이는 것이다.

 

HTTP/1.1 에서 하나의 Single TCP Connection 내에서 multiple, pipelined GET 이 가능했다.

서버는 각각의 GET 요청에 대해 FCFS (First Come First Service) 방식을 사용하여 순서대로 GET 요청에 응답을 보낸다.

 

그런데 FCFS 방식을 사용하면 중간에 사이즈가 큰 오브젝트 하나에 대한 요청이 먼저 왔을 때, 이 요청 하나를 처리하는데 시간이 오래 걸려서 뒤에 있는 작은 오브젝트들의 처리가 늦어지는 문제가 발생할 수 있다.

만약 클라이언트 A가 큰 오브젝트를 먼저 요청하고, B가 작은 오브젝트를 다음에 요청했다면, B는 자신이 요청하지 않은 큰 오브젝트 하나 때문에 자신의 response delay 가 증가하는 문제가 생긴다.

 

이런 현상을 HOL (head of line) Blocking 이라고 한다.

HOL Blocking 현상은 TCP 에서 나오는 loss recovery 도 지연시킨다.

(훼손된 패킷의 재전송, 재전송이 후순위에 밀려있으니 HOL Blocking 현상이 발생하면 훼손 패킷에 대한 재전송이 늦어진다. 또 TCP는 데이터의 순서를 지켜서 보내야 하는데 10개 패킷중 가운데 5번 패킷이 HOL 문제를 만나면 나머지 6~10 패킷도 늦게 보내지는 문제가 생긴다.)

 

 

HOL Blocking 의 예시사진이다.

O1 의 크기가 너무 커서 이 데이터 하나를 보내는데 많은 시간이 소요되었다.

이때문에 상대적으로 크기가 작은 O2 ~ O4 까지 오브젝트의 전송 시간이 모두 밀린다.


 

HOL Blocking 문제를 해소하고자하는 HTTP/2의 아이디어는, 바로 모든 데이터를 공평하게 1분씩 처리하는 것이다.

따라서 FCFS 를 지키기보다, 서버의 판단에 따라 필요하다면 요청을 처리하는 순서를 바꿔서 처리하거나, 클라이언트가 아직 요청을 보내지 않았지만 곧 요청할 거라고 예상되는 오브젝트를 미리 push 할 수 있도록 하는 기법을 이용한다.

 

예를 들면 클라이언트가 base HTML 을 요구했을 때, 당연히 후에 그 base HTML에 연결된 referenced object 들도 요청을 할 것이다. 따라서 이 오브젝트들을 서버가 미리 알아서 push 해줄 수 있다.

 

모든 데이터를 공평하게 1분씩 처리한다는 말은 오브젝트 크기를 '프레임' 이라는 고정된 크기로 나눠서 프레임 단위로 보내주는 아이디어로 구현한다.

이 프레임 단위로 스케줄링을 하면 HOL Blocking 을 완화할 수 있다.

 

하나의 큰 Object 1 을 프레임단위로 쪼개서 보낸다.

 

(그런데 이러면 한 가지 의문이 생긴다. 만약 O1 뒤에 아주 작은 요청이 1000개 있다고 해보자. 그러면 O1 오브젝트를 요청한 클라이언트는 원래는 10개 프레임을 보내는 정도의 딜레이를 예상했는데, 1000개 프레임을 보내는 딜레이를 감내해야 1개 오브젝트를 받게 될 수도 있을 것이다. 이런 문제는 어떻게 해결할까?)

 


단일 TCP 연결에 대한 HTTP/2 는 여전히 패킷 loss 복구에 대해 지연이 발생한다는 문제점을 갖고 있다.

(중간 데이터 하나가 없으면 그 뒷 데이터를 보낼 수 없다.)

그래서 이를 해결하려고 브라우저는 HTTP/2를 사용할 때도 병렬 연결을 만들게 된다.

 

하지만 이는 성능상에 문제도 있고, 기존 TCP 연결에는 보안이 취약하다는 문제도 있었다.

따라서 이를 개선하기 위해 HTTP/3 이 제시되었고, 현재는 HTTP/3 이 주로 사용된다.

(이 내용은 transport layer 에서 자세히 다룬다.)

반응형
저작자표시 비영리 변경금지 (새창열림)

'CS > 컴퓨터 네트워크' 카테고리의 다른 글

[컴퓨터 네트워크] 13. Application Layer (6) : Video Streaming And CDN  (0) 2024.04.18
[컴퓨터 네트워크] 12. Application Layer (5) : DNS  (0) 2024.04.18
[컴퓨터 네트워크] 10. Application Layer (3) : Web Cache  (0) 2024.04.16
[컴퓨터 네트워크] 9. Application Layer (2) : HTTP와 Cookie  (1) 2024.04.13
[컴퓨터 네트워크] 8. Application Layer (1) : 어플리케이션 계층 개요  (0) 2024.04.11
'CS/컴퓨터 네트워크' 카테고리의 다른 글
  • [컴퓨터 네트워크] 13. Application Layer (6) : Video Streaming And CDN
  • [컴퓨터 네트워크] 12. Application Layer (5) : DNS
  • [컴퓨터 네트워크] 10. Application Layer (3) : Web Cache
  • [컴퓨터 네트워크] 9. Application Layer (2) : HTTP와 Cookie
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (614)
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (44)
        • 생각 정리 (22)
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8)
        • express.js (1)
        • Spring & Spring Boot (7)
      • WEB(FE) (2)
        • html, css, js (1)
        • React.js (1)
      • Tool & Language (6)
        • Edit Plus (1)
        • Git (1)
        • Python3 (2)
        • Java (2)
      • Infra (12)
        • AWS (1)
        • Oracle Cloud (8)
        • Firebase (2)
        • Network (1)
      • Android (18)
        • Java (6)
        • Flutter (12)
      • Window (2)
        • Visual Studio 없이 WPF (1)
        • MFC (1)
      • 독서 (14)
        • Inside Javascript (7)
        • Database Internals (6)
        • 한 글 후기 (1)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[컴퓨터 네트워크] 11. Application Layer (4) : HTTP/2
상단으로

티스토리툴바