[모든 개발자를 위한 HTTP 웹 기본 지식] 03. HTTP 기본

Turtle·2024년 6월 13일
0
post-thumbnail

📔모든 것이 HTTP

HTTP 메시지에 모든 것을 전송할 수 있다.

  • HTML, TEXT
  • IMAGE, 음성, 영상, 파일
  • JSON, XML(API)
  • 거의 모든 형태의 데이터 전송 가능
  • 서버간에 데이터를 주고 받을 때도 대부분 HTTP를 사용

🧱기반 프로토콜

TCP : HTTP/1.1, HTTP/2
UDP : HTTP/3
현재 HTTP/1.1 주로 사용
HTTP/2, HTTP/3도 점점 증가

📕HTTP 특징

  • 클라이언트 서버 구조
  • 상태를 유지하지 않는 무상태 프로토콜(Stateless), 비연결성
  • HTTP 메시지
  • 단순함, 확장 가능

🏗️클라이언트 서버 구조

📙Stateful vs Stateless

Stateless(상태를 유지하지 않는 것)
Stateful(상태를 유지하는 것)

클라이언트A는 서버1과 통신을 하고 있는 상황이다. 만약 서버1에 문제가 생겨서 통신을 할 수 없는 아래와 같은 상황이 생긴다면 어떻게 될까?

서버가 상태를 유지하는 상황에서 위와 같이 서버1에 장애가 발생해서 연결이 끊기게 되면 통신이 정상적으로 수행될 수 없기 때문에 다시 처음부터 시작을 해야 한다.

반면 무상태로 설계했을 때 HTTP 요청할 때부터 필요한 데이터를 다 담아서 전송을 하게 되기 때문에 아무 서버나 호출해도 문제가 없다.

중간에 서버가 장애가 발생하더라도 다른 서버로 전달을 하면 정상적으로 통신을 할 수 있게 된다.

📘Stateless의 한계

모든 것을 무상태로 설계할 수 있는 경우가 있지만 그렇지 못한 경우도 있다.

  • 무상태 - 로그인을 필요로 하지 않는 단순한 서비스 소개 화면
  • 상태 유지 - 로그인

로그인한 사용자의 경우 로그인을 했다는 상태를 서버에 유지
일반적으로 브라우저 쿠키와 세션 등을 사용해서 상태 유지
상태 유지는 최소한만 사용

❓비연결성(Connectionless)

HTTP는 기본이 연결을 유지하지 않는 모델이다.
일반적으로 초 단위 이하의 빠른 속도로 응답
서버 자원을 매우 효율적으로 사용할 수 있다.

TCP/IP 연결의 경우 기본적으로 연결을 유지(물리적인 연결X, 논리적인 가상의 연결)
서버와 연결되는 클라이언트의 수가 늘어나면 늘어날수록 서버의 자원이 계속 소모가 된다.

반면 위와 같이 통신을 끝내고 TCP/IP 연결을 바로 종료시키면 자원을 현재 요청을 주고 받을 때만 연결을 하고 그 다음에는 끊어버려서 서버가 유지하는 자원을 최소한으로 줄일 수 있게 된다.

⚠️비연결성의 한계와 극복

TCP/IP 연결을 새로 맺어야 함 - 3-way handshake 시간 추가
웹 브라우저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트, CSS, 추가 이미지 등 수많은 자원이 함께 다운로드
지금은 HTTP 지속 연결(Persistent Connections)로 해결
HTTP/2, HTTP/3에서 더 많은 최적화가 이루어지고 있다.

📗HTTP 메시지 전체 구조

📒HTTP 메시지 - 요청 메시지

  • ✔️[요청 메시지 - HTTP 메서드]

    • 종류 : GET, POST, PUT, DELETE...
    • 서버가 수행해야 할 동작을 지정
      • GET : 리소스 조회
      • POST : 요청 내역 처리
  • ✔️[요청 메시지 - 요청 대상]

    • 절대 경로 : /로 시작하는 경로
  • ✔️[요청 메시지 - HTTP 버전]

    • HTTP 버전

📓HTTP 메시지 - 응답 메시지

❓HTTP 헤더

HTTP 전송에 필요한 모든 부가정보

❓HTTP 바디

실제 전송할 데이터
HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능

🔒출처

모든 개발자를 위한 HTTP 웹 기본 지식

0개의 댓글