HTTP는 웹서비스 개발자라면 당연히 알고 있어야할 핵심 프로토콜이다.
기초가 탄탄한 개발자가 되려면 (게다가 비전공자) 이런 세션을 확실히 잡고 넘어가야 한다고 생각했다.
HTTP 는 HyperText Transfer Protocol의 약자이다.
우리는 사실 HyperText가 무엇인지 알고있다. HTTP에서 HyperText는 HTML(HyperText Markup Language)의 HyperText와 그 의미가 동일하다. HTML을 다시 짚고 넘어가보면, 문서와 문서가 링크로 연결되도록 하는 태그로 구성된 언어란 뜻이다. 다시 말하면, HTML은 웹페이지를 만들기 위해서 웹브라우저 위에서 동작하는 언어를 뜻한다. 이번 세션은 이 HTML로 만든 웹페이지를 어떻게 주고 받을 것인가? 에 대한 이야기다.
사전적 의미로 "전송하다" 라는 의미를 가진다. 전송에 큰 의미가 있다. 전송은 쉬운말로 "물건이나 편지 따위를 보낸다." 라는 의미다. 우리가 백날 로컬호스트(본인의 랩탑 또는 데스크탑)에서 작성한 멋진 HTML 파일을 로컬에서만 띄운다면 무슨 의미가 있을까?
예를들어, 내가 작성한 편지가 대상(부모님, 선생님, 연인 등..)을 갖고 있다면 그 대상에게 보내져야 의미가 있게 된다. 편지를 보내지 않으면 응답이 오지 않는다. 그럼 의도 했던 소통이 안 된 것 이지 않은가?
따라서, 우리는 우리가 만든 웹사이트를 널리 알리고 다른 사람들과 공유하기 위해서 다른 컴퓨터에게 전송해야 한다. 그리고 전송은 보내는 주체와 받는 주체가 있다는 것이 큰 특징이다.
프로토콜은 협약, 통신 규약 이라는 의미를 가진다. 물리적으로 떨어진 컴퓨터 끼리 어떻게 HTML파일(HyperText)을 주고 받을지에 대한 약속이다.
우리는 한국인으로 태어난 이상 한국어를 사용해야 하는 사회에 살고 있다. 한국 사회의 소통방식(약속)인 한국어로 소통을 하듯 컴퓨터도 컴퓨터 끼리의 소통 방법이 필요하다. 이런 필요에 의해서 만들어진 소통하는 방식 또는 약속이 HTTP다. 우리가 사용하는 인터넷 상에서 일어나는 소통은 대부분 HTTP 규약을 따른다.
그래서 http 란 컴퓨터 끼리 html 파일을 주고 받을 수 있게 하는 소통방식이다.
HTTP는 컴퓨터들끼리의 약속이라고 했다. 약속에는 언제나 조항들이 따르기 마련이다. 그렇다면 HTTP는 어떤 조항으로 이루어져 있는지를 살펴 볼 시간이다.
소통의 핵심은 요청과 응답
HTTP 통신의 핵심은 요청과 응답이다. 앞서 HTTP의 세번째 키워드인 Transfer 에 대해서 설명 할 때, 전송은 보내는 주체와 받는 주체가 있다고 했다. 보내는 주체는 받는 주체에게 요청을 보내고, 받는 주체는 요청을 보낸 주체에게 응답을 보낸다.
Requset의 구조
1. start Line
HTTP Method: GET, POST, DELETE,
Request Target: url
Http version : 1.1
2.Headers{
Host: 호스트 주소
user-Agent: 클라이언트 정보
Content-Type: Json
Content-Length: body 내용의 길이
Authorization: 회원의 인증/인가를 처리하기 위한 토큰
}
3.body {
실제 로그인 서버에 보낼 내용
"email": 213123@123123.123
}
Response 메세지
200:Ok -> 문제 없음!
201:Created -> 잘 생성됨!
400:Bad Request -> 요청이 잘못됬음!
401:Unauthorized -> 진행하려면 인증 절차 필요
403:Forbidden -> 진행하려면 인가 필요
404:Not found -> Url없음
500:Sever Error -> 백엔드 실수했음
State(상태) + less(없음)
HTTP에 대한 설명 중 잊어서는 안 될 HTTP의 특징이 바로 Stateless 다. 문자 그대로 번역하면 State(상태) + less(없음) 을 의미한다.
각각의 HTTP 통신(요청/응답)은 독립적 이기 때문에 과거의 통신(요청/응답)에 대한 내용을 전혀 알지 못 한다. 이전의 상태를 전혀 알지 못 한다는 것은 무엇을 의미할까?
매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 한다. 비유를 하자면, 마치 이미 자기소개를 한 사람에게 계속해서 똑같은 내용으로 자기소개를 해야하는 것과 같다.
따라서, 만일 여러번의 통신(요청/응답)의 진행과정에서 연속된 데이터 처리가 필요한 경우(ex. 온라인 쇼핑몰에서 로그인 후 장바구니 기능)를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션, 로컬스토리지 같은 기술이 필요에 의해 만들어졌다.