[TIL] 250730_Network: HTTP 기본(2)

지코·2025년 7월 30일
0

Today I Learned

목록 보기
81/94
post-thumbnail

✴️ 비연결성(Connectionless)

  • HTTP는 기본적으로 연결을 유지하지 않는 모델이다.
  • 일반적으로 초 단위 이하의 빠른 속도로 응답한다.
  • 1시간 동안 수천 명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십 개 이하로 매우 작기 때문에, 비연결성을 통해 서버 자원을 매우 효율적으로 사용할 수 있다.


클라이언트와 서버 간의 연결을 유지하는 모델을 살펴보면, 현재 요청과 응답을 주고 받는 클라이언트 외의 다른 클라이언트들과도 서버가 계속해서 연결을 유지하고 있는 것을 확인할 수 있다. 이의 경우 굉장히 많은 서버 자원이 소모될 수 있다는 단점이 있다.

클라이언트와 서버 간의 연결을 유지하지 않는 모델을 살펴보면, 필요한 요청과 응답을 주고 받은 후 TCP/IP 연결을 바로 종료하는 모습을 확인할 수 있다. 이후 다른 클라이언트와 메세지를 주고 받을 필요가 있을 때도, 이와 같은 방식으로 연결 성립 - 요청/응답 주고 받기 - 연결 해제 의 과정을 거친다.

이의 경우 서버가 유지하는 자원을 최소한으로 줄일 수 있다는 장점이 있다.

🤔 한계점

  • 클라이언트의 요청 시마다 TCP/IP 연결을 새로 맺어야 하기 때문에, 3-way handshake를 위한 시간이 추가된다.
  • 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 JS, CSS, 추가 이미지 등의 수많은 자원이 함께 다운로드된다.
  • 계속해서 연결과 해제를 반복하는 것이 비효율적이기 때문에 현재는 HTTP 지속 연결(Persistent Connections)로 문제를 해결할 수 있고, 지속 연결은 HTTP/2, HTTP/3 에서 더 많은 최적화가 되었다.

HTTP 초기 상태에는 하나의 요청에 대해 응답을 보낸 후 연결을 해제하는 방식이기 때문에, 이후 요청이 들어올 경우 새롭게 연결을 성립하는 시간이 필요하다.

HTTP 지속 연결의 경우에는 내부 메커니즘에 따라 일정 시간 동안 연결을 유지하게 된다. 보통 하나의 페이지에 관한 데이터(HTML, CSS, JS, 이미지 등)들을 모두 받는 동안은 연결이 유지된다. 모든 데이터들을 수신했다면 연결을 해제한다.

HTTP 초기 상태에 비해 훨씬 더 짧은 소요 시간을 가질 것임을 알 수 있다.


✴️ HTTP 메시지

HTTP 메서드

GET: 리소스 조회
POST: 전송한 데이터의 처리 요청
DELETE: 데이터의 삭제 요청
PUT: 데이터의 수정 요청

HTTP 메시지의 기본 구조

  • 시작 라인
  • 헤더
  • 공백 라인 (필수!)
  • 메세지 본문 (보통 응답 메세지에 존재)

📩 HTTP 요청 메세지

  1. 시작 라인
    Request-Line(HTTP 메서드) + Request-Target(path) + HTTP-Version
  • path: 보통 절대 경로[?쿼리] 로 넣는다.
  1. 헤더
    Host ➡️ 도메인명 혹은 IP 주소

  2. 공백 라인

  3. 메세지 본문
    보통 생략한다.

📤 HTTP 응답 메세지

  1. 시작 라인
    HTTP-Version + Status Code + Reason Phrase
  • Status Code: 200은 성공, 400은 클라이언트 요청 오류, 500은 서버 내부 오류를 나타낸다.
  1. 헤더
    여러 개의 헤더 필드들이 들어가며, HTTP 전송에 필요한 모든 부가 정보들이 들어있다. 예를 들어 메세지 본문의 내용, 크기, 압축, 인증, 요청 클라이언트 정보 등이 있다.

  2. 공백 라인

  3. 메세지 본문
    클라이언트에게 실제로 응답할 데이터가 들어간다. 보통 HTML 문서, 사진, 동영상 등 byte로 표현할 수 있는 모든 데이터의 전송이 가능하다.

Reference

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

profile
꾸준함이 무기

0개의 댓글