HTTP

김재민·2023년 6월 7일
0

HTTP란?

HTTP (Hypertext Transfer Protocol)는 클라이언트와 서버가 웹 상에서 데이터를 주고 받기위한 데이터 교환 protocol(규칙), 브라우저인 클라이언트에 의해 전송되는 메시지를 requests(요청)라고 부르며, 그에 대해 서버에서 응답으로 전송되는 메시지를 responses(응답)라고 한다.

HTTP의 특징

  1. 클라이언트 서버구조
  2. 무상태(Stateless)
  3. 비 연결성(Connectionless)
  4. HTTP 메세지(추가블로깅 예정)
  5. 단순함, 확장 용이

1. 클라이언트 서버구조

클라이언트가 서버에 요청하면 서버는 클라이언트에 응답하는 구조이다.

  1. 클라이언트가 서버에 요청하고 응답을 대기
  2. 서버는 클라이언트의 요청에 대한 응답을 생성하여 전송

2. 무상태(Stateless)

서버가 클라이언트의 상태를 보존하지 않는다.
서버의 확장성에 용이하다는 장점이 있지만, 클라이언트가 추가 데이터를 전송해야 하는 단점이 존재한다.

상태 유지(Stateful)란?

클라이언트의 요청A에 대한 상태를 해당 요청을 받은 서버A가 기억하고 있는 것으로 항상 같은 서버A가 유지되어야 한다. 만약 서버A에서 장애가 생긴다면 유지되던 상태 정보가 없어져 버리므로 처음부터 다시 요청을 해야한다.

무상태 프로토콜이라면 클라이언트 요청A을 보낼 때, 데이터를 다 담아서 보내기 때문에 아무 서버나 호출할 수 있다. 무상태는 응답 서버를 쉽게 바꿀 수 있는 특징 덕분에 서버증설 측면에서 용이하다.

무상태(stateless)의 한계와 해결

상태 유지가 필요 없는 단순한 서비스 소개 화면 같은 경우엔 무상태로 설계할 수 있지만, 상태 유지가 필요한 서비스라면 이를 위해 브라우저 쿠키, 세션, 토큰 등을 이용해 상태를 유지한다. 이러한 상태 유지는 최소한으로 사용한다.

통신중 서버가 바뀌었을 때 예시)

카페에서 아메리카노 3잔을 신용카드로 결제한다는 가정을하면
고객(클라이언트), 점원(서버)

  • 상태 유지(Stateful)중 서버가 바뀜
    고객 : 아메리카노 얼마인가요?
    점원A : 3천원입니다.
    고객 : 3잔 주세요.
    점원B : 어떤 음료 3잔 결제하십니까?
    고객 : 신용카드로 결제할게요.
    점원B : 어떤 음료를 신용카드로 몇 잔 결제하십니까?

  • 무상태(Stateless)
    고객 : 아메리카노 얼마인가요?
    점원A : 3천원입니다.
    고객 : 3잔 주세요.
    점원B : 9천원입니다. 결제수단은 어떻게 하시겠습니까?
    고객 : 신용카드 결제할게요.
    점원C : 만원 결제 완료 되었습니다.

  • 상태 유지 : 중간에 다른 서버로 바뀌면 안됨
    중간에 다른 서버으로 바뀔 때 상태 정보를 다른 서버에게 미리 알려줘야한다.
  • 무상태 : 중간에 다른 서버로 바뀌어도 된다.
    갑자기 클라이언트 요청이 증가해도 서버를 추가로 투입할 수 있다.
    무상태는 응답 서버를 쉽게 바꿀 수 있다. —> 서버증설 용이

3.비연결성 (Connectionless)

연결성 모델 (Connection Oriented)

  • TCP/IP의 경우 기본적으로 연결을 유지한다.
  • 클라이언트는 요청을 보내지 않아도 계속 연결을 유지해야 한다.
  • 연결을 유지하는 서버의 자원이 계속 소모가 된다.

비연결성 모델 (Connectionless)

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

비 연결성(Connectionless)의 한계와 해결

  • TCP/IP 연결을 새로 맺어야 함 – 3 way handshake(정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정) 추가
  • 요청시 HTML 뿐만 아니라 JavaScript, CSS, 추가 이미지 등 수 많은 자원이 함께 다운로드 된다.
  • 해당 자원들을 각각 보낼때마다 연결끊고 다시 연결하고를 반복하는 것은 비효율적이기 때문에 지금은 HTTP 지속 연결(Persisent Connections)로 문제를 해결한다.
  • HTTP 지속 연결(Persisent Connections)

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

4. HTTP 메세지(추가블로깅 예정)

5. 단순함, 확장 용이

  • HTTP는 단숨함에서 오는 확장성이 매우 뛰어나다.

0개의 댓글