[TIL / Web] HTTP & RESTful HTTP API

haejun-kim·2020년 8월 5일
0

[Web]

목록 보기
3/4

HTTP는 웹 서비스 개발자라면 당연히 알고 있어야 할 핵심 프로토콜이다.
HTTP 통신은 어떻게 구성되고 사용되어야 하는지 꼭 알고 넘어갈 수 있도록 하자.

HTTP란?

HTTP

HTTP란 HyperText Transfer Protocol의 약자로 하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 protocol(통신 규약)을 의미한다. 그렇다고 HTML 파일뿐만 아니라, 다양한 종류의 파일을 전송하는 범용적인 프로토콜로도 이용할 수 있다. JPEG나 PNG 등의 이미지 파일은 물론이며 PDF, WORD, EXCEL 등의 문서 파일도 전송할 수 있다.

즉, 웹상에서 네트워크로 서버끼리 통신을 할 때 어떠한 형식으로 서로 통신을 하자고 규정해 놓은 "통신 형식" 혹은 "통신 구조"라고 생각하면 된다.

이런 HTTP는 프론트엔드 서버와 클라이언트간의 통신에 사용되며, 백엔드와 프론트엔드 서버간에의 통신에도 사용된다.

HTTP는 TCP/IP 기반으로 되어있다.

Request? Response?

HTTP 핵심 요소

HTTP 통신 방식

  • HTTP는 기본적으로 요청/응답 ( request / response ) 구조로 되어있다.

    클라이언트가 HTTP request 를 서버에 보내면 서버는 HTTP response를 보내는 구조이다.

    클라이언트와 서버의 모든 통신이 요청과 응답으로 이루어진다.

  • HTTP는 Stateless 이다.

    Stateless란 상태를 저장하지 않는다는 뜻이다. 즉, 요청이 오면 그에 응답을 할 뿐 여러 요청과 응답끼리 연결되어 있지 않다는 뜻이다. 각각의 요청과 응답은 독립적인 요청과 응답이다.

    예를 들면, 클라이언트가 요청을 보내고 응답을 받은 후, 조금 있다 다시 요청을 보낼 때, 전에 보낸 요청과 응답에 대해서는 알지 못한다. 그래서 만일 여러 요청과 응답의 진행과정이나 데이터가 필요할 때는 쿠키나 세션 등등을 사용하게 된다.

HTTP request 구조

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

  • request 메세지 body의 총 길이(Content-Length)와 같이 해당 request에 대한 추가 정보를 담고 있는 부분이다.
  • Key : Value 값으로 되어있다.
  • Headers도 크게 3부분으로 나뉘어지지만 이 부분은 추가적으로 공부할 것을 권장.(general headers, request headers, entity headers)
  • 자주 사용되는 header 정보는 다음과 같다.
    • Host : 요청이 전송되는 target의 host url (google.com)
    • User-Agent : 요청을 보내는 클라이언트에 대한 정보 (웹브라우저에 대한 정보)
    • Accept : 해당 요청이 받을 수 있는 response 타입
    • Connection : 해당 요청이 끝난 후에 클라이언트와 서버가 계속해서 connection을 유지할 것인지 끊을것인지에 대한 지시를 하는 부분
    • Content-Type : 해당 요청이 보내는 메세지 body의 타입. (JSON의 경우 application/json)
    • Content-Length : 메세지 body의 길이

Body

해당 request의 실제 메세지 내용. Body가 없는 request도 많다는 것에 주의할 것. (특히 GET방식의 경우)

HTTP Response 구조

Response도 request와 마찬가지로 다음과 같은 세 부분으로 구성되어 있다.

Status Line

Response의 상태를 간략하게 나타내주는 부분으로써, HTTP 버젼, Status code, Status text로 구성되어 있다.

Headers

request의 headers와 동일하다. 다만 response에서만 사용되는 header의 값들이 있다. 예를 들면 User-Agent 대신 Server가 헤더가 사용된다.

Body

Request의 body처럼 모든 response에 body가 있지는 않으며, 일반적으로 동일하다. 데이터를 전송할 필요가 없을 경우 body가 비어있게 된다.

Method

GET

어떠한 데이터를 서버로부터 받아 올 때 주로 사용하는 메소드. 데이터의 생성/수정/삭제 없이 받아오기만 할 때 사용된다. 주로 데이터를 받아오는 경우 사용 되기 때문에 request에 body를 보내지 않는 경우가 많다.

POST

데이터를 생성/수정/삭제 할 때 주로 사용 되는 메소드. 데이터를 생성 및 수정 할 때 많이 사용하기 때문에 대부분의 경우 request body가 포함돼서 보내진다.

OPTION

주로 요청 URI에서 사용할 수 있는 메소드를 받아 올 때 사용. 예를 들어 /update URI에서 어떤 메소드를 요청 가능한지 확인해 봤을 때, OPTION을 사용해서 확인하게 된다.

PUT

POST와 비슷한 역할로써 데이터를 생성 할 때 사용되는 메소드. POST와 비슷하기 때문에 대부분 POST를 사용한다.

DELETE

특정 데이터를 서버에서 삭제 요청을 보낼 때 쓰이는 메소드. 이것도 POST로 대부분 사용하기 때문에 자주 사용되지는 않는다.

Status-code들은 무엇이 있을까?

  • 200 OK : 가장 자주 보게되는 코드이며 문제없이 실행이 잘 됐을 때 보내는 코드
  • 301 Moved Permanently : 해당 URI가 다른 주소로 바뀌었을 때 보내는 코드
  • 400 Bad Request : 해당 요청이 잘못 된 요청일 때 보내는 코드
  • 401 Unauthorized : 유저가 해당 요청을 진행하려면 로그인을 하거나 회원 가입을 하거나 등등이 필요하다는 것을 나타내려 할 때 사용하는 코드
  • 403 Fobidden : 해당 요청에 대한 권한이 없다는 뜻의 코드
  • 404 Not Found : 요청된 URI가 존재하지 않는다는 뜻
  • 500 Internal Server Error : 서버에서 에러가 났을 때 사용되는 코드

RESTful HTTP API?

RESTful HTTP API를 이해하기 위해선 URI , HTTP Method , Payload에 대한 개념을 알고 있어야 한다.

  • URI

    Uniform Resource Identifier의 약자로써, 해당 사이트의 특정 자원의 위치를 나타내는 유일한 주소

  • HTTP Method

    HTTP request가 의도하는 action을 정의한 것으로써, POST, GET 등이 있다.

  • Payload

    HTTP request에서 보내는 데이터(body)

REpresentational State Transfer

웹 상에서 사용되는 여러 리소스를 HTTP URI로 표현하고, 그 리소스에 대한 행위를 HTTP Method로 정의하는 방식이다. 즉, 리소스(HTTP URI로 정의된)를 어떻게 하겠다(HTTP Method + Payload)를 구조적으로 깔끔하게 표현하는 것으로써, 주로 GET, POST가 사용된다.

RESTful API의 장점

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요청을 통해 받아온다." 라는 해석이 쉽게 가능하다.

올바른 end-point 주소는 어떻게 작성할까?

  • /는 계층관계를 나타낼 때 사용된다.
  • 가독성을 높이기 위해서 URI에 _는 주로 포함하지 않고, 영어 대문자보다 소문자를 쓴다. 그리고 너무 긴 단어는 사용을 지양하자.
  • URI는 명사를 사용한다. HTTP Method를 통해 표현하기 때문이다.

0개의 댓글