피드로 돌아가기
Dev.toBackend
원문 읽기
HTTP/2 Multiplexing 도입을 통한 TCP Handshake 오버헤드 제거 및 지연 시간 최적화
HTTP/2 Multiplexing: Why One Connection Is Enough
AI 요약
Context
매 요청마다 새로운 TCP Connection을 생성함에 따른 Three-way Handshake 지연 시간 발생. HTTP/1.1의 순차적 요청 처리 방식이 야기하는 Head-of-Line Blocking 현상으로 인한 고동시성 시스템의 처리 성능 저하.
Technical Solution
- ForceAttemptHTTP2 설정을 통한 HTTP/2 프로토콜 강제 적용 및 TCP Connection 재사용 구조 설계
- Multiplexing 기술을 통한 단일 Connection 내 다수 Request/Response 병렬 전송 및 큐잉 지연 제거
- HPACK 압축 포맷 적용으로 중복 Header 전송량을 최소화하여 네트워크 대역폭 및 CPU 오버헤드 절감
- MaxIdleConnsPerHost 최적화를 통한 Idle Connection 유지 및 Cold Start 시의 연결 설정 비용 분산
- Stream 단위 에러 핸들링 설계를 통한 개별 요청 실패 시 Connection 전체의 영향을 방지하는 가용성 확보
- GOAWAY 프레임 처리 로직 구현으로 서버의 Graceful Shutdown 시 데이터 손실 방지 및 자원 회수
실천 포인트
1. Go http.Transport 설정 시 ForceAttemptHTTP2 활성화 여부 검토
2. 서비스 트래픽 패턴에 따른 MaxIdleConnsPerHost 및 IdleConnTimeout 수치 튜닝
3. 단일 연결 장애가 전체 스트림에 미치는 영향을 분석하여 Stream-level 에러 처리 로직 구현
4. 대규모 헤더 전송이 빈번한 API의 경우 HPACK 적용 효율성 측정