HTTP와 HTTPS (HTTP and HTTPS)

한눈에 보기

HTTP는 웹의 요청과 응답을 주고받는 프로토콜이고, HTTPS는 이를 TLS 위에 얹어 암호화한 것이다. 무상태성, 인증서 신뢰 사슬, HTTP/1.1과 2, 3의 차이까지 비교해 정리한다.

최종 업데이트 2026.09.17

HTTP(HyperText Transfer Protocol)는 웹에서 클라이언트와 서버가 요청과 응답을 주고받는 애플리케이션 계층 프로토콜이고, HTTPS(HTTP Secure)는 그 통신을 TLS(Transport Layer Security) 위에 얹어 암호화한 것이다. HTTPS는 통신 내용의 기밀성과 무결성을 보장하고 인증서로 서버의 신원을 검증하므로, 현대 웹에서는 사실상 모든 서비스가 HTTPS를 기본으로 사용한다. HTTP 자체도 1.1에서 2, 3으로 발전하며 성능 한계를 계속 개선해 왔다.

HTTP의 기본 성격

HTTP는 요청과 응답이 한 쌍을 이루는 단순한 구조를 가진다. 요청은 메서드(GET, POST, PUT, DELETE 등)와 경로, 헤더, 본문으로 구성되고, 응답은 상태 코드(2xx 성공, 3xx 리다이렉트, 4xx 클라이언트 오류, 5xx 서버 오류)와 헤더, 본문으로 구성된다. 클라이언트는 항상 요청을 시작하는 쪽이고 서버는 응답하는 쪽이라는 역할 구분이 명확하며, 서버가 먼저 말을 걸어야 하는 실시간 알림 같은 요구는 웹소켓(WebSocket)이나 SSE(Server-Sent Events) 같은 별도 메커니즘으로 보완한다. 중요한 특징은 무상태(stateless)라는 점이다. 서버는 이전 요청을 기억하지 않으므로, 로그인 상태 같은 문맥은 쿠키(cookie)와 세션, 토큰으로 클라이언트가 매 요청에 실어 보내야 한다. 이 무상태성 덕분에 어떤 서버가 요청을 받아도 무방해져 서버를 수평 확장하기 쉽다는 장점이 생기고, 같은 이유로 캐시와 중계도 단순해진다.

평문 HTTP의 문제와 HTTPS의 해법

평문 HTTP는 세 가지 위협에 노출된다. 첫째, 경로상의 누구나 내용을 읽을 수 있는 도청, 둘째, 내용을 몰래 바꾸는 변조, 셋째, 공격자가 진짜 서버인 척하는 위장이다. HTTPS는 TLS를 통해 이 세 가지를 각각 해결한다.

HTTP와 HTTPS 차이: 평문 HTTP는 중간에서 아이디와 비밀번호를 그대로 읽을 수 있지만 HTTPS는 TLS로 암호화돼 가로채도 내용을 알 수 없다
HTTPS가 더하는 것은 «암호화» 하나가 아니다. 인증서로 상대가 진짜 그 서버인지 확인하고(인증), 전송 중 내용이 바뀌지 않았는지 검증하며(무결성), 내용을 감춘다(기밀성). 셋 중 하나만 빠져도 중간자 공격이 성립한다.
  • 기밀성: 핸드셰이크로 합의한 대칭키(symmetric key)로 본문과 헤더 전체를 암호화한다.
  • 무결성: 인증 태그가 포함된 AEAD(Authenticated Encryption with Associated Data) 방식으로 변조를 탐지한다.
  • 인증: 인증 기관(CA, Certificate Authority)이 서명한 인증서를 검증해 서버가 해당 도메인의 정당한 주인임을 확인한다.

세 요소 중 인증이 특히 중요하다. 암호화가 아무리 강해도 대화 상대가 공격자라면 비밀번호와 카드 번호를 공격자에게 안전하게 전달하는 꼴이 되기 때문이다.

인증서는 신뢰 사슬로 검증된다. 브라우저에 내장된 루트 CA가 중간 CA를 서명하고, 중간 CA가 서버 인증서를 서명하는 구조이며, 이 사슬 어딘가가 끊기면 브라우저는 경고를 띄운다. Let's Encrypt 같은 무료 자동화 CA의 등장으로 HTTPS 적용 비용이 크게 낮아졌고, HSTS(HTTP Strict Transport Security) 헤더를 쓰면 브라우저가 이후 접속을 항상 HTTPS로 강제한다.

HTTPS 연결이 맺어지는 과정

  1. 클라이언트가 DNS로 서버 IP를 얻는다.
  2. TCP 3-way 핸드셰이크로 전송 계층 연결을 만든다(HTTP/3는 이 단계가 QUIC으로 대체된다).
  3. TLS 핸드셰이크를 수행한다. TLS 1.3 기준으로 클라이언트가 지원 암호 목록과 키 교환 재료를 보내면, 서버가 선택 결과와 인증서, 자신의 키 재료를 돌려주고 양쪽이 같은 세션 키를 유도한다. 왕복 1회(1-RTT)면 충분하다.
  4. 이후 모든 HTTP 요청과 응답이 세션 키로 암호화되어 오간다.

참고로 어떤 도메인에 접속하는지는 TLS 확장인 SNI(Server Name Indication)에 평문으로 실리는데, 이것까지 감추는 ECH(Encrypted Client Hello)가 표준화되어 배포가 진행되고 있다.

HTTP 버전별 비교

HTTP/1.1은 연결 하나에서 요청을 순서대로 처리하므로 앞 응답이 늦어지면 뒤 요청이 전부 기다리는 HOL 블로킹(Head-of-Line blocking)이 생긴다. 브라우저는 도메인당 연결을 여러 개 열어 이를 완화했지만, 연결마다 핸드셰이크와 혼잡 제어 워밍업 비용이 반복되는 비효율이 있었다. HTTP/2는 하나의 TCP 연결 안에 여러 스트림(stream)을 다중화해 이 문제를 애플리케이션 계층에서 해결했고, 헤더 압축(HPACK)도 도입했다. 그러나 TCP 자체가 패킷 하나의 손실로 전체 스트림을 멈추는 문제는 남았고, HTTP/3는 전송 계층을 UDP 기반 QUIC으로 바꿔 스트림별 독립 전달로 이를 해소했다.

구분HTTP/1.1HTTP/2HTTP/3
전송 계층TCPTCPQUIC(UDP 기반)
메시지 형식텍스트바이너리 프레임바이너리 프레임
다중화없음(파이프라이닝은 사실상 미사용)스트림 다중화스트림 다중화
HOL 블로킹애플리케이션 계층에서 발생TCP 계층에서 잔존스트림 단위로 해소
암호화선택(HTTPS 시 TLS)사실상 TLS 필수TLS 1.3 내장
헤더 압축없음HPACKQPACK

실무 관점의 정리

HTTPS의 암호화 오버헤드는 현대 하드웨어의 AES 가속과 TLS 1.3의 1-RTT 핸드셰이크, 세션 재개 덕분에 체감하기 어려운 수준이 되었다. 검색 엔진은 HTTPS 사이트를 우선하고 브라우저는 HTTP 사이트에 안전하지 않다는 경고를 표시하므로, 보안을 넘어 서비스 신뢰도의 문제이기도 하다. 오히려 HTTPS가 아니면 HTTP/2와 3, 서비스 워커(Service Worker), 위치 정보 같은 브라우저 기능 자체를 쓸 수 없다. 따라서 성능 때문에 HTTP를 고른다는 논리는 더 이상 성립하지 않으며, 남은 과제는 인증서 자동 갱신과 혼합 콘텐츠 제거, HSTS 적용 같은 운영 품질의 문제이다.

면접에서 이렇게 물어본다

  • HTTP와 HTTPS의 차이를 기밀성, 무결성, 인증 세 가지 관점에서 설명해 보라.
  • HTTP의 무상태성이란 무엇이고, 로그인 상태는 어떻게 유지하는가.
  • HTTP/1.1의 HOL 블로킹을 HTTP/2가 어떻게 해결했고, 왜 HTTP/3가 다시 필요했는가.
  • 브라우저는 서버 인증서를 어떤 과정으로 신뢰하는가.
  • HTTPS 접속 시 주소창의 도메인 입력부터 첫 응답까지 어떤 단계가 일어나는가.
네트워크 문서 전체 보기

이 개념, 내 코드에서는 어떻게 물어볼까요

데브핏(DevFit)에 채용공고 URL을 붙여 넣고 레포지토리를 연결하면, 내가 쓴 커밋에서 예상 질문과 어필 포인트를 만듭니다. 하루 10회까지 무료입니다. 합불 판정이나 지원자 랭킹은 만들지 않고, 최종 판단은 사람이 합니다.

공고 넣고 시작하기