title: HTTP The Definitive Guide - 10. HTTP-NG
date: 2022-12-01
tags:
- Network
- HTTP
Introduction
GDSC에서 해당 서적을 통해 HTTP를 공부하는 스터디에 참가하고 있다.
HTTP 이전의 내용은 개인적으로 공부하며 채울 예정이다.
이번 Chapter는 10장 HTTP-NG
이다.
Purpose
서적 집필 당시 HTTP의 발전과 미래에 대해 학습한다.
국내 번역본의 경우 HTTP 2.0의 8번째 초안을 기준으로 작성되었으며, Google에서 제안한 SPDY Protocol에 관한 내용이 존재한다.
다만 본인은 원서를 통해 학습을 진행하기에 이러한 내용이 없는 HTTP 2.0의 초안에 대한 내용만 존재한다.
현재 HTTP 2.0이 표준화된 후 HTTP 3.0까지 제안된 시점에서 번역본과 원서 중 어떤 것을 다루더라도 큰 도움은 되지 않을 것이다.
번역본을 이용한 정리는 다른 포스팅이 많이 존재하기에, 본 포스팅에서는 원서를 바탕으로 내용을 정리한다.
Chapter명의 NG는 Next Generation의 약자이다.
HTTP's Growing Pain
초기의 HTTP는 단순히 Multimedia Content를 전송하기 위한 단순한 기술이었으나, 훨씬 다양한 기능을 탑재한 기술로 발전하였다.
HTTP 1.1의 도입 이후 여러 문제가 발생하였으며, 최소 4가지 이상의 문제가 존재하였다.
- Complexity - HTTP에 다양한 독립적인 기능이 추가되어 복잡해졌으며, HTTP S/W 구현에 어려움이 생겼다.
- Extensibility - 오래된 HTTP를 이용하는 Legacy들이 존재하며, 이러한 Legacy는 확장성을 지원하지 않기에 HTTP를 점진적으로 개선하는 것이 어렵다.
- Performance - 긴 Latency와 적은 Throughput의 무선 통신 기술을 사용하기에 성능이 좋지 않다.
- Transport Dependence - TCP/IP 기반으로 구현되었으며, 이를 개선하는 작업은 이루어지지 않았다. 이때는 HTTP 2.0 도입 이전이었으며, 현재는 UDP 기반의 QUIC Protocol을 사용하는 HTTP 3.0이 제안되었다.
HTTP-NG Activity
1997년 WWW Consortium에서 HTTP-NG를 제안하기 위한 프로젝트가 시작되었다.
1998년 HTTP-NG가 제안되었으며, 어떠한 부분에서 개선이 있었는지 알아본다.
Modularize and Enhance
HTTP-NG의 핵심은 Modularize and Enhance
이다.
여러 기능들을 독립적으로 다루는 대신, Protocol을 3개의 Layer로 나누었다.
HTTP-NG의 철학과 목표는 CORBA, DCOM과 같은 구조화, 객체지향, 그리고 분산 시스템이다.
집필 시기 기준 과거의 분산 시스템은 구현이 어렵고 복잡하였으며, HTTP-NG는 이러한 문제를 해결하고자 하였다.
Layer 1 : Messaging Transport Layer
Message를 효율적으로 보내는 Layer이다.
아래 항목들을 포함한 다양한 측면에서 성능 개선을 위해 노력하였다.
- Round-Trip Latency를 줄이기 위한 Pipelining과 Batching
- Connection 재사용을 통한 Latency 감소 및 Bandwidth 증가
- 병렬 처리가 가능한 Multiplexing Stream을 통한 Connection 최적화 및 Message Stream 부족 방지
- 효율적인 Message Segment를 통한 쉬운 Message Boundary 계산
Project Team에서는 이를 위해 WebMUX라는 Protocol을 제안하였다.
WebMUX는 고성능의 Message Protocol로 Interleaving한다.
뒤에서 WebMUX에 더 자세히 알아본다.
Layer 2 : Remote Invocation Layer
Client에서 Server에 대한 작업을 호출하는 원격 호출을 담당하는 Layer이다.
Server Request, Response와 같은 작업의 표준을 규정하는 Interface라고 이해하면 편하다.
CORBA, DCOM, Java RMI와 같은 객체 지향의 원격 호출 Framework가 존재하지만, 이를 지원하는 목적은 아니다.
HTTP 1.1에서 제공하는 HTTP RMI를 확장하며, 이를 일반적으로 사용할 수 있도록 하는 것이 목적이다.
Project Team은 Binary Wire Protocol을 제안하였다.
이 Protocol은 Server에 Request를 보내고 Response를 받는 작업을 고성능으로 이용할 수 있도록 한다.
뒤에서 Binary Wire Protocol에 더 자세히 알아본다.
Layer 3 : Web Application Layer
해당 Layer는 HTTP 1.1과 확장된 Interface를 동시에 이용할 수 있는 분산 시스템에 초점을 둔다.
여러 Application은 개별 API를 구성할 수도 있고, 다른 Application에서 사용하는 API를 그대로 이용할 수도 있도록 하는 것이 목표이다.
WebMUX
Project Team에서 WebMUX의 발전에 많은 투자를 하였다.
WebMUX의 목표는 간단한 설계, 고성능, Multiplexing, 데이터 수신 가능 알림, 데이터 순서 보존, Socket API 지원 등이다.
현재 WebMUX는 거의 사용되지 않는 것으로 보인다.
Binary Wire Protocol
HTTP-NG는 Object Type을 정의하여 각 Method와 URL에 Type을 부여한다.
또한 Connection에 State를 지정하여 효율성을 추가로 챙긴다.
Request와 Response 외에도 추가적인 제어용 Message를 정의하여 Connection을 더욱 효율적이고 견고하게 사용할 수 있도록 한다.
Current Status
집필 당시의 HTTP-NG 상황이다.
1998년 말, HTTP-NG Team은 이러한 HTTP-NG를 이용하는 것은 너무 이르다고 판단하였다.
당시 HTTP 1.0에서 HTTP 1.1로의 완전한 전환이 이루어지지 않았으며, HTTP-NG로의 명확한 전환 계획이 없다면 문제가 발생했을 것이라 생각한 것 같다.
이로 인해 두 가지 결정이 이루어졌다.
- HTTP-NG 제안 대신 WebMUX에 집중하였다. 다만 집필 당시 WebMUX를 작업할 집단이 생길만한 관심은 없었다.
- XML과 같은 것들을 이용하여 Web에서 사용할 수 있을 정도로 유연한 공식 Protocol Type을 만들 수 있는지 확인하였다. 이는 분산 시스템에서 매우 중요하며, 집필 당시에도 진행 중이었다.
Conclusion
서적 집필 당시 HTTP-NG라 불리는 HTTP의 발전에 대해 알아보았다.
현재는 Deprecated된 내용이 많은 것으로 추측되나, 서적에서 언급한 개념이나 내용들을 HTTP 2.0에서 찾을 수 있다.
본 포스팅은 원서를 기준으로 작성하였으며, 번역본에서는 원서와 다르게 HTTP 2.0을 중점적으로 다루기에 번역본 혹은 다른 포스팅도 찾아보는 것을 권장한다.
'Network' 카테고리의 다른 글
HTTP The Definitive Guide - 12. Basic Authentication (0) | 2022.12.05 |
---|---|
HTTP The Definitive Guide - 11. Client Identification and Cookie (0) | 2022.12.04 |
HTTP The Definitive Guide - 09. Web Robots (0) | 2022.11.30 |
HTTP The Definitive Guide - 08. Integration Points: Gateways, Tunnels, and Relays (0) | 2022.11.23 |
HTTP The Definitive Guide - 07. Caching (0) | 2022.11.22 |