[다시하는 백엔드 기초 공부] HTTP
HTTP
Hypertext Transfer Protocol(HTTP) 은 웹페이지를 로드하기 위해 하이퍼링크를 사용하는 월드 와이드 웹(WWW)의 기초 프로토콜이다. 네트워크에 연결된 기기들 간 정보를 주고받기 위해 설계된 애플리케이션 계층(application layer) 프로토콜이며, 일반적으로 클라이언트 장치(예: 웹 브라우저)가 서버에 요청(request)을 보내면, 서버가 응답(response) 메시지를 돌려주는 흐름이 HTTP의 기본적인 작동 방식이다.
만들어진 계기 — WWW
1989년, 팀 버너스 리가 CERN에서 연구자들이 정보를 쉽게 공유할 수 있도록 하기 위해 다른 문서나 리소스로 즉시 이동할 수 있는 링크(연결) 를 포함한 텍스트인 하이퍼텍스트를 기반으로 하는 시스템을 제안한다. (하이퍼텍스트는 1965년에 테드 넬슨에 의해 처음 정의)
이 시스템을 만들기 위해 하이퍼텍스트 문서를 작성하기 위한 마크업 언어인 Hypertext Markup Language, HTML과 작성된 하이퍼텍스트 문서를 주고받기 위한 프로토콜로 HTTP를 만들게 된다. 그리고 HTML 문서를 해석하여 사용자가 이해하기 쉬운 형태로 변환하여 보여주는 프로그램인 웹 브라우저가 더해져 **월드 와이드 웹(World Wide Web, WWW)**이 탄생하게 된다.
월드 와이드 웹과 인터넷이 같은 것으로 혼동되기도 하지만 정확히 인터넷은 전 세계 컴퓨터와 장치를 연결하는 네트워크 인프라이고 이 위에서 서비스로서 동작하는 정보 공유 시스템이 월드 와이드 웹이다.
HTTP 요청(Request)의 구성 요소
클라이언트가 웹 사이트를 로드할 때 보내는 HTTP 요청에는 일반적으로 다음과 같은 요소들이 포함된다:
- **HTTP 버전: **HTTP/1.0, HTTP/1.1, HTTP/2, HTTP/3 등. 각 버전마다 기능 및 퍼포먼스, 연결 유지(persistent connection) 등의 관리 방식에 차이가 존재한다.
- **URL: **어떤 리소스를 요청하는지 나타낸다.
- **HTTP 메소드(Method): **요청이 서버에 어떤 동작을 기대하는지를 명시한다. 주요 메소드로 정보를 가져오기 위한 GET, 정보 제출을 위한 POST, 정보 교체를 위한 PUT, 정보 일부의 수정을 위한 PATCH, 정보 삭제를 위한 DELETE 가 있으며, 그 밖에도 HEAD, OPTIONS, TRACE, CONNECT 등이 있다.
- **요청 헤더(Request Headers): **클라이언트가 보내는 부가 정보들로, 예를 들면 어떤 브라우저를 쓰는지, 어떤 타입의 콘텐츠를 기대하는지, 인증 정보 등이 포함된다.
- **요청 본문(Request Body): 선택적으로 사용하는 요소로 **폼 데이터, 로그인 정보, JSON 또는 기타 포맷의 데이터 등이 포함된다.
HTTP 응답(Response)의 구성 요소
서버는 클라이언트 요청에 대해 응답을 돌려주게 되는데, 응답에는 보통 다음 요소들이 포함된다:
- **HTTP 상태 코드(Status Code): **요청이 성공했는지, 리다이렉션인지, 클라이언트 혹은 서버 쪽 오류인지 등을 나타내는 세 자리 숫자 코드.
- **응답 헤더(Response Headers): **응답의 메타 데이터로 컨텐츠 타입, 인코딩, 캐시 제어, 쿠키 등의 정보가 포함될 수 있다.
- **응답 본문(Response Body): **요청과 마찬가지로 HTML, JSON, 이미지, 파일 등 클라이언트가 요청에 따라 콘텐츠가 선택적으로 포함된다.
HTTP 버전 별 정리
1. HTTP/0.9 (1991)
— 단순했던 최초 버전
- 텍스트만 전송 가능
- 메소드는 GET만 지원
- 상태 코드도 없고, 헤더도 없이 그냥 HTML 문서만 전달
2. HTTP/1.0 (1996)
— 첫 표준이 된 버전
- 헤더와 상태 코드 도입
- 메소드 추가: POST, HEAD
- 연결은 요청마다 끊어짐 (비연결성)
- 단점: 매 요청마다 TCP 연결을 새로 만들기 때문에 성능이 떨어짐
3. HTTP/1.1 (1997)
— 현재까지도 사용중인 가장 오래 쓰이고 있는 버전
- Persistent Connection(Keep-Alive)을 통해 TCP 연결 유지 및 재사용이 가능해져 성능이 향상됨
- Host 헤더 필수화 → 하나의 서버에서 여러 도메인 호스팅 가능 (가상 호스팅)
- 메소드 추가: PUT, PATCH, OPTIONS, DELETE
- Chunked Transfer Encoding → 스트리밍 지원
4. HTTP/2 (2015)
— 성능 개선에 초점을 두고 개발하여 페이지 로딩 속도가 빨라짐
- 바이너리 프로토콜 → 더 효율적인 파싱
- 멀티플렉싱(Multiplexing) → 하나의 TCP 연결에서 여러 요청/응답 동시 전송
- 헤더 압축(HPACK) → 대역폭 절약
- 서버 푸시(Server Push) 지원 → 클라이언트가 요청하기 전에 필요한 리소스를 보내줌
- 대표적으로 고성능 마이크로서비스 통신을 위해 개발된 gRPC가 HTTP/2를 기반으로 함
5. HTTP/3 (2022)
— TCP 대신 QUIC(Quick UDP Internet Connections)라는 UDP 기반 전송 계층을 사용하여 더 빠르고 안정성을 추구
- TCP 핸드셰이크 문제 해결 → 연결 설정이 더 빠름
- 패킷 손실 시 병목 감소 → 비디오 스트리밍, 게임 등 실시간 서비스에 유리
- 기본적으로 암호화(TLS 1.3) 내장
HTTPS
HyperText Transfer Protocol Secure의 약자로 기존 HTTP에** **SSL/TLS 프로토콜을 결합하여 보안을 강화한 프로토콜.
기존 HTTP는 모든 요청과 응답이 평문(Plain Text) 으로 전송되기 때문에 데이터 전송 과정에서 비밀번호 같은 중요 정보가 그대로 노출된 상태로 네트워크에 흘러가며 패킷 스니핑(Packet Sniffing), 중간자 공격(MITM) 같은 공격을 통해 중간에 요청을 가로채서 확인이 가능하다. 따라서 HTTP에 보안 레이어를 추가한 HTTPS가 생겼으며 이제는 선택지가 아닌 기본이 된 수준이다.
HTTPS가 해결하는 문제
- **데이터 암호화 (Encryption): **모든 요청/응답이 암호화되어 중간에서 누가 패킷을 가로채도 해독할 수 없다.
- **인증 (Authentication): 인증서(Certificate)를 통해 **서버가 믿을 수 있는 서버인지 확인할 수 있다.
- **무결성 (Integrity): **데이터가 전송 중에 변조되지 않았는지를 보장하여 코드를 몰래 끼워 넣거나, 파일을 변조해서 악성코드를 심는 것을 방지함. 이 외에도 HTTPS 사용시 SEO 우대를 통한 이점이 있고 HTTP/2, HTTP/3을 사용하기 위한 필수 요건으로 전제된다.