[4회차] HTTP는 왜 1.1에서 2, 3까지 진화했을까? #43
Replies: 5 comments
-
HTTP/1.1에서 브라우저가 같은 서버에 여러 연결을 여는 이유는 요청을 한 줄에만 세우지 않기 위해서? 라고 생각합니다. 한 연결만 쓰면 앞 요청의 응답이 늦어질 때 뒤 요청들도 같이 기다려야 합니다. 근데 연결을 여러 개 열면 요청들이 여러 연결로 나뉘어서 처리되기 때문에, 한 연결에서 응답이 막혀도 다른 연결에서는 다른 요청이 계속 진행됩니다. 다만 이 방식은 HOL Blocking을 없앤 것은 아닙니다. 각각의 연결 안에서는 여전히 앞 응답이 막히면 뒤 응답이 영향을 받을 수 있습니다. 즉, 문제 자체를 해결한 것이 아니라 막히는 줄을 여러 개로 나눠서 영향 범위를 줄인 방식에 가깝습니다. 따라서 우회라고 말한 것 같습니다.
HTTP/2는 요청과 응답을 frame 단위로 나누고, 여러 stream을 하나의 연결 안에서 섞어서 보낼 수 있습니다. 이 부분에서 HTTP 계층의 HOL Blocking은 많이 해결됩니다. 하지만 HTTP/2도 결국 TCP 위에서 동작합니다. TCP는 데이터를 순서대로 전달해야 하는 프로토콜이라서, 중간에 패킷 하나가 손실되면 그 뒤의 데이터가 이미 도착했더라도 애플리케이션에 바로 넘기지 못합니다. HTTP/2의 여러 stream이 하나의 TCP 연결을 공유하기 때문에, TCP 계층에서 패킷 손실이 생기면 여러 stream이 같이 영향을 받을 수 있습니다. HTTP/3는 이 문제를 줄이기 위해 TCP 대신 QUIC을 사용합니다. QUIC은 UDP 위에서 동작하면서 stream을 독립적으로 관리하기 때문에 하나의 stream에서 패킷 손실이 발생해도 그 stream만 재전송을 기다리고, 다른 stream은 계속 진행할 수 있습니다.
UDP는 기본적으로 신뢰성을 보장하지 않습니다. 패킷이 사라져도 다시 보내주지 않고, 순서도 보장하지 않습니다. HTTP/3는 UDP를 그대로 사용하는 것이 아니라, UDP 위에 QUIC이라는 프로토콜을 올려서 사용합니다. TCP가 하던 신뢰성 보장 기능 중 필요한 것들을 QUIC이 애플리케이션 계층에 더 가깝게 구현한 것? 으로 알고 있습니다. |
Beta Was this translation helpful? Give feedback.
-
HTTP/1.1은 HOL Blocking을 분산시키기 위해, 브라우저가 동일한 서버에 6개 정도의 연결을 열어 병렬화하는 방법을 사용합니다.
Multiplexing은 TCP 위에서 동작하기 때문에, HTTP 계층의 HOL Blocking은 해결해도 TCP 계층의 HOL Blocking은 해결하지 못합니다. 즉, 패킷 하나가 손실되면 연결 전체가 대기하게 됩니다.
UDP 위에 QUIC라는 새로운 프로토콜을 얹어 신뢰성을 확보합니다. TCP가 처리하던 패킷 손실 감지, 재전송 등을 QUIC가 애플리케이션 계층에서 직접 구현해 통제합니다. |
Beta Was this translation helpful? Give feedback.
-
HTTP/1.1에서 브라우저는 같은 서버에 연결을 여러 개 열어 HOL Blocking에 대응했습니다. 이 방식이 어떻게 HOL Blocking을 완화하는지, 그리고 왜 "해결"이 아니라 "우회"라고 부르는지 설명해주세요.예전의 HTTP/1.1에서는 하나의 TCP 연결에서 요청을 순차적으로 처리했기 때문에, 앞선 요청의 응답이 지연되면 뒤따르는 요청도 함께 대기해야 하는 HOL Blocking 문제가 발생했습니다. HTTP/2는 Multiplexing으로 HTTP 계층의 HOL Blocking을 해결했지만, TCP 계층의 HOL Blocking은 여전히 남아있습니다. 왜 HTTP/2에서는 이 문제가 남게 되는지, 그리고 HTTP/3는 어떤 방식으로 이를 해결했는지 설명해주세요.HTTP/2는 전송 계층으로 TCP를 그대로 사용하며, HTTP/2의 모든 스트림이 하나의 TCP 연결을 공유합니다. HTTP/3는 TCP가 아닌 UDP를 기반으로 만들어졌습니다. UDP는 신뢰성을 보장하지 않는데도 HTTP/3가 어떻게 안정적인 데이터 전송을 할 수 있을까요?HTTP/3는 QUIC이라는 전송 프로토콜 위에서 동작하며, TCP가 제공하던 신뢰성 기능을 QUIC이 애플리케이션에서 직접 구현합니다. |
Beta Was this translation helpful? Give feedback.
-
1. HTTP/1.1에서 브라우저는 같은 서버에 연결을 여러 개 열어 HOL Blocking에 대응했습니다. 이 방식이 어떻게 HOL Blocking을 완화하는지, 그리고 왜 "해결"이 아니라 "우회"라고 부르는지 설명해주세요.HOL Blocking의 본질은 단일 큐의 순차 처리입니다. 다중 연결은 이 구조를 바꾼 게 아니라 큐를 여러 개 만든 것이라 생각합니다. 각 연결 내부에서는 여전히 동일한 문제가 존재합니다. 2. HTTP/2는 Multiplexing으로 HTTP 계층의 HOL Blocking을 해결했지만, TCP 계층의 HOL Blocking은 여전히 남아있습니다. 왜 HTTP/2에서는 이 문제가 남게 되는지, 그리고 HTTP/3는 어떤 방식으로 이를 해결했는지 설명해주세요.TCP는 바이트 스트림의 순서 보장이 핵심입니다. 패킷 하나가 유실되면 이후 패킷을 버퍼에 쌓아두고 재전송을 기다립니다. HTTP/2의 스트림은 논리적 개념일 뿐, TCP 입장에서는 단일 바이트 스트림이라 패킷 하나 유실 → 전체 스트림 블로킹이 발생합니다. HTTP/3는 TCP 대신 QUIC(UDP 기반) 을 사용합니다. QUIC은 스트림을 전송 계층에서 독립적으로 관리하므로, 특정 스트림의 패킷이 유실되어도 다른 스트림은 영향받지 않습니다. 3. HTTP/3는 TCP가 아닌 UDP를 기반으로 만들어졌습니다. UDP는 신뢰성을 보장하지 않는데도 HTTP/3가 어떻게 안정적인 데이터 전송을 할 수 있을까요?UDP는 신뢰성을 제공하지 않지만, QUIC이 애플리케이션 계층에서 직접 구현합니다.
TCP가 OS 커널에서 이를 처리했다면, QUIC은 이 모든 것을 UDP 위에서 직접 구현한 것입니다. 덕분에 OS에 종속되지 않고 더 빠르게 프로토콜을 개선할 수 있다는 장점도 있습니다. |
Beta Was this translation helpful? Give feedback.
-
|
HTTP/1.1에서 브라우저는 같은 서버에 연결을 여러 개 열어 HOL Blocking에 대응했습니다. 이 방식이 어떻게 HOL Blocking을 완화하는지, 그리고 왜 "해결"이 아니라 "우회"라고 부르는지 설명해주세요. 하나의 커넥션에 느린 요청이 다른 커넥션에 영향을 주지 않지만, 해당 커넥션 내에서는 여전히 HOL Blocking 문제가 발생할 수 있습니다. 해당 방식은 문제를 해결한 것이 아닌 단지 다른 커넥션으로 요청을 분산시킨 것이기에 "우회"라고 부릅니다. HTTP/2는 Multiplexing으로 HTTP 계층의 HOL Blocking을 해결했지만, TCP 계층의 HOL Blocking은 여전히 남아있습니다. 왜 HTTP/2에서는 이 문제가 남게 되는지, 그리고 HTTP/3는 어떤 방식으로 이를 해결했는지 설명해주세요. TCP는 신뢰성을 보장하는 프로토콜이기에 중간 패킷이 손실되면 뒤의 패킷을 받아도 애플리케이션에 넘기지 않기 때문에 TCP 계층의 HOL Blocking 문제가 남게됩니다. HTTP/3는 TCP가 아닌 UDP를 기반으로 만들어졌습니다. UDP는 신뢰성을 보장하지 않는데도 HTTP/3가 어떻게 안정적인 데이터 전송을 할 수 있을까요? QUID를 사용하여 신뢰성을 구현했습니다. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
🚀 발표 주제
HTTP는 왜 1.1에서 2, 3까지 진화했을까?
📅 발표일
2026-06-22
🙋 발표자
스타크
🗂️ 카테고리
🌐 Network
📚 발표 자료
업로드 예정
🎥 발표 영상
업로드 예정
🎯 핵심 개념 요약
HTTP 버전은 이전 버전의 병목을 해결해온 과정이다.
HTTP/1.1 — 연결 재사용, 그러나 HOL Blocking
HTTP/2 — Frame & Multiplexing
HTTP/3 — QUIC over UDP
🔗 미션과의 연결
백엔드 개발자는 보통 Controller·Service·Repository 위에서 일하지만, 그 아래 HTTP 계층을 알면:
📚 참고 자료
🙋♀️ 질문
HTTP/1.1에서 브라우저는 같은 서버에 연결을 여러 개 열어 HOL Blocking에 대응했습니다. 이 방식이 어떻게 HOL Blocking을 완화하는지, 그리고 왜 "해결"이 아니라 "우회"라고 부르는지 설명해주세요.
HTTP/2는 Multiplexing으로 HTTP 계층의 HOL Blocking을 해결했지만, TCP 계층의 HOL Blocking은 여전히 남아있습니다. 왜 HTTP/2에서는 이 문제가 남게 되는지, 그리고 HTTP/3는 어떤 방식으로 이를 해결했는지 설명해주세요.
HTTP/3는 TCP가 아닌 UDP를 기반으로 만들어졌습니다. UDP는 신뢰성을 보장하지 않는데도 HTTP/3가 어떻게 안정적인 데이터 전송을 할 수 있을까요?
Beta Was this translation helpful? Give feedback.
All reactions