-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0003a2d
commit 26e33d4
Showing
1 changed file
with
55 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
## HTTP2 프로토콜 | ||
|
||
HTTP/2(하이퍼텍스트 전송 프로토콜 버전 2)는 기존의 HTTP/1.x 프로토콜의 단점을 보완하고 웹 성능을 향상시키기 위해 개발된 프로토콜입니다. | ||
HTTP/2는 효율적인 웹 전송을 목표로 여러 가지 새로운 기능과 개선 사항을 도입했습니다. | ||
|
||
1. **멀티플렉싱(Multiplexing):** | ||
HTTP/2는 하나의 연결에서 여러 요청과 응답을 동시에 처리할 수 있습니다. 이는 HTTP/1.x에서의 `단일 연결당 단일 요청/응답` 모델과는 큰 차이를 보이며, 여러 요청을 동시에 보내고 받을 수 있어 성능이 크게 향상됩니다. | ||
|
||
2. **헤더 압축(Header Compression):** | ||
HTTP/2는 요청과 응답 헤더를 효율적으로 압축합니다. HPACK이라는 압축 방식을 사용하여 헤더 크기를 줄이고, 이를 통해 대역폭 사용을 최적화하고 전송 속도를 높입니다. | ||
|
||
3. **서버 푸시(Server Push):** | ||
서버는 클라이언트가 요청하지 않은 리소스도 미리 전송할 수 있습니다. 예를 들어, 클라이언트가 HTML 파일을 요청하면 서버는 CSS나 JavaScript 파일도 함께 전송하여 페이지 로딩 속도를 높일 수 있습니다. | ||
|
||
4. **스트림 우선순위(Stream Prioritization):** | ||
클라이언트는 여러 스트림에 우선순위를 부여할 수 있습니다. 이를 통해 중요한 리소스가 먼저 전송되고, 덜 중요한 리소스는 나중에 전송되어 웹 페이지 로딩이 최적화됩니다. | ||
|
||
5. **연결 지속성 및 보안:** | ||
HTTP/2는 기본적으로 TLS(전송 계층 보안)를 사용하여 데이터의 기밀성과 무결성을 보장합니다. 또한, HTTP/2는 하나의 지속적인 연결에서 모든 요청과 응답을 처리할 수 있어 연결 설정 오버헤드가 감소합니다. | ||
|
||
## 스트림과 프레임 | ||
|
||
HTTP/2는 데이터를 효율적으로 전송하기 위해 **스트림(Stream)**과 **프레임(Frame)**이라는 개념을 도입했습니다. | ||
이들은 HTTP/2의 핵심 구성 요소로, 데이터를 전송하고 관리하는 방식에 중요한 역할을 합니다. | ||
|
||
### 1. 스트림(Stream) | ||
|
||
**스트림**은 HTTP/2 연결 내에서 교환되는 독립적인 논리적 데이터 흐름입니다. 하나의 HTTP/2 연결에는 여러 개의 스트림이 존재할 수 있으며, 각 스트림은 클라이언트와 서버 간의 요청과 응답을 처리하는데 사용됩니다. | ||
|
||
- **양방향 통신:** 스트림은 양방향 통신을 지원합니다. 즉, 스트림은 클라이언트에서 서버로, 서버에서 클라이언트로 데이터를 전송할 수 있습니다. | ||
- **고유한 ID:** 각 스트림은 고유한 스트림 ID를 가지고 있으며, 이 ID를 통해 스트림을 식별하고 관리합니다. | ||
- **우선순위:** 스트림은 우선순위(Priority)를 가질 수 있습니다. 클라이언트는 여러 스트림의 우선순위를 설정하여 중요한 데이터가 먼저 전송되도록 할 수 있습니다. | ||
- **병렬 처리:** HTTP/2에서는 여러 스트림을 병렬로 처리할 수 있습니다. 이는 HTTP/1.x의 순차적 요청/응답 처리 모델과는 달리, 동시에 여러 요청을 처리할 수 있게 하여 성능을 향상시킵니다. | ||
|
||
### 2. 프레임(Frame) | ||
|
||
**프레임**은 HTTP/2에서 가장 작은 전송 단위입니다. 모든 HTTP/2 통신은 프레임으로 나뉘어져 전송되며, 스트림은 이러한 프레임들의 집합으로 이루어집니다. HTTP/2에서 데이터는 반드시 프레임 단위로 분할되어 전송됩니다. | ||
|
||
- **프레임 유형:** HTTP/2에는 다양한 유형의 프레임이 존재하며, 각 프레임은 특정한 목적을 가집니다. 예를 들어: | ||
- **HEADERS 프레임:** HTTP 요청이나 응답의 헤더 정보를 포함합니다. | ||
- **DATA 프레임:** 실제 데이터(payload)를 포함합니다. | ||
- **PRIORITY 프레임:** 스트림의 우선순위를 지정합니다. | ||
- **RST_STREAM 프레임:** 스트림을 강제로 종료할 때 사용됩니다. | ||
- **SETTINGS 프레임:** 연결 설정을 지정합니다. | ||
- **WINDOW_UPDATE 프레임:** 흐름 제어를 위해 사용되며, 데이터 전송 가능 크기를 관리합니다. | ||
|
||
- **프레임 헤더:** 각 프레임에는 고유의 프레임 헤더가 있습니다. 이 헤더에는 프레임의 길이, 타입, 스트림 ID, 플래그 등이 포함되어 있으며, 프레임의 전달과 처리를 관리합니다. | ||
- **프레임 재조립:** 클라이언트와 서버는 전송된 프레임들을 조립하여 완전한 요청이나 응답 메시지를 복원합니다. | ||
|
||
### 스트림과 프레임의 관계 | ||
|
||
- 하나의 스트림은 여러 개의 프레임으로 구성될 수 있습니다. 예를 들어, 하나의 스트림에서 HEADERS 프레임으로 요청 헤더가 전송되고, 이어서 여러 개의 DATA 프레임으로 실제 데이터가 전송될 수 있습니다. | ||
- HTTP/2에서 여러 스트림은 동일한 연결을 공유하며, 각 스트림의 프레임은 혼재되어 전송될 수 있습니다. 이를 통해 네트워크 효율성이 향상됩니다. | ||
|
||
요약하자면, **스트림**은 HTTP/2 연결 내에서 독립적인 데이터 흐름을 나타내고, **프레임**은 이 스트림을 구성하는 최소 단위의 데이터 블록입니다. 이 두 구성 요소는 HTTP/2의 효율적인 데이터 전송과 병렬 처리를 가능하게 하는 핵심 요소입니다. |