본문 바로가기

Network

[Network] HTTP

HTTP/1.0

  • 한 연결당 하나의 요청만 처리
  • RTT(Round Trip Time) 증가 문제 발생

RTT란?

패킷이 목적지에 도달하고 다시 출발지로 돌아오기까지 걸리는 시간. 즉, 왕복 시간.

RTT 증가 해결 방법

  1. 이미지 스플리팅
    • 여러 이미지를 합쳐 하나의 이미지로 다운로드한 후 background-image background-position을 이용하여 분리해서 표시
    #icons>li>a {
        background-image: url("icons.png");
        width: 25px;
        display: inline-block;
        height: 25px;
        repeat: no-repeat;
    }
    #icons>li:nth-child(1)>a {
        background-position: 2px -8px;
    }
    #icons>li:nth-child(2)>a {
        background-position: -29px -8px;
    }
  2. 코드 압축
    • 공백, 개행 등을 제거하여 크기를 줄임
    // 일반 코드
    const express = require('express')
    const app = express()
    const port = 3000
    
    app.get('/', (req, res) => {
        res.send('Hello World!')
    })
    
    app.listen(port, () => {
        console.log(`Example app listening on port ${port}`)
    })
    
    // 압축 코드
    const express=require("express"),app=express(),port=3e3;app.get("/",(e,p)=>{p.send("Hello World!")}),app.listen(3e3,()=>{console.log("Example app listening on port 3000")});
  3. 이미지 Base64 인코딩
    • 이미지 파일을 Base64 문자열로 인코딩하여 별도 요청 없이 사용 가능
    • 서버 요청을 줄일 수 있으나, 파일 크기가 약 37% 증가하는 단점

HTTP/1.1

  • TCP 연결을 유지하는 keep-alive 기능 도입
  • 리소스 요청 수에 따라 대기시간이 길어지는 단점 존재
  • HOL Blocking (Head Of Line Blocking): 선두 패킷이 지연되면 전체가 지연되는 현상
  • 쿠키 등 많은 메타데이터로 인해 헤더가 무거움

HTTP/2

  • SPDY 기반으로 발전
  • 멀티플렉싱, 헤더 압축, 서버 푸시, 요청 우선순위 처리 지원

멀티플렉싱

  • 하나의 연결에서 여러 스트림을 동시에 처리 가능
  • 특정 스트림의 오류가 다른 스트림에 영향을 주지 않음
  • HOL Blocking 문제 해결 가능

스트림(Stream)?

시간이 지남에 따라 순차적으로 전달되는 데이터 흐름

헤더 압축

  • HPACK 형식 사용
  • 허프만 코딩 알고리즘 기반

허프만 코딩: 자주 나타나는 문자는 짧게, 드물게 나타나는 문자는 길게 인코딩하여 전체 데이터를 압축하는 방식

서버 푸시

  • 클라이언트 요청 없이도 서버가 리소스를 사전 전달 가능

HTTPS

  • HTTP/2는 보통 HTTPS 기반에서 동작
  • SSL/TLS 계층을 통해 암호화된 안전한 통신 제공

SSL/TLS

  • 전송계층에서 보안을 제공하는 프로토콜
  • 중간자 공격 방지, 데이터 암호화, 인증 기능 제공
  • 보안 세션을 통한 상태 공유 및 암호화

보안 세션

  • SSL/TLS 핸드셰이크를 통해 생성
  • 인증, 키 교환, 해싱 알고리즘 기반으로 암호화 데이터 전송 수행

사이퍼 슈트 (Cipher Suites)

  • 사용 가능한 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘의 조합
  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256
  • TLS_AES_128_CCM_SHA256
  • TLS_AES_128_CCM_8_SHA256

AEAD 사이퍼 모드

  • 인증된 암호화 방식으로 AES_128_GCM 등이 있음

인증 메커니즘

  • CA(Certificate Authority)로부터 발급받은 인증서 기반
  • 공개키, 서비스 정보, 서명 등을 포함한 인증서를 통해 서버 신뢰 보장

CA 인증서 발급 절차

  1. 서비스 정보와 공개키 제출
  2. 공개키를 해시한 지문 기반으로 인증서 생성 및 발급

암호화 알고리즘

  • 키 교환 방식: ECDHE, DHE (Diffie-Hellman 기반)

Diffie-Hellman 키 교환

  • 수학적 계산 기반으로 키 공유
  • 비밀키 없이도 안전한 공통 암호 키(PSK) 생성

해싱 알고리즘

  • SHA-256, SHA-384 등 사용
  • 입력 메시지를 고정된 길이의 해시값으로 변환

예: SHA-256 결과값 (해시) → 08cc3029b838d4...


SEO 측면에서 HTTPS의 장점

  • HTTPS 사이트가 검색 순위에서 우위
  • 구글은 SSL 인증서를 강조

검색 엔진 최적화 (SEO)를 위한 체크리스트

<link re="canonical" href="https://example.com/page2.php" />
  • Canonical 설정
  • Meta 태그 설정 (예: description, og:title)
  • 페이지 속도 개선 (Google PageSpeed Insight 활용)
  • Sitemap(XML 형식) 관리

HTTPS 구축 방법

  1. 직접 CA에서 인증서 구매하여 설치
  2. 로드 밸런서에서 HTTPS 제공
  3. CDN을 통해 HTTPS 처리

HTTP/3

  • QUIC 프로토콜 위에서 동작 (TCP 아님, UDP 기반)
  • 초기 연결에서 3-way 핸드셰이크 생략, 0-RTT 연결 가능
  • 패킷 손실 복구에 강한 FEC(Forward Error Correction) 기능 포함

최신 웹 서비스는 성능과 보안을 위해 HTTP/2 이상 및 HTTPS 사용을 권장합니다.