HTTP

HTTP(Hypertext Transfer Protocol)
Application 계층에서 사용되는 프로토콜이며 웹 서비스 통신에 사용된다. HTTP1.0부터 시작하여 HTTP1.1, HTTP2, HTTP3로 발전해왔다.
목차
HTTP/1.0
기본적으로 한 연결 당 하나의 요청을 처리하도록 설계된 프로토콜이다. 이는 RTT를 증가시키는 원인이 된다.
RTT(Round Trip Time) 증가
서버로부터 파일을 가져올 때마다 TCP 연결을 위해 3-way handshake를 수행해야 하며, 이는 RTT를 증가시킨다.
RTT 증가 해결 방법
이미지 스플리팅
많은 이미지를 다운로드 받게 되면 과부하가 걸리기 때문에 많은 이미지가 합쳐 있는 하나의 이미지를 다운로드 받고, 이를 기반으로 background-image의 position을 이용하여 이미지를 표기하는 방법이다.
코드 압축 개행 문자, 공백 등을 제거하여 파일 크기를 줄이는 방법이다. 이를 통해 다운로드 시간을 단축시킬 수 있다.
이미지 Base64 인코딩 이미지를 Base64로 인코딩하여 HTML에 직접 삽입하는 방법이다. 이미지에 대한 추가적인 요청을 할 필요가 없어 HTTP 요청 수를 줄일 수 있지만, 파일 크기가 커질 수 있다.
HTTP/1.1
HTTP/1.0의 문제점을 해결하기 위해 지속적인 연결을 지원한다.
한 번 연결 후 keep-alive 옵션으로 지속적인 연결을 통해 하나의 TCP 연결로 여러 요청을 처리할 수 있어 RTT를 줄일 수 있다.
HTTP/1.0에서도 keep-alive를 지원하지만 표준화가 되어 있지 않았고, HTTP/1.1부터 표준화가 되어 기본 옵션으로 설정되어 있다.
HOL(Head Of Line) Blocking
HTTP/1.1은 요청이 순차적으로 처리되기 때문에, 하나의 요청이 지연되면 그 뒤의 모든 요청이 지연되는 문제가 있다. 예를 들어 이미지를 먼저 다운로드 받고, 그 다음에 HTML을 다운로드 받는 경우, 이미지가 다운로드 되지 않으면 HTML도 다운로드 되지 않는 문제가 발생한다.
무거운 헤더 구조
HTTP/1.1의 헤더에는 쿠기 등 많은 메타데이터가 포함되어 있고 압축이 되지 않아 헤더 크기가 커지는 문제가 있다.
HTTP/2
SPDY(Speedy) 프로토콜에서 파생된 프로토콜로, HTTP/1.X의 문제점을 해결하기 위해 개발되었다. HTTP/2는 멀티플렉싱, 헤더 압축, 서버 푸시, 스트림 우선순위 등의 기능을 제공하여 성능을 향상시킨다.
멀티플렉싱
여러 개의 스트림을 사용하여 하나의 TCP 연결로 여러 요청을 동시에 처리할 수 있다. 이를 통해 특정 스트림의 지연 혹은 실패가 다른 스트림에 영향을 미치지 않도록 한다. 단일 연결을 사용하여 병렬적으로 요청을 처리할 수 있어 HOL Blocking 문제를 해결한다.
헤더 압축
허프만 코딩(Huffman coding) 알고리즘을 사용하는 HPACK이라는 헤더 압축 방식을 사용하여 헤더 크기를 줄인다.
서버 푸시
서버가 클라이언트의 요청 없이도 리소스를 푸시할 수 있는 기능을 제공한다. html에는 css와 js 파일이 높은 확률로 포함되어 있기 때문에, 서버가 html을 보내는 것과 동시에 css와 js 파일을 푸시할 수 있다.
HTTPS
HTTP2는 HTTPS 위에서 동작한다. HTTPS는 HTTP 프로토콜에 SSL/TLS 암호화 계층을 추가하여 보안을 강화한 프로토콜이다.
SSL/TLS
SSL(Secure Sockets Layer) 1.0, SSL 2.0, SSL 3.0, TLS(Transport Layer Security) 1.0, TLS 1.1, TLS 1.2, TLS 1.3 등으로 발전해왔다. 마지막 명칭은 TLS 1.3이지만, 보통 이를 합쳐 SSL/TLS라고 부른다. SSL/TLS는 대칭키 암호화, 비대칭키 암호화, 해시 함수를 사용하여 데이터를 암호화하고 무결성을 보장한다. SSL/TLS는 클라이언트와 서버 간의 보안 연결을 설정하는 데 사용되며, 인증서 기반의 인증을 통해 신뢰성을 확보한다.
보안 세션 보안 세션이란 보안이 시작되고 끝나는 동안 유지되는 세션을 말한다. SSL/TLS는 handshake를 통해 보안 세션을 설정하고 이를 기반으로 상태 정보 등을 공유한다.
클라이언트에서 사이퍼 슈트를 서버에 전달하면 서버는 받은 사이퍼 슈트의 암호화 알고리즘 리스트를 제공할 수 있는지 확인한다. 서버가 제공할 수 있는 사이퍼 슈트가 있다면, 서버에서 클라이언트로 인증서를 보내는 인증 과정이 시작되고, 이후 해싱 알고리즘 등으로 암호화된 데이터의 송수신이 시작된다.
사이퍼 슈트(Cypher Suite) 사이퍼 슈트는 프로토콜, 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
예를 들어 TLS_AES_128_GCM_SHA256에는 세 가지 규약이 포함되어 있는데, TLS는 프로토콜, AES_128_GCM은 AEAD 사이퍼 모드, SHA256은 해싱 알고리즘을 의미한다.
AEAD(Authenticated Encryption with Associated Data) 사이퍼 모드
AEAD는 데이터 암호화 알고리즘이며 AES_128_GCM 등이 있다. AES_128_GCM은 128비트의 키를 사용하는 표준 블록 암호화 기술과 병렬 계산에 용이한 Galois/Counter Mode(GCM)이 결합된 알고리즘이다.
인증 매커니즘 인증 매커니즘은 CA(Certificate Authority)에서 발급한 인증서를 기반으로 이루어진다. CA에서 발급한 인증서는 안전한 연결을 시작하는 데 있어 필요한 '공개키'를 클라이언트에 제공하고, 사용자가 접속한 '서버가 신뢰'할 수 있는 서버임을 보장한다. 인증서는 서비스 정보, 공개키, 지문, 디지털 서명 등으로 이루어져 있다. CA는 아무 기업이나 될 수 없으며 신뢰성이 엄격하게 공인된 기업들만 참여할 수 있다. 대표적인 기업으로는 Comodo, GoDaddy, GlobalSign, Amazon Trust Services 등이 있다.
CA 발급 과정 서비스가 CA 인증서를 발급 받기 위해서는 사이트 정보와 공개키를 CA에 제출해야 한다. 이후 CA는 공개키를 해시한 값인 지문(finger print)을 사용하여 디지털 서명을 생성하고, 인증서를 발급한다.
암호화 알고리즘 키 교환 암호화 알고리즘으로는 대수곡선 기반의 ECDHE(Elliptic Curve Diffie-Hellman Ephemeral) 또는 모듈식 기반의 DHE(Diffie-Hellman Ephemeral) 알고리즘을 사용한다. 두 알고리즘 모두 디피-헬만 키 교환을 기반으로 만들어졌다.
디피-헬만(Diffie-Hellman) 키 교환 디피-헬만 키 교환 암호화 알고리즘은 의 식에서 , , 를 알고 있을 때, 를 구할 수 있지만, , , 를 알고 있을 때, 를 구할 수 없는 원리를 기반으로 한다.
- 공개 값은 공유하고 각자의 비밀 값과 혼합한 후 공유한다.
- 1에서 공유한 값을 각자의 비밀 값과 다시 혼합한다.
- 공통 암호키인
PSK(Pre-Shared Key)를 생성한다.
Hashing 알고리즘 해싱 알고리즘은 데이터를 고정된 크기의 해시 값으로 변환하는 알고리즘이다. SSL/TLS에서는 SHA-256, SHA-384, SHA-512 등의 해싱 알고리즘을 사용한다.
SHA-256 SHA-256은 256비트의 해시 값을 생성하는 알고리즘으로, SHA-2 계열에 속한다. SHA-256은 64바이트의 입력 데이터를 32바이트의 해시 값으로 변환한다. SHA-256은 보안성이 높고 충돌 저항성이 뛰어나며, 블록체인, 디지털 서명, 인증서 등 다양한 분야에서 사용된다.
SEO에도 도움이 되는 HTTPS
HTTPS는 보안성을 높이는 것 외에도 SEO(검색 엔진 최적화)에 긍정적인 영향을 미친다. 검색 엔진은 HTTPS를 사용하는 사이트를 더 신뢰할 수 있는 사이트로 간주하며, 이는 검색 순위에 긍정적인 영향을 미친다.
SEO(Search Engine Optimization) SEO는 검색 엔진에서 웹사이트의 가시성을 높이는 기술과 전략을 말한다. 검색 엔진은 HTTPS를 사용하는 사이트를 더 신뢰할 수 있는 사이트로 간주하며, 이는 검색 순위에 긍정적인 영향을 미친다. 이를 위한 방법으로 캐노니컬 설정, 메타 설정, 페이지 속도 개선, 사이트맵 관리 등이 있다.
캐노니컬 설정
<link rel="canonical" href="https://example.com/page" />와 같이 페이지의 정규 URL을 설정하는 것이다.
메타 설정
<meta name="description" content="페이지 설명" />와 같이 페이지의 설명을 설정하는 것이다.
페이지 속도 개선 페이지 속도를 개선하기 위해 이미지 최적화, 코드 압축, 캐싱 등을 활용한다. PageInsights와 같은 도구를 사용하여 페이지 속도를 측정하고 개선할 수 있다.
사이트맵(sitemap.xml) 관리 사이트맵은 검색 엔진이 웹사이트의 구조를 이해하고 인덱싱하는 데 도움을 주는 XML 파일이다.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2025-06-16</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
</urlset>
HTTPS 구축 방법
HTTPS를 구축하는 방법으로는 직접 CA에서 구매한 인증키를 기반으로 구축하는 방법, HTTPS를 지원하는 Load Balancer를 사용하는 방법, HTTPS를 지원하는 CDN을 사용하는 방법이 있다.
HTTP/3
HTTP/3은 HTTP/1.1 및 HTTP/2와 함께 WWW(World Wide Web)에서 사용되는 HTTP의 세 번째 주요 버전이다. TCP 위에서 동작하는 HTTP/2와 달리, HTTP/3은 QUIC 프로토콜 위에서 동작한다.
QUIC(Quick UDP Internet Connections)
QUIC는 UDP 기반의 전송 프로토콜로, HTTP/3의 기반이 된다. QUIC는 TCP의 연결 설정과 TLS의 보안 기능을 통합하여 빠른 연결 설정과 낮은 지연 시간을 제공한다. QUIC는 연결 설정을 위한 0-RTT(Zero Round Trip Time) 핸드쉐이크를 지원하여, 초기 연결 시 지연 시간을 최소화한다. 또한, 순방향 오류 수정 매커니즘(FEC, Forward Error Correction)을 사용하여 패킷 손실을 최소화하고, 멀티플렉싱을 지원하여 HOL Blocking 문제를 해결한다.