HTTP의 특징
HTTP ·해당 내용은 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 수강하여 작성했습니다.
HTTP?
HTTP는 Hypertext Transfer Protocol의 약자로, 문서 간의 링크를 통해서 연결할 수 있는 프로토콜을 의미합니다. 현재 대부분의 것들(HTML, IMAGE, JSON, XML 등)을 HTTP 메시지에 담아서 전송하고 있습니다. 또한, 서버 간 데이터를 주고 받을 때도 HTTP를 사용합니다.
HTTP는 버전이 여러번 향상되었는데, HTTP/1.1가 현재 가장 많이 사용하며 중요한 버전이고, 이후 나온 HTTP/2, HTTP/3은 성능 개선 위주로 나왔습니다.
기반 프로토콜로서, ‘HTTP/1.1, HTTP’에서는 TCP ‘HTTP/3’에서는 UDP를 주로 사용하고 있습니다. 앞서 말했듯, 현재 HTTP/1.1을 주로 사용하며, 2, 3도 점점 사용량이 증가하고 있습니다. 크롬 내에서 개발자 도구 → 네트워크 → 프로토콜을 보면 h2, h3 등이 적힌 것을 통해 어떤 프로토콜을 쓰는지 알 수 있습니다.

HTTP의 특징
- 클라이언트 - 서버 구조
- 무상태 프로토콜, 비연결성
- HTTP 메시지로 작동
- 단순하며 확장 가능
클라이언트 - 서버 구조
- 클라이언트가 서버에게 요청을 보내고 기다리고, 이후 서버가 요청을 받고 응답을 보냅니다.
- 클라이언트와 서버의 개념이 분리되어 있습니다. 이로 인해, ‘비즈니스 로직, 데이터’는 서버에 넣어두고 클라이언트는 UI와 사용성에 집중했습니다. 덕분에 클라이언트, 서버가 독립적으로 성장할 수 있었습니다.
- Request, Response 구조로 이루어집니다.
무상태 프로토콜(stateless)
Stateful
예를 들어, 물건을 구매해야하는 상황에서 구매자의 원하는 각각의 옵션을 계속 갖고 있는 것은 ‘상태를 보존하는 것’입니다. 이 상황에서 점원이 바뀌는 경우, 상태를 갖고 있다가 없어지기 때문에 상태 중 일부만 넘겨주는 것에 대해 처리를 할 수가 없습니다.

Stateless
서버가 클라이언트의 상태를 보존하지 않습니다. 위 예시와 같이, 물건을 구매하는 경우, 상태를 갖고 있는 것이 아니라 모든 상태 값들을 처음부터 다시 구매자가 넘기기 때문에 중간에 점원이 바뀌어도 문제없이 처리할 수 있습니다. 이러한 형식은 갑작스러운 클라이언트 요청의 증가가 있어도 서버를 대거 투입하는 것을 통해 문제를 해결할 수 있습니다.

하지만, stateless도 한계점이 존재합니다. 단순 소개 화면의 경우 stateless로 하나, 로그인한 사용자의 경우 브라우저 쿠키 ∙ 서버 세션으로 상태를 유지하게 되며 이로 인해 서버에 로그인 상태를 저장해야 합니다. 또한, 데이터의 양이 stateful보다 늘어나게 됩니다.
비연결성(connectionless)
클라이언트 - 서버의 연결을 만든 뒤에 다른 클라이언트와 서버가 연결이 되는 경우, 이전의 연결을 끊지 않게 되면 서버의 자원을 계속 낭비하게 됩니다. 이를 해결하기 위해 서버에서 정보를 전달한 뒤에는 바로 연결을 끊습니다.
비연결성에 따른 특징
- 일반적으로 초 단위 이하의 빠른 속도로 전송
- 실제로 수천명이 서비스를 사용해도 동시처리를 하는 개수는 수십개 이하
- 서버 자원을 효율적으로 관리할 수 있음
한계점
- 새로운 TCP/IP 연결이 필요해, handshake 시간이 추가
- 웹 브라우저로 요청을 하는 경우 HTML, CSS, JS와 같은 많은 자원을 받아야해서 계속 많은 양의 자료가 다시 넘어옴


해결법
- 문제 해결을 위한 HTTP 지속 연결 사용 → 연결을 일정 시간 유지, 필요 데이터들을 다 받은 다음에 종료하도록 설정
- HTTP3 에서는 UDP 프로토콜을 사용해 연결 시간 자체 감소
이를 위해 최대한 stateless하게 설계를 하는 것이 중요합니다.