
HTTP (Hypertext Transfer Protocol)는 웹에서 클라이언트와 서버 간에 데이터를 전송하기 위한 애플리케이션 계층 프로토콜이다.
HTTP는 TCP/IP 프로토콜 스택의 애플리케이션 계층에서 동작하며, 주로 웹 브라우저와 웹 서버 간의 요청-응답 메시지를 처리하는 역할을 한다.
이 프로토콜은 웹 페이지를 요청하거나, 데이터베이스에서 정보를 조회하는 등의 작업을 수행할 때 사용된다.
HTTP의 기본 작동 방식은 클라이언트-서버 모델에 기반하여 이루어진다.
클라이언트(웹 브라우저)는 서버에 요청을 보내고, 서버는 해당 요청을 처리하여 응답을 클라이언트에 반환한다.
클라이언트가 요청을 전송
웹 브라우저 또는 다른 클라이언트는 URL을 통해 HTTP 요청을 서버에 전송한다. 이 요청은 텍스트 형식으로 작성되어, 요청하고자 하는 리소스의 정보를 포함한다.
서버가 요청을 처리하고 응답을 전송
서버는 요청을 처리한 후, 처리 결과를 포함한 응답을 클라이언트에 전달한다. 이 응답에는 HTML, JSON, XML 등의 콘텐츠가 포함될 수 있다.
클라이언트가 응답을 처리
클라이언트는 서버로부터 받은 응답을 처리하여 사용자에게 표시한다. 웹 브라우저의 경우, HTML을 해석하여 웹 페이지를 렌더링한다.
무상태성 (Stateless)
HTTP는 무상태성(stateless) 프로토콜이다. 이는 각 요청이 독립적이며 이전 요청의 상태를 기억하지 않는다는 뜻이다. 즉, 서버는 클라이언트의 상태를 저장하지 않고, 요청을 처리할 때마다 새로 시작된다. 이로 인해 서버의 부담이 줄어들지만, 세션이나 쿠키 등의 추가적인 메커니즘이 필요할 수 있다.
비연결성 (Connectionless)
HTTP는 기본적으로 비연결성(connectionless) 프로토콜이다. 즉, 요청 후 응답을 받은 후에는 연결을 끊는다. 하지만 HTTP/1.1에서는 지속적인 연결(persistent connection)을 지원하여, 하나의 연결을 통해 여러 요청을 처리할 수 있게 되었다.
텍스트 기반 프로토콜
HTTP는 텍스트 기반 프로토콜이다. 즉, 요청과 응답은 사람이 읽을 수 있는 텍스트 형식으로 전송된다. 이를 통해 HTTP는 간단하고 직관적으로 사용될 수 있다.
HTTP 요청은 여러 가지 메서드로 이루어진다. 주요 메서드는 다음과 같다:
GET
서버에서 리소스를 조회할 때 사용된다. GET 요청은 서버에서 데이터를 조회하는 데만 사용되며, 요청 본문이 없거나 매우 간단한 데이터만 포함된다.
POST
서버에 데이터를 제출하거나 생성할 때 사용된다. 일반적으로 폼 데이터를 전송하거나 새로운 리소스를 생성하는 데 사용된다.
PUT
서버의 기존 리소스를 수정할 때 사용된다. PUT 요청은 요청 본문에 수정된 데이터를 포함한다.
DELETE
서버에서 리소스를 삭제할 때 사용된다.
PATCH
서버의 리소스를 부분적으로 수정할 때 사용된다.
HTTP 응답에는 요청에 대한 처리 결과를 나타내는 상태 코드가 포함된다. 상태 코드는 세 자리 숫자로 구성되며, 크게 5가지 범주로 나눠진다:
1xx (Informational)
요청을 처리하는 중이며, 계속 진행 중임을 나타낸다.
2xx (Success)
요청이 성공적으로 처리되었음을 나타낸다.
예: 200 OK
3xx (Redirection)
요청한 리소스가 이동되었거나 다른 위치에서 찾을 수 있음을 나타낸다.
예: 301 Moved Permanently
4xx (Client Error)
클라이언트의 요청에 오류가 있음을 나타낸다.
예: 400 Bad Request, 404 Not Found
5xx (Server Error)
서버가 요청을 처리하는 중 오류가 발생했음을 나타낸다.
예: 500 Internal Server Error
HTTP/1.1
이전 버전인 HTTP/1.0에 비해 지속적인 연결(persistent connection)을 지원하여 성능을 개선하였으며, 여러 요청을 하나의 연결로 처리할 수 있다. 하지만 헤더가 비효율적으로 전달되고, 요청이 순차적으로 처리되는 한계가 있다.
HTTP/2
HTTP/1.1의 단점을 해결하고 성능을 개선한 새로운 버전이다. HTTP/2는 멀티플렉싱(multiplexing)을 지원하여, 하나의 연결을 통해 여러 요청과 응답을 병렬로 처리할 수 있다. 또한 헤더 압축을 통해 효율적인 데이터 전송을 지원한다.
HTTP는 암호화되지 않은 프로토콜로, 중간에 공격자가 데이터를 탈취할 위험이 존재한다.
이를 해결하기 위해 HTTPS (Hypertext Transfer Protocol Secure)가 도입되었다.
HTTPS는 SSL/TLS 프로토콜을 사용하여 데이터를 암호화하고, 데이터의 무결성과 기밀성을 보장한다.
HTTPS는 웹 사이트와 사용자 간의 안전한 데이터 전송을 위해 필수적인 기술이다.
HTTPS는 추후 더 디테일하게 다룰 예정이다.
HTTP는 웹에서의 데이터 전송의 핵심 프로토콜이다.
이를 통해 웹 페이지를 요청하고 응답을 받는 방식으로 작동한다.
HTTP의 기본 원리, 메서드, 상태 코드 등을 이해하면 웹 개발이나 네트워크 관련 문제를 더 잘 이해할 수 있다.
또한, HTTPS와 같은 보안 프로토콜을 사용함으로써 데이터를 안전하게 보호할 수 있다.