네트워크/HTTP

HTTP/2: 멀티플렉싱(Multiplexing)

shimdh 2025. 3. 7. 09:23
728x90

현대 웹 환경에서는 사용자 경험을 극대화하기 위해 빠르고 효율적인 데이터 전송이 필수적입니다. HTTP/2는 이러한 요구를 충족시키기 위해 기존 HTTP/1.x의 한계를 극복하고 여러 가지 혁신적인 기능을 도입했습니다. 그 중에서도 가장 핵심적인 기술이 바로 멀티플렉싱(Multiplexing) 입니다.

멀티플렉싱은 단일 TCP 연결을 통해 여러 개의 요청과 응답을 동시에 처리할 수 있는 기능으로, 이를 통해 대기 시간(latency)을 줄이고 네트워크 자원을 보다 효율적으로 활용할 수 있습니다.


1. HTTP/1.x에서의 문제점과 멀티플렉싱의 필요성

기존 HTTP/1.x는 웹페이지가 로드될 때 각 리소스 요청마다 별도의 연결을 생성하거나, 같은 연결에서 순차적으로 요청을 처리해야 하는 방식이었습니다. 이로 인해 다음과 같은 문제가 발생했습니다.

1) 연결당 요청 개수 제한

✔ HTTP/1.0에서는 하나의 요청을 처리할 때마다 새로운 TCP 연결이 필요했습니다.
✔ HTTP/1.1에서 지속적 연결(Persistent Connection) 이 도입되었지만, 한 번에 하나의 요청만 처리 가능하여 여전히 비효율적이었습니다.

📌 결과적으로
한 요청이 완료될 때까지 다른 요청이 대기해야 하는 문제 발생
동시에 여러 개의 리소스를 요청하면 브라우저에서 강제적으로 여러 개의 TCP 연결을 생성해야 함


2) HOL(Head-of-Line) 블로킹 현상

✔ HTTP/1.x에서는 한 요청이 완료될 때까지 다음 요청이 대기해야 했습니다.
✔ 만약 첫 번째 요청이 오래 걸린다면, 뒤에 있는 모든 요청들이 지연되며 전체 페이지 로딩 속도가 느려졌습니다.

📌 예제 (HTTP/1.x 방식)
1️⃣ 클라이언트가 HTML 문서를 요청
2️⃣ HTML 문서가 로드된 후, CSS 파일을 요청
3️⃣ CSS 파일이 다운로드된 후, 이미지 파일 요청
✔ 모든 요청이 순차적으로 진행되며 속도가 느려짐

📌 HTTP/2 멀티플렉싱 적용 후
단일 TCP 연결에서 여러 요청을 동시에 처리
모든 리소스(HTML, CSS, JS, 이미지 등)가 병렬로 로드 가능
웹페이지 로딩 속도가 대폭 향상


2. HTTP/2 멀티플렉싱의 작동 방식

1) 단일 연결 사용 (Single TCP Connection)

HTTP/2는 단 하나의 TCP 연결에서 여러 개의 요청을 동시에 처리 가능
이전처럼 여러 개의 연결을 생성할 필요가 없으며, 네트워크 자원을 절약 가능

📌 비교

프로토콜 TCP 연결 개수 동시 요청 가능 여부 속도
HTTP/1.1 여러 개 필요 불가능 느림
HTTP/2 1개 가능 빠름

2) 스트림(Stream) 개념 도입

✔ HTTP/2는 "스트림(Stream)" 이라는 독립적인 데이터 흐름을 사용
✔ 각 요청 및 응답은 개별 스트림으로 처리되며, 서로 영향을 주지 않음
✔ 각 스트림에는 고유한 식별자(Stream ID) 가 부여되어 클라이언트와 서버가 이를 구분 가능

📌 예제
✅ 클라이언트가 한 웹페이지를 로드할 때 스트림을 통해 HTML, CSS, JS, 이미지 파일을 동시에 요청 가능

HTML 요청 → 스트림 1 (Stream ID: 1)
CSS 요청 → 스트림 2 (Stream ID: 2)
JavaScript 요청 → 스트림 3 (Stream ID: 3)
이미지 요청 → 스트림 4 (Stream ID: 4)

✔ 모든 스트림이 동시에 처리되므로 대기 시간 없이 빠르게 응답 가능


3) 우선순위(Priority) 설정 기능

✔ HTTP/2는 각 스트림마다 우선순위를 설정하여 중요한 리소스를 먼저 로드 가능
✔ 웹페이지에서 CSS, 핵심 JavaScript 파일을 먼저 로드하고, 부수적인 이미지나 광고는 나중에 로드 가능

📌 예제
메인 콘텐츠 > CSS 파일 > 광고 배너 순으로 우선순위 지정

가장 중요한 리소스가 먼저 로드되므로 페이지 렌더링 속도가 대폭 향상


3. HTTP/2 멀티플렉싱 vs HTTP/1.1 비교

항목 HTTP/1.1 HTTP/2
연결 방식 여러 개의 TCP 연결 필요 단일 TCP 연결 사용
동시 요청 제한적 여러 개의 요청을 동시에 처리 가능
HOL 블로킹 발생 해결됨
헤더 압축 없음 HPACK 압축 사용
서버 푸시 지원하지 않음 지원

📌 결론
✔ HTTP/2는 단일 TCP 연결 내에서 멀티플렉싱을 통해 빠른 데이터 전송, 지연 시간 감소, 네트워크 자원 절약을 가능하게 함


4. HTTP/2 멀티플렉싱 실용적 사례

📌 1) 웹사이트 성능 개선

기존 HTTP/1.x 방식
✔ 클라이언트가 HTML 문서를 요청하면
✔ HTML 문서가 로드된 후 CSS 파일 요청
✔ CSS 파일이 로드된 후 JavaScript 파일 요청
✔ 이후 이미지 파일 요청

순차적으로 진행되므로 속도가 느림

HTTP/2 멀티플렉싱 적용 후
✔ 클라이언트가 HTML을 요청하는 동시에 CSS, JS, 이미지 파일을 병렬로 다운로드 가능
페이지 렌더링 속도가 대폭 향상됨


📌 2) REST API 성능 향상

기존 REST API 호출 (HTTP/1.1)
✔ 클라이언트가 여러 개의 API 요청을 보내야 할 경우, 각 요청이 순차적으로 처리됨
✔ 데이터가 많아질수록 API 응답 시간이 길어짐

HTTP/2 적용 후
✔ 여러 개의 API 요청을 동시에 병렬 처리 가능
페이지가 더 빠르게 로드됨


5. 결론

HTTP/2 멀티플렉싱은 현대 웹 환경에서 필수적인 성능 최적화 기술
단일 TCP 연결을 통해 여러 개의 요청을 동시에 처리 가능
대기 시간 감소, 네트워크 자원 절약, 페이지 로딩 속도 향상
REST API, 웹사이트 성능 개선, 대규모 트래픽 처리에 효과적

💡 HTTP/2 멀티플렉싱을 적용하여 웹 성능을 최적화하세요! 🚀

728x90