Skip to content

Commit

Permalink
HTTP2와_gRPC.md 업데이트
Browse files Browse the repository at this point in the history
  • Loading branch information
JadenKim-dev authored Sep 4, 2024
1 parent 0003a2d commit 26e33d4
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions gRPC/HTTP2와_gRPC.md
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의 효율적인 데이터 전송과 병렬 처리를 가능하게 하는 핵심 요소입니다.

0 comments on commit 26e33d4

Please sign in to comment.