프론트엔드 시스템과 백엔드 API 시스템은 일반적으로 HTTP 프로토콜을 기반으로 통신한다.
HyperText Transfer Protocol
HTML을 서로 주고받을 수 있도록 만들어진 프로토콜
HTTP는 기본적으로 요청(Request)과 응답(Response) 구조이다.
클라이언트가 먼저 HTTP 요청을 서버에 보내면 서버는 요청을 처리한 후 결과에 따른 HTTP 응답을 클라이언트에게 보낸다.
각각의 HTTP 통신은 독립적이며 그 전에 처리된 HTTP 통신에 대해서 알지 못한다.
따라서 요청하는 쪽은 요청을 처리하기 위해 필요한 모든 데이터를 매번 포함시켜서 요청을 보내야 한다.
stateless를 보완하기 위해 쿠키(cookie)나 세션(session)을 사용할 수 있다.
cookie는 웹 브라우저가 웹 사이트에서 보내온 정보를 저장할 수 있도록 하는 조그마한 파일. 클라이언트에서 데이터를 저장하기 위해 사용한다.
session은 HTTP 통신상에서 필요한 데이터를 저장할 수 있게 하는 매커니즘. 웹 서버에서 데이터를 저장하기 위해 사용한다.
POST /developer HTTP/1.1 ---------- 1
Accept: application/json ---------- 2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: honeybeeveloper.com
User-Agent: Mozilla/4.0
{
"user": "honeybeeveloper" ---------- 3
}
HTTP 요청 메시지는 크게 세 부분으로 구성된다.
1. Start Line
2. Header
3. Body
HTTP Request 시작줄
위 예는 "developer" 엔드포인트에 POST HTTP 요청을 보낸 것이다.
Start Line은 세 부분으로 구성되어 있다.
헤더 정보는 key, value로 되어 있으며 HTTP 요청 그 자체에 대한 정보를 담고 있다.
HTTP 요청이 전송하는 데이터를 담고 있는 부분. 전송하는 데이터가 없다면 body 부분은 비어있다.
HTTP/1.1 404 Not Found ---------- 1
Connection: close
Content-Type: application/json
Content-Length: 1573
Date: Wed, 17 Aug 2022 08:43:02 GMT ---------- 2
<!DOCTYPE html>
... (생략) ---------- 3
HTTP 응답 메시지는 크게 세 부분으로 구성된다.
1. Status Line
2. Header
3. Body
HTTP 응답 메시지의 상태 표시
Status Line은 세 부분으로 구성되어 있다.
HTTP 요청의 헤더와 유사하다.
HTTP 요청의 헤더와 동일하다.
참고 : 책 <깔끔한 파이썬 탄탄한 백엔드>