100%를 한번에 바꾸는건 어려워도 1%를 100번 바꾸는건 쉽다.

생각정리 자세히보기

나의 일상/생각정리

[생각정리] 판교 퇴근길 밋업 with 인프런 #08 HTTP

dc-choi 2024. 10. 24. 14:24
반응형

HTTP란?

웹 기술을 다루는 것중 가장 중요한건 브라우저다. 하지만 브라우저는 항상 HTML을 가지고 있지 않다.

 

따라서 서버와 브라우저간의 통신이 중요하다. 그러나 이 둘 사이 거리가 얼마나 되는지, 어떻게 통신해야하는지는 미지수이다.

 

통신을 하기 위한 많은 방법중 하나가 바로 HTTP이다.

핵심 기본 요소

1. URL

  • 역할: URL은 웹 리소스를 식별하는 주소로서 클라이언트가 서버에 어떤 리소스를 요청할지를 명시하는 핵심적인 부분.
  • 구조:
    • 스키마(Scheme)
      사용되는 프로토콜을 정의. https는 HTTP에 SSL/TLS로 암호화된 버전을 의미
      • EX) http://, https://
    • 호스트(Host)
      요청할 서버의 도메인 이름이나 IP 주소.
      • EX) www.example.com.
    • 포트(Port)
      서버가 사용하는 네트워크 포트를 명시함. HTTP의 기본 포트는 80, HTTPS의 기본 포트는 443이지만 명시적으로 다른 포트를 지정.
      • EX) :8080.
    • 경로(Path):
      서버 내에서 요청한 리소스의 경로를 나타냄.
      • EX) /images/logo.png.
    • 쿼리 파라미터(Query Parameters): ?로 시작하는 쿼리 문자열로, 리소스에 전달할 추가 데이터를 포함. 여러 개의 쿼리 파라미터는 &로 구분됨.
      • EX) ?id=123&name=test.
    • 프래그먼트(Fragment): 리소스 내에서 특정 위치를 지정할 때 사용. 보통 웹페이지에서 앵커(#)로 구분되는 부분을 가리킴.
      • EX) #section1.

예시:
https://www.example.com:8080/path/to/resource?id=123&name=test#section1

2. Header

  • 역할: 헤더는 클라이언트와 서버 간의 메타데이터를 포함하며 요청이나 응답에 대한 추가 정보를 제공하고, 콘텐츠 형식, 인코딩, 쿠키, 인증 등에 대한 정보를 전달함.
  • 종류:
    1. 요청 헤더(Request Headers): 클라이언트가 서버에 보내는 정보. 서버가 요청을 이해하고 처리하는 데 필요한 힌트를 제공.
      • Host: 요청이 전송될 호스트. 가상 호스팅을 위한 필수 헤더.
      • User-Agent: 클라이언트의 소프트웨어(브라우저, 운영체제 등)에 대한 정보.
      • Accept: 클라이언트가 허용하는 콘텐츠 유형. 예: text/html, application/json.
      • Authorization: 인증을 위해 사용하는 헤더로, JWT 토큰이나 Basic Auth 정보가 포함됨.
    2. 응답 헤더(Response Headers): 서버가 클라이언트에게 응답할 때 추가 정보를 제공함.
      • Content-Type: 응답 데이터의 콘텐츠 형식. 예: text/html, application/json.
      • Set-Cookie: 서버가 클라이언트에게 쿠키를 설정하는 데 사용됨.
      • Cache-Control: 캐싱을 제어하는 헤더로, 데이터의 저장 및 만료 규칙을 지정.
    3. 엔티티 헤더(Entity Headers): 본문의 정보를 나타내는 헤더로, 요청과 응답 모두에 사용될 수 있음.
      • Content-Length: 본문의 크기(바이트 단위).
      • Content-Encoding: 본문의 인코딩 방식(gzip, deflate 등).

3. Body

  • 역할: HTTP 본문은 요청이나 응답에서 실제 데이터를 담고 있는 부분이며 본문은 필수는 아니고, 필요에 따라 데이터를 실어 보낼 때 사용됨.
  • 요청 본문(Request Body): 클라이언트가 서버에 보낼 데이터를 포함함. 주로 POST, PUT, PATCH 요청에서 사용돼.
    • Content-Type 헤더를 통해 본문의 데이터 형식을 명시.
    • EX) JSON, XML, 파일 업로드 등. JSON 데이터를 보내는 경우 Content-Type: application/json으로 설정.
  • 응답 본문(Response Body): 서버가 클라이언트에게 반환하는 데이터를 포함함. 응답 본문은 HTML, JSON, 파일(이미지, 비디오 등) 등 다양한 형식일 수 있음.
    • EX) 웹페이지의 HTML 소스, JSON 형태의 API 응답 등.
  • 본문이 없는 요청과 응답: GET 요청이나 204 No Content 상태 코드의 응답은 보통 본문을 포함하지 않음.

4. Status Code

  • 역할: 상태 코드는 서버가 요청을 어떻게 처리했는지에 대한 결과를 숫자로 나타내며 주로 3자리 숫자로 구성되고, 클라이언트에게 응답의 성공, 실패, 리다이렉션 등을 알려줌.
  • 카테고리:
    1. 1xx (정보 응답): 서버가 요청을 처리하고 있다는 중간 상태를 나타냄.
      • 100 Continue: 클라이언트가 요청을 계속 진행할 수 있음.
    2. 2xx (성공 응답): 요청이 성공적으로 처리되었음을 의미.
      • 200 OK: 요청이 성공적으로 완료됨.
      • 201 Created: 요청에 의해 리소스가 생성됨.
    3. 3xx (리다이렉션): 요청한 리소스를 다른 위치로 이동해야 함.
      • 301 Moved Permanently: 리소스가 영구적으로 다른 URL로 이동됨.
      • 302 Found: 리소스가 임시적으로 다른 URL에 있음.
    4. 4xx (클라이언트 오류): 클라이언트의 요청에 문제가 있을 때 발생.
      • 400 Bad Request: 잘못된 요청(구문 오류 등).
      • 401 Unauthorized: 인증이 필요하거나 실패함.
      • 404 Not Found: 요청한 리소스를 찾을 수 없음.
    5. 5xx (서버 오류): 서버가 요청을 처리하는 과정에서 문제가 발생.
      • 500 Internal Server Error: 서버 내부 오류로 인해 요청을 처리할 수 없음.
      • 503 Service Unavailable: 서버가 일시적으로 사용 불가 상태.

버전별 특징

1. HTTP/0.9

  • 등장 시기: 1991년
  • 특징:
    • 단순한 구조로, 오직 GET 메서드만 지원.
    • 헤더가 없고 응답으로 HTML 파일만 전송.
    • 비지속 연결: 각 요청마다 TCP 연결을 새로 생성하여 성능이 비효율적임.
    • 확장성이 부족하고, 데이터 타입 지원이 없음.

2. HTTP/1.0

  • 등장 시기: 1996년
  • 특징:
    • GET, POST, HEAD 메서드를 지원.
    • 헤더가 도입되어 콘텐츠 타입, 길이 등 메타데이터를 포함할 수 있음.
    • 캐싱 지원: Expires 헤더를 통해 리소스의 유효 기간 명시.
    • 쿠키 지원하지 않음: 쿠키는 실무에서 사용되었지만, 공식 표준은 아님.
    • 비지속 연결: 요청마다 새로운 TCP 연결 필요.

3. HTTP/1.1

  • 등장 시기: 1997년
  • 특징:
    • 지속 연결(persistent connection): 기본적으로 TCP 연결을 재사용하여 여러 요청 처리 가능.
    • Host 헤더 도입: 하나의 IP 주소에서 여러 도메인을 처리할 수 있는 가상 호스팅 지원.
    • 캐싱 메커니즘 개선: Cache-Control 헤더 도입으로 더 정교한 캐시 제어 가능.
    • 쿠키와 같은 상태 유지 메커니즘이 확산.
    • 압축 지원: 전송 인코딩으로 gzip과 같은 압축 기능 추가.
    • 파이프라이닝(pipelining): 요청을 병렬로 처리 가능하나, 실무에서 잘 사용되지 않음.

4. HTTP/2.0

  • 등장 시기: 2015년
  • 특징:
    • 이진 프로토콜: 텍스트 기반에서 이진 프레임으로 변경되어 효율적 데이터 전송 가능.
    • 멀티플렉싱: 하나의 연결에서 여러 요청과 응답을 병렬로 처리하여 성능 개선.
    • 헤더 압축: HPACK 방식으로 헤더를 효율적으로 압축하여 대역폭 절약.
    • 서버 푸시: 서버가 클라이언트 요청을 예측하여 필요한 리소스를 미리 전송 가능.

5. HTTP/3.0

  • 등장 시기: 2020년대 초반
  • 특징:
    • QUIC 프로토콜 기반: UDP를 사용하여 연결 성립이 빠르고 패킷 손실에 대한 회복이 신속함.
    • 멀티플렉싱: HTTP/2.0의 멀티플렉싱을 유지하면서도 헤드 오브 라인 블로킹 문제 해결.
    • 헤더 압축과 서버 푸시 기능이 여전히 지원됨.

느낀점

백엔드, 프론트엔드로 나누기 전 웹 개발자로서 HTTP에 대해서 어느정도 알고 있어야 겠다는 생각을 하게 되었습니다.

반응형