직역해보면 '하이퍼텍스트를 전송하는 프로토콜'이다.
우선 프로토콜은 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계를 뜻한다. 컴퓨터 사이의 약속이다.
하이퍼텍스트는 참조(하이퍼링크)를 통해 독자가 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트이다. 쉽게말해 링크를 타고 다니면서 다른 문서로 이동할 수 있는 문서다. HTML의 <a>
태그를 생각하면 된다. HTML이 HyperText Markup Language이므로 하이퍼 텍스트는 HTML 문서라고 생각하면 된다.
정리해보면 HTML 문서를 전송하는 약속이다. 초기에는 웹 브라우저와 웹 서버 간의 커뮤니케이션을 위해 디자인되어 HTML과 같은 하이퍼미디어 문서를 주로 전송했다. 하지만 최근에는 Plain text, JSON, XML 등 다양한 형태의 정보도 전송하는 프로토콜이 되었고 모바일 애플리케이션 및 IoT 등과의 커뮤니케이션과 같이 다른 목적으로도 사용되고 있다.
클라이언트는 서버에게 필요한 정보를 요청한다. 이 요청을 Request라고 한다. 요청을 받은 서버는 클라이언트에게 응답을 보낸다. 응답은 Response라고 한다.
Request는 다음과 같이 구성된다. 1번째 줄에 HTTP 요청 메서드를 맨 앞에 적고 그 뒤에는 path, 그 뒤에는 프로토콜의 종류와 버전을 적는다. 2번째 줄부터는 헤더를 적는다. 헤더에는 요청하는 정보 등 요청에 필요한 정보가 들어간다.
Response는 다음과 같다. 1번째 줄에 프로토콜의 종류와 버전, HTTP 상태 코드, HTTP 상태 메시지가 들어간다. 2째줄 이후에 Reponse Headers가 들어간다.
요청 메서드에는 여러 종류가 있다. 메더드는 각 역할에 맞는 메서드를 사용하는것이 좋다. 사실 개발을 하다보면 GET과 POST 메서드만 사용되는 경우가 많으나 각 목적에 맞는 메서드를 사용하는게 좋다.
특정 리소스를 받기 위한 요청이다. 따라서, 리소스의 생성, 수정 및 삭제 등에 사용해서는 안된다.
리소스를 생성하거나 컨트롤러를 실행하는 데 사용한다.
변경 가능한 리소스를 업데이트하는 데 사용되며 항상 리소스 식별 정보를 포함해야 한다.
변경 가능한 리소스의 부분 업데이트에 사용되며 항상 리소스 식별 정보를 포함해야 한다.
특정 리소스를 제거하는 데 사용한다.
클라이언트가 본문 없이 리소스에 대한 헤더만 검색하는 경우 사용한다.
클라이언트가 서버의 리소스에 대해 수행 가능한 동작을 알아보기 위해 사용한다.
앞선 설명처럼 클라이언트와 서버 구조로 되어있다.
서버가 클라이언트 상태를 보존하지 않는다. 이 특성으로 서버의 확장성이 높아진다. 하지만 클라이언트가 데이터를 추가적으로 보내야하는 문제가 생긴다.
연결을 유지하는 구조가 아닌 연결 상태를 유지하지 않는 구조다. 이 장점으로 여러 요청을 빠르게 응답을 할 수 있다. 하지만 트래픽이 많고 큰 규모의 서비스를 운영할 때는 비 연결성은 한계를 보인다.