[HTTP] - HTTP의 특징

Donggu(oo)·2023년 1월 4일
0

[HTTP/네트워크]

목록 보기
15/18

1. HTTP의 역사


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

2. HTTP 특징


1) 클라이언트 서버 구조

  • 클라이언트가 서버에 요청을 보내면 서버는 그에 대한 응답을 보내는 클라이언트 서버 구조로 이루어져 있다.

2) 무상태 프로토콜(Stateless)

  • HTTP 에서는 서버가 클라이언트의 상태를 보존하지 않는다.

    • 장점 : 서버 확장성이 높다. (스케일 아웃)
    • 단점 : 클라이언트가 추가 데이터를 전송해야 한다.

2-1. 상태 유지(Stateful)

  • 상태 유지가 되어야 하는 프로토콜이라면 클라이언트 A의 요청을 서버 1이 기억하고 있기 때문에 항상 서버 1이 응답해야 한다.

  • 하지만 서버 1에 장애가 난다면 유지되던 상태 정보가 다 날아가 버리므로 처음부터 다시 서버에 요청해야 한다.

2-2. 무상태(Stateless)

  • 무상태 프로토콜이라면 클라이언트 A가 요청할 때 이미 필요한 데이터를 다 담아서 보내기 때문에 아무 서버나 호출해도 된다.

  • 만약 서버 1에 장애가 생기더라도 다른 서버에서 응답을 전달하면 되기 때문에 클라이언트는 다시 요청할 필요가 없다.

  • 무상태는 응답 서버를 쉽게 바꿀 수 있기 때문에 무한한 서버 증설이 가능하다.

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

Stateful vs Stateless

  • 상태 유지 : 중간에 다른 점원으로 바뀌면 안됨.
    • 상태가 유지되는 때에는 점원 A가 고객의 중문 상태에 대해 기억하고 있어서(고객은 자기 주문 상태 기억 못 함) 중간에 다른 점원으로 바뀔 때 상태 정보를 다른 점원에게 미리 알려줘야 한다.
    • 이렇게 점원 A가 고객의 상태를 기억하고 있는 것을 상태를 유지한다고 한다.)
  • 무상태 : 중간에 다른 점원으로 바뀌어도 된다.
    • 무상태에서는 고객이 자신의 주문을 기억하고 있다면 중간에 다른 점원으로 바뀌어도 주문을 할 수 있다.
    • 갑자기 고객이 증가해도 점원을 대거 투입할 수 있다. -> 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.
  • 무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한한 서버 증설 가능

3) 비연결성(Connectionless)

3-1. 연결을 유지하는 모델(Connection Oriendted)

  • TCP / IP의 경우 기본적으로 연결을 유지한다.

  • 연결을 유지하는 모델에서는 클라이언트 1, 2는 요청을 보내지 않더라도 계속 연결을 유지해야 한다. 이 경우 연결을 유지하는 서버의 자원이 계속 소모 된다.

3-2. 연결을 유지하지 않는 모델(Connectionless)

  • 비연결성을 가지는 HTTP에서는 실제로 요청을 주고받을 때에만 연결을 유지하고 응답을 주고 나면 TCP / IP 연결을 끊는다. 이를 통해 최소한의 자원으로 서버 유지가 가능하다.

  • HTTP 1.0 기준으로, HTTP는 연결을 유지하지 않는 모델이다.

  • 일반적으로 초 단위 이하의 빠른 속도로 응답하며, 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다.

    • e.g. 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않는다.
  • 하지만 비연결성은 웹 브라우저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트, css, 추가 이미지 등 수많은 자원이 함께 다운로드 된다.

  • 해당 자원들을 각각 보낼 때마다 연결 끊고 다시 연결하고를 반복하는 것은 비효율적이기 때문에 지금은 HTTP 지속 연결(Persistent Connections)로 문제를 해결한다.

  • HTTP 초기에는 각각의 자원을 다운로드하기 위해 연결과 종료를 반복해야 했지만, HTTP 지속 연결에서는 연결이 이루어지고 난 뒤 각각의 자원들을 요청하고 모든 자원에 대한 응답이 돌아온 후에 연결을 종료한다.

4) HTTP 메세지

5) 단순함, 확장 가능

0개의 댓글