HTTP는 HyperText Transfer Protocal의 약어로 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이며 어플리케이션 레벨의 프로토콜로 TCP/IP 상에서 작동한다.
HTTP의 정의를 조금 더 정확히 파악하기 위해서 각 단어의 의미와 특징을 한 번씩 알아보도록 하자.
HyperText는 HTML에 쓰이는 HyperText와 의미가 동일한데, 쉽게 말해 참조(하이퍼링크)를 통해 유저가 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트이다.
그렇기에 HyperText를 통해 유저는 다양한 정보에 접근할 수 있게 된다.
Transfer은 단어 뜻 그대로 "전송하다"라는 의미를 가지고 있지만 웹 상에서 전송하는 것이 단순한 글자가 아닌 서버와 서버간의 다양한 데이터를 전송하는 것에 의미를 가지고 있습니다.
프로토콜은 협약, 통신 규약 이라는 의미를 가집니다. 물리적으로 떨어진 컴퓨터 끼리 어떻게 HTML파일(HyperText)을 주고 받을지에 대한 약속입니다.
결론적으로, 위의 HTTP의 사전적 정의와는 다르게 HTTP의 글자 그대로를 풀어 설명한다면, HTTP란 "서버간에 데이터를 송수신하여 유저가 HyperText를 통해 데이터에 접근할 수 있게 도와주는 규약이다"라고 할 수 있다.
위에서 설명한 HTTP를 통해 서버간의 통신이 이루어지게 되는데 이 때 데이터를 주고 받기 위해서는 요청이 필요하며 이를 "Request"그리고 해당 요청에 대한 응답을 "Response", 즉 HTTP의 가장 큰 특징 중 하나는 서버가 서로 데이터를 송수신하는데 있어 항상 Request와 Response가 이루어져야 한다는 것 입니다.
Request는 단순하게 말하자면 서버에서 다른 서버에 특정 데이터에 대한 요청이다.
Response 또한 Request에 대한 결과를 반환하는 객체이며, Request와 비슷한 구조로 구성되어 있다.
2.Headers : 요청의 헤더와 거의 동일한 역할 다만, 서버 관련 메타 데이터가 들어있다는 것이 차이
사실 HTTP 통신 하면 가장 중요한 점은 Request/Response 객체의 구조가 아닌 바로 Stateless다.
Stateless란 단어 그대로 상태가 없는 것을 의미하는데, 요청과 요청 사이에 전달되는 정보의 상태 혹은 기억이 따로 저장되거나 유지 되지 않는 것을 뜻한다. 쉽게 설명하자면, 각 각의 요청은 독립적인 요청으로 간주된다.
실생활의 예를 들어 표현하자면,
햄버거 가게에 직원과 손님이 있을 때, 손님이 직원에게 1번 세트를 주문하고 나서 잠시 있다가 "기존 주문에 2번 세트 추가해 주세요"라고 요청을 하면 직원은 서로 독립된 요청으로 알고 있기 때문에 "기존 주문"을 제대로 인식하지 못하게 된다. 따라서 제대로 된 요청을 보내려면 손님은 직원에게 "1번 세트와 2번세트 주문 부탁드립니다"라고 요청을 해야 한다.
유투브에 실생활 예제를 사용하여 쉽게 풀이한 영상이 많으니 그것을 참고하면 이해가 빠를 것이다. HTTP STATELESS
HTTP 하면 생각나는 다른 특징 중 하나인데 실질적으로 많이 대두되지는 않아서 개념만 간단하게 짚고 넘어가겠다.
각 각의 요청과 응답 싸이클은 독립적인 싸이클이기 때문에 2개의 엔드포인트 사이에 유지되는 연결이나 세션은 없다는 것이다. 다시 말해서, 클라이언트가 서버에 요청을 하고 응답을 받으면 바로 TCP/IP 연결을 끊어 연결을 유지 하지 않는 것이다.
HTTP 통신을 통해 클라이언트와 서버는 다양한 종류의 통신을 할 수 있는데 이러한 통신의 의도를 명확하게 구분하기 위해서 다음과 같은 Method를 정의하여 사용하고는 한다.
메소드가 가지고 있는 역할들은 약속이기 떄문에 반드시 지켜져야만 하는 것은 아니다 그리고 여기에 나열되어 있는 메소드 외에도 다양한 메소드들이 존재하기 때문에 공식문서를 참고 바랍니다.
GET 메소드는 클라이언트에서 백 서버로부터 특정 데이터를 가지고 오고 싶을 때 사용하는 메소드이다.
Safe란 서버의 상태를 바꾸지 않는 것을 뜻한다.
Idempotent란 단일 요청에 대한 결과가 그 요청을 복수로 했을 때의 요청 결과 값과 차이가 없을 경우 Idempotent를 가진다고 한다.
Chacheable란 캐싱이 가능한 메소드를 뜻한다.
POST 메소드는 백 서버에 데이터를 요청 바디에 담아 DB에 변화를 주는 것이다.
=> POST 요청은 일반적으로 로그인, 회원가입, 글 생성과 같이 데이터를 새롭게 생성할 때 쓰인다.
PUT 메소드는 새로운 데이터를 생성하거나 기존에 데이터를 덮어 씌울 때 사용하는 메소드이다.
PATCH 메소드는 이미 저장되어 있는 데이터의 일부분을 수정할 때 쓰이는 메소드이다.
DELETE 메소드란 단어 그대로 특정 데이터를 지울 때 사용하는 메서드이다.
단독으로 여러가지 API를 만들면서 알아낸 사실이 이러한 HTTP Method는 말 그대로 Protocol이라는 것이다.
쉽게 말하자면, 지켜지지 않아도 상관은 없다는 것이다. 물론 개발자들간의 의사소통에 문제가 생길 것이 뻔하고 보기에는 좋지 않을 수도 있지만 지장은 없다는 뜻이다. GET 요청을 사용해 글을 생성할 수 있고 GET 요청을 사용해 어떤 데이터를 지울 수도 있다. 하지만 어디까지나 권하지는 않는다.
여기까지가 기본적인 HTTP에 대한 설명이고 다음 게시글부터는 HTTP 버전에 대한 특징을 하나 하나 수박 겉핧기 방식으로 나열해보려고 한다.