[Web] HTTP란?

해피몬·2023년 9월 30일
post-thumbnail

HTTP는 클라이언트(주로 웹 브라우저)와 서버 간의 통신 규칙을 정의한 프로토콜로, 웹에서 문서, 이미지, 동영상 등 다양한 데이터를 전송하는 데 사용됩니다. HTTP는 요청(Request)-응답(Response) 구조로 작동하며, 사용자가 웹페이지에 접근할 때 클라이언트가 요청을 보내고 서버가 응답을 보내는 형태로 이루어집니다.

HTTP는 원래 하이퍼텍스트 전송을 위한 프로토콜로 개발되었지만, 현재는 단순한 텍스트뿐만 아니라 이미지, 동영상, 파일 등 다양한 콘텐츠를 주고받을 수 있습니다.

기본 구조와 동작 방식

HTTP 요청(Request)

HTTP 요청은 사용자가 서버로부터 데이터를 요청할 때 사용됩니다. 요청에는 요청 메서드와 헤더, 본문이 포함됩니다.

  • 요청 메서드: 요청의 목적을 나타내는 방식으로, 대표적으로 GET, POST, PUT, DELETE 등이 있습니다.

GET: 데이터를 요청할 때 사용. 주로 웹페이지나 리소스를 가져오는 용도.
POST: 서버에 데이터를 전송할 때 사용. 예를 들어, 폼 데이터를 서버로 제출하는 경우.
PUT: 기존 데이터를 수정하거나 새 데이터를 생성할 때 사용.
DELETE: 데이터를 삭제할 때 사용.

  • 요청 헤더: 요청과 관련된 추가 정보(클라이언트 정보, 인증 토큰, 인코딩 방식 등)를 담고 있습니다.

  • 요청 본문: 요청에 포함되는 데이터로, 주로 POST나 PUT 요청에서 사용됩니다.

HTTP 응답(Response)

HTTP 응답은 서버가 요청에 대해 보내는 응답 메시지로, 상태 코드와 헤더, 본문으로 구성됩니다.

  • 상태 코드: 요청의 성공, 실패 여부를 나타내는 코드로, 3자리 숫자로 표시됩니다.
    200 OK: 요청 성공.
    404 Not Found: 요청한 페이지를 찾을 수 없음.
    500 Internal Server Error: 서버 내부 오류.
  • 응답 헤더: 응답에 대한 정보(서버 정보, 콘텐츠 타입 등)를 담고 있습니다.
  • 응답 본문: 클라이언트가 요청한 데이터가 포함된 부분으로, HTML, JSON, 이미지 등 다양한 형식으로 전송됩니다.

주요 특징

1) 무상태성(Stateless)
HTTP는 무상태(Stateless) 프로토콜입니다. 클라이언트가 요청을 보내고 서버가 응답한 후에는 서버가 클라이언트의 상태를 유지하지 않으며, 매 요청이 독립적으로 처리됩니다. 예를 들어, 페이지를 새로고침하면 서버는 클라이언트가 이전에 방문했는지 알지 못합니다.

이를 보완하기 위해, 쿠키나 세션 같은 기술이 사용됩니다. 쿠키는 클라이언트 측에서 정보를 저장하고, 세션은 서버 측에서 사용자의 상태를 유지하는 방식입니다.

2) 요청/응답 방식
HTTP는 클라이언트가 요청을 보내고 서버가 응답하는 구조로 동작합니다. 클라이언트가 요청을 보내기 전까지 서버는 대기 상태에 있으며, 서버에서 클라이언트로의 정보 전달도 요청에 의해 이루어집니다.

3) 유연한 확장성
HTTP는 다양한 콘텐츠 타입을 지원합니다. HTML뿐만 아니라, JSON, XML, 이미지 파일, 동영상 파일 등 거의 모든 종류의 데이터를 전송할 수 있습니다. 이를 통해 HTTP는 단순한 웹페이지 전송을 넘어 API 통신 및 데이터 전송 등 다양한 용도로 사용됩니다.

버전

HTTP/1.1

HTTP/1.1은 HTTP의 첫 공식 표준으로, Persistent Connection(연결 유지)을 지원하여 다수의 요청을 한 번의 연결로 처리할 수 있습니다.
그러나 순차적으로 요청을 처리하는 특성상 요청이 많은 경우 병목 현상이 발생할 수 있습니다.

HTTP/2

HTTP/2는 2015년에 발표된 버전으로, 멀티플렉싱(Multiplexing)을 지원해 다수의 요청과 응답을 동시에 처리할 수 있습니다.
헤더 압축 기능으로 전송되는 데이터 양을 줄이고, 서버 푸시(Server Push) 기능으로 서버가 클라이언트의 요청 없이도 리소스를 미리 전송할 수 있습니다.

HTTP/3

HTTP/3는 2020년에 발표된 최신 버전으로, UDP 기반의 QUIC 프로토콜을 사용하여 더 빠르고 안정적인 연결을 제공합니다.
0-RTT로 빠르게 연결을 설정하고, 네트워크가 변경되더라도 연결이 유지되어, 특히 모바일 환경에서 성능을 크게 개선했습니다.

HTTPS

HTTP는 기본적으로 데이터가 암호화되지 않은 상태로 전송되므로, 중간에서 데이터를 가로채는(스니핑) 보안 문제가 발생할 수 있습니다. 이를 해결하기 위해 HTTPS(HTTP Secure)가 사용됩니다. HTTPS는 SSL/TLS 프로토콜을 이용해 데이터를 암호화하여, 안전하게 전송합니다.

HTTPS의 주요 특징

  • 데이터 암호화: 데이터를 암호화하여, 중간에서 데이터가 가로채이더라도 내용을 알 수 없습니다.
  • 인증: 서버와 클라이언트 간의 신뢰성을 보장해, 사용자는 신뢰할 수 있는 사이트와 통신할 수 있습니다.
  • 데이터 무결성: 데이터가 중간에 수정되지 않았음을 보장하여, 데이터의 무결성을 확보합니다.

최신기술

HTTP는 기본적으로 클라이언트가 요청을 보내야만 응답이 이루어지는 구조입니다. 그러나 실시간 데이터가 필요한 애플리케이션에서는 웹소켓(WebSocket)이나 서버-전송 이벤트(Server-Sent Events, SSE) 같은 기술을 사용해 HTTP의 한계를 보완할 수 있습니다.

  • 웹소켓(WebSocket): 클라이언트와 서버 간의 양방향 통신을 지원하여, 실시간 채팅, 주식 정보 업데이트 등 실시간 데이터 전송에 적합합니다.
  • SSE: 서버가 클라이언트에게 일방적으로 데이터를 전송할 수 있도록 하여, 실시간 알림이나 상태 업데이트 등에 유리합니다.
profile
슬기로운개발생활🤖

0개의 댓글