HTTP

jung_ho9 개발일지·2023년 1월 4일
0

HTTP/네트워크/서버

목록 보기
9/15
post-thumbnail

HTTP 역사



HTTP/1.1, HTTP/2는 TCP 기반이며 HTTP/3는 UDP 기반 프로토콜이다.

HTTP 특징


  • 클라이언트 서버 구조
    • Request Response 구조
    • 클라이언트는 서버에 요청을 보내고, 응답을 대기
    • 서버가 요청에 대한 결과를 만들어 응닫
  • 무상태 프로토콜
  • 비연결성
  • HTTP 메세지
  • 단순함, 확장 가능

상태 유지와 무상태란?

상태유지

  • 클라이언트 A의 요청을 서버 1이 기억하고 있기 때문에 항상 서버 1이 응답해야한다.
  • 만약 서버1이 장애가 발생한다면 유지되던 상태 정보가 다 날아가 버리므로 처음부터 다시 서버에 요청해야 한다.

무상태

  • 클라이언트 A가 요청할 때 이미 필요한 데이터를 다 담아서 보내기 때문에 아무 서버나 호출해도 된다.
  • 만약 서버 1에 장애가 생기더라도 다른 서버에서 응답을 전달하면 되기 때문에 클라이언트는 다시 요청할 필요가 없다.
  • 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.
  • 무상태는 응답 서버를 쉽게 바꿀 수 있다 (무한한 서버 증설 가능)

무상태의 한계

모든 것을 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있다. 로그인이 필요 없는 단순한 서비스 소개 화면 같은 경우엔 무상태로 설계할 수 있지만 로그인이 필요한 서비스라면 로그인했다는 상태를 서버에 유지해야 하기 때문에 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지해야 한다.

비연결성

TCP/IP는 기본적으로 연결을 유지하여 서버의 자원이 계속 소모되지만, 비연결성을 가지는 HTTP에서는 실제 요청을 주고받을 때만 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊어 최소한의 자원으로 서버 유지를 가능하게 한다.

  • 트래픽이 많지 않고, 빠른 응답을 제공할 수 있는 경우, 비연결성의 특징은 효율적으로 작동한다. 하지만 트래픽이 많고, 큰 규모의 서비스를 운영할 때에는 비연결성은 한계를 보이게 된다.

비연결성의 한계와 극복

웹 브라우저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트, css 추가 이미지 등 많은 자원이 함께 다운로드 된다. 해당 자원들을 각각 보낼 때마다 연결 끊고 다시 연결하고를 반복하는 것은 비효율적이기 때문에 지금은 HTTP 지속 연결로 문제를 해결한다.

HTTP 초기 - 연결, 종료 낭비


HTTP 초기에는 각각의 자원을 다운로드하기 위해 연결과 종료를 반복해야 했다.

HTTP 지속 연결(Persistent Connections)


HTTP 지속 연결에서는 연결이 이루어지고 난 뒤 각각의 자원들을 요청하고 모든 자원에 대한 응답이 돌아온 후에 연결을 종료한다.

profile
꾸준하게 기록하기

0개의 댓글