HTTP는 웹 서비스 개발자라면 당연히 알고 있어야 할 핵심 프로토콜이다.
HTTP 통신은 어떻게 구성되고 사용되어야 하는지 꼭 알고 넘어갈 수 있도록 하자.
HTTP란 HyperText Transfer Protocol의 약자로 하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 protocol(통신 규약)을 의미한다. 그렇다고 HTML 파일뿐만 아니라, 다양한 종류의 파일을 전송하는 범용적인 프로토콜로도 이용할 수 있다. JPEG나 PNG 등의 이미지 파일은 물론이며 PDF, WORD, EXCEL 등의 문서 파일도 전송할 수 있다.
즉, 웹상에서 네트워크로 서버끼리 통신을 할 때 어떠한 형식으로 서로 통신을 하자고 규정해 놓은 "통신 형식" 혹은 "통신 구조"라고 생각하면 된다.
이런 HTTP는 프론트엔드 서버와 클라이언트간의 통신에 사용되며, 백엔드와 프론트엔드 서버간에의 통신에도 사용된다.
HTTP는 TCP/IP 기반으로 되어있다.
HTTP는 기본적으로 요청/응답 ( request / response ) 구조로 되어있다.
클라이언트가 HTTP request 를 서버에 보내면 서버는 HTTP response를 보내는 구조이다.
클라이언트와 서버의 모든 통신이 요청과 응답으로 이루어진다.
HTTP는 Stateless 이다.
Stateless란 상태를 저장하지 않는다는 뜻이다. 즉, 요청이 오면 그에 응답을 할 뿐 여러 요청과 응답끼리 연결되어 있지 않다는 뜻이다. 각각의 요청과 응답은 독립적인 요청과 응답이다.
예를 들면, 클라이언트가 요청을 보내고 응답을 받은 후, 조금 있다 다시 요청을 보낼 때, 전에 보낸 요청과 응답에 대해서는 알지 못한다. 그래서 만일 여러 요청과 응답의 진행과정이나 데이터가 필요할 때는 쿠키나 세션 등등을 사용하게 된다.
HTTP request 메세지는 Start line, headers, body 세부분으로 구성된다.
Start Line
이름 그대로 HTTP request의 첫 라인을 뜻한다. 이 Start line 또한 세 부분으로 구성되어 있다.
HTTP Method
해당 request가 의도한 action을 정의하는 부분. HTTP Methods에는 GET
, POST
, PUT
, DELETE
, OPTIONS
등등이 있다. 주로 사용되는것은 GET
, POST
이다.
Request target
해당 request가 전송되는 목표 url을 뜻한다.
HTTP Version
HTTP 버전을 의미한다.
Headers
general headers
, request headers
, entity headers
)Body
해당 request의 실제 메세지 내용. Body가 없는 request도 많다는 것에 주의할 것. (특히 GET방식의 경우)
Response도 request와 마찬가지로 다음과 같은 세 부분으로 구성되어 있다.
Status Line
Response의 상태를 간략하게 나타내주는 부분으로써, HTTP 버젼
, Status code
, Status text
로 구성되어 있다.
Headers
request의 headers와 동일하다. 다만 response에서만 사용되는 header의 값들이 있다. 예를 들면 User-Agent
대신 Server
가 헤더가 사용된다.
Body
Request의 body처럼 모든 response에 body가 있지는 않으며, 일반적으로 동일하다. 데이터를 전송할 필요가 없을 경우 body가 비어있게 된다.
어떠한 데이터를 서버로부터 받아 올 때 주로 사용하는 메소드. 데이터의 생성/수정/삭제 없이 받아오기만 할 때 사용된다. 주로 데이터를 받아오는 경우 사용 되기 때문에 request에 body를 보내지 않는 경우가 많다.
데이터를 생성/수정/삭제 할 때 주로 사용 되는 메소드. 데이터를 생성 및 수정 할 때 많이 사용하기 때문에 대부분의 경우 request body가 포함돼서 보내진다.
주로 요청 URI에서 사용할 수 있는 메소드를 받아 올 때 사용. 예를 들어 /update
URI에서 어떤 메소드를 요청 가능한지 확인해 봤을 때, OPTION
을 사용해서 확인하게 된다.
POST
와 비슷한 역할로써 데이터를 생성 할 때 사용되는 메소드. POST
와 비슷하기 때문에 대부분 POST
를 사용한다.
특정 데이터를 서버에서 삭제 요청을 보낼 때 쓰이는 메소드. 이것도 POST
로 대부분 사용하기 때문에 자주 사용되지는 않는다.
RESTful HTTP API를 이해하기 위해선 URI
, HTTP Method
, Payload
에 대한 개념을 알고 있어야 한다.
URI
Uniform Resource Identifier의 약자로써, 해당 사이트의 특정 자원의 위치를 나타내는 유일한 주소
HTTP Method
HTTP request가 의도하는 action을 정의한 것으로써, POST
, GET
등이 있다.
Payload
HTTP request에서 보내는 데이터(body)
웹 상에서 사용되는 여러 리소스를 HTTP URI로 표현하고, 그 리소스에 대한 행위를 HTTP Method로 정의하는 방식이다. 즉, 리소스(HTTP URI로 정의된)를 어떻게 하겠다(HTTP Method + Payload)를 구조적으로 깔끔하게 표현하는 것으로써, 주로 GET
, POST
가 사용된다.
self-descriptiveness
가 가장 큰 장점이다. 예를 들어 삼성전자 주식 정보를 받기 위한 HTTP 요청이 HTTP GET [https://api.trueshort.com/stock/005930](https://api.trueshort.com/stock/005930)
일 때 문서나 주석이 없이도 "[https://api.trueshort.com](https://api.trueshort.com이라는)
이라는 API에서 삼성전자 주식에 관한 정보를 HTTP요청을 통해 받아온다." 라는 해석이 쉽게 가능하다.
/
는 계층관계를 나타낼 때 사용된다._
는 주로 포함하지 않고, 영어 대문자보다 소문자를 쓴다. 그리고 너무 긴 단어는 사용을 지양하자.