네트워크/HTTP

HTTP/2와 HTTP/1.x의 포괄적 비교 분석: 웹 프로토콜의 진화

shimdh 2025. 3. 4. 09:55
728x90

웹의 기반 프로토콜인 HTTP(Hypertext Transfer Protocol)는 1991년 첫 등장 이후 지속적으로 발전해왔습니다. 특히 2015년에 도입된 HTTP/2는 이전 버전인 HTTP/1.x와 비교하여 획기적인 성능 향상과 새로운 기능들을 제공합니다. 이 문서에서는 두 프로토콜의 주요 차이점을 상세히 살펴보고, 각각의 장단점을 분석하겠습니다.

1. 연결 관리와 다중화

HTTP/1.x의 연결 처리 방식

  • 순차적 처리 (Head of Line Blocking)

    • 하나의 TCP 연결당 하나의 요청만 처리 가능
    • 각 요청은 이전 요청의 완료를 기다려야 함
    • 성능 개선을 위한 임시방편:
      • 도메인 샤딩 (여러 도메인으로 리소스 분산)
      • CSS 스프라이트 (이미지 통합)
      • 자바스크립트/CSS 번들링
  • 연결 제한

    • 브라우저별 도메인당 최대 연결 수 제한 (일반적으로 6-8개)
    • 연결 재사용을 위한 Keep-Alive 헤더 사용
    • 추가 연결 생성 시 TCP와 TLS 핸드셰이크 오버헤드 발생

HTTP/2의 혁신적 다중화

  • 스트림 기반 통신

    • 단일 TCP 연결 내에서 다수의 양방향 스트림 생성
    • 각 스트림은 독립적으로 요청/응답 처리
    • 스트림 간 간섭 없이 병렬 처리 가능
  • 프레임 레벨 통신

    • 모든 통신이 프레임 단위로 분할되어 전송
    • 프레임 타입:
      • HEADERS: 헤더 정보 전송
      • DATA: 실제 데이터 페이로드
      • PRIORITY: 스트림 우선순위 정보
      • RST_STREAM: 스트림 종료
      • SETTINGS: 연결 설정
      • PUSH_PROMISE: 서버 푸시 알림

2. 헤더 처리 메커니즘

HTTP/1.x의 헤더 처리

  • 텍스트 기반 전송

    • 모든 헤더가 일반 텍스트로 전송
    • 각 요청마다 중복된 헤더 정보 전송
    • 불필요한 대역폭 낭비 발생
  • 헤더 크기

    • 쿠키와 사용자 에이전트 정보로 인한 큰 헤더 크기
    • 모바일 환경에서 특히 문제가 됨
    • 캐싱을 통한 제한적 최적화만 가능

HTTP/2의 HPACK 압축

  • 정적 테이블 활용

    • 자주 사용되는 헤더 필드를 미리 정의
    • 인덱스 번호로 참조하여 중복 전송 방지
    • 61개의 자주 사용되는 헤더 필드 포함
  • 동적 테이블 관리

    • 세션별로 동적 헤더 테이블 생성
    • 이전에 전송된 헤더 값을 참조하여 재사용
    • 테이블 크기 동적 조절 가능
  • 허프만 인코딩

    • 문자열 값에 대한 추가 압축 적용
    • 일반적으로 30-80% 압축률 달성
    • UTF-8 문자열에 대해 효과적

3. 리소스 전송 최적화

HTTP/1.x의 제한적 전송

  • 클라이언트 주도형 통신

    • 모든 리소스는 클라이언트 요청 필요
    • 리소스 간 의존성 처리가 비효율적
    • 워터폴 효과로 인한 지연 발생
  • 최적화 기법

    • 리소스 인라인화
    • 이미지 스프라이트
    • 도메인 샤딩
    • 파일 번들링

HTTP/2의 서버 푸시

  • 선제적 리소스 전송

    • PUSH_PROMISE 프레임을 통한 알림
    • 클라이언트 캐시 상태 고려
    • 불필요한 푸시 방지 메커니즘
  • 최적화 시나리오

    • CSS와 JavaScript 파일 선제적 전송
    • 다음 페이지 리소스 미리 푸시
    • 이미지 갤러리의 다음 이미지 준비
    • 폰트 파일 조기 전송

4. 성능 최적화 기능

HTTP/1.x의 한계

  • 고정된 우선순위

    • 모든 요청이 동일한 우선순위로 처리
    • 중요 리소스 지연 가능성
    • 사용자 경험 저하
  • 에러 처리

    • 연결 단위의 에러 처리
    • 부분적 실패 복구 불가능
    • 전체 연결 재설정 필요

HTTP/2의 고급 기능

  • 스트림 우선순위

    • 가중치 기반 우선순위 (1-256)
    • 의존성 트리 구성 가능
    • 동적 우선순위 조정
  • 플로우 제어

    • 스트림별 독립적인 제어
    • 수신자 처리 능력 고려
    • 네트워크 혼잡 방지
  • 효과적인 에러 처리

    • 스트림 단위 에러 처리
    • RST_STREAM으로 부분 복구
    • 연결 유지하며 문제 해결

5. 보안과 성능의 통합

HTTP/1.x의 보안

  • 선택적 TLS 사용
    • HTTP와 HTTPS 혼용 가능
    • 중간자 공격 위험
    • 성능 저하 감수

HTTP/2의 보안 강화

  • TLS 필수화
    • 모든 주요 브라우저에서 TLS 요구
    • ALPN을 통한 프로토콜 협상
    • 최신 암호화 스위트 지원

결론

HTTP/2는 HTTP/1.x의 근본적인 한계를 해결하고 현대 웹의 요구사항을 충족시키는 혁신적인 프로토콜입니다. 다중화, 헤더 압축, 서버 푸시 등의 기능은 웹 성능을 획기적으로 개선했으며, 특히 모바일 환경과 대규모 웹 애플리케이션에서 그 가치가 더욱 빛납니다.

다만, HTTP/2의 이점을 최대한 활용하기 위해서는 기존의 최적화 패턴들을 재검토하고, 새로운 프로토콜의 특성에 맞는 개발 및 배포 전략을 수립해야 합니다. 이는 개발자들에게 도전이자 기회가 될 것입니다.

728x90