2021.12.26

초보개발·2021년 12월 26일
0

TIL

목록 보기
4/17

HTTP(HyperText Transfer Protocol)

HTPP 메시지에 html, txt, 사진, json, xml 등 거의 모든 확장자의 데이터들을 전송한다. 또한 서버 간 데이터를 주고 받을 때에도 HTTP 프로토콜을 사용한다.
HTTP/1.1이 대중적이지만 HTTP/2, HTTP/3의 사용도 점점 증가되는 추세이다.

  • TCP : HTTP/1.1, HTTP/2
  • UDP : HTTP/3

Client-Server 구조이며 비연결성이고 Stateless인 프로토콜이며 단순한 구조여서 확장하기 쉽다.

✔️ Client-Server 구조

클라이언트에서 Request를 서버로 전송하고 서버의 Response를 기다린다. 서버는 클라이언트가 요청한 내용의 결과를 응답으로 전송한다.
서버가 비즈니스 로직과 데이터를 처리할 수 있도록 맡고 클라이언트는 UI 등 사용성에 집중하게 설계하면 서버와 클라이언트는 각각 독립적이게 되고 생산성이 높아지며 유지보수 관점으로도 좋다.

✔️ Stateful, Stateless

  • Stateless : 클라이언트에서 요청할 때 미리 필요한 정보를 담아 서버로 보낸다. 따라서 임의의 서버여도 응답할 수 있고 서버가 클라이언트의 상태를 보존하지 않으므로 다른 서버로 바뀌어도 문제가 발생하지 않는다. 서버의 확장성이 높은 대신에 클라이언트가 추가 데이터의 전송량이 늘어난다.
  • Stateful : 중간에 서버가 바뀌게 되면 기존 Context가 유지되지 않으므로 문제가 발생한다. 따라서 서버가 변경될 때 상태를 유지할 수 있도록 정보를 넘겨줘야 한다.

✔️ Connectionless

HTTP는 기본적으로 연결을 계속 유지하지 않는 프로토콜이다. 일반적으로 초 단위 이하로 빠른 속도로 즉각 응답하며 1시간 동안 수천명이 요청을 보내도 실제 서버에서 동시에 처리하는 요청은 매우 적은 양이다. 따라서 서버의 자원을 효율적으로 사용할 수 있다.

TCP/IP의 연결을 다시 새로 맺어줘야 하기 때문에 3-way handshake 과정이 추가되어 시간이 더 소요된다. 그리고 웹 브라우저로 사이트 요청할 경우, 사진, HTML, js, css등 수 많은 자원이 다운로드 되어 각 자원마다 연결/종료를 해야되므로 매우 비효율적이다. 그러나 지금은 HTTP 지속 연결(Persistent Connections)로 해결할 수 있고 HTTP/2, HTTP/3에서 최적화와 성능을 개선하였다.

HTTP 지속 연결(Persistent Connections)


하나의 TCP 연결로 복수의 HTTP 요청과 응답을 주고받을 수 있는 개념으로 기존의 매 요청/응답 쌍마다 새로운 요청을 여는 것과 반대되는 개념이다. 클라이언트와 서버를 연결하고 요청과 응답이 다 끝날 때까지 연결을 계속 유지한다.

0개의 댓글