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의 특징


클라이언트 - 서버 구조


무상태 프로토콜(stateless)

Stateful

예를 들어, 물건을 구매해야하는 상황에서 구매자의 원하는 각각의 옵션을 계속 갖고 있는 것은 ‘상태를 보존하는 것’입니다. 이 상황에서 점원이 바뀌는 경우, 상태를 갖고 있다가 없어지기 때문에 상태 중 일부만 넘겨주는 것에 대해 처리를 할 수가 없습니다.

Stateless

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

하지만, stateless도 한계점이 존재합니다. 단순 소개 화면의 경우 stateless로 하나, 로그인한 사용자의 경우 브라우저 쿠키 ∙ 서버 세션으로 상태를 유지하게 되며 이로 인해 서버에 로그인 상태를 저장해야 합니다. 또한, 데이터의 양이 stateful보다 늘어나게 됩니다.


비연결성(connectionless)

클라이언트 - 서버의 연결을 만든 뒤에 다른 클라이언트와 서버가 연결이 되는 경우, 이전의 연결을 끊지 않게 되면 서버의 자원을 계속 낭비하게 됩니다. 이를 해결하기 위해 서버에서 정보를 전달한 뒤에는 바로 연결을 끊습니다.

비연결성에 따른 특징

한계점

해결법

이를 위해 최대한 stateless하게 설계를 하는 것이 중요합니다.