[Network] HTTP (1) - What Is HTTP?

먹보·2023년 3월 15일
0

MUK_BO's Network

목록 보기
5/8

✍ HTTP의 정의

HTTP는 HyperText Transfer Protocal의 약어로 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이며 어플리케이션 레벨의 프로토콜로 TCP/IP 상에서 작동한다.

HTTP의 정의를 조금 더 정확히 파악하기 위해서 각 단어의 의미와 특징을 한 번씩 알아보도록 하자.

📝 HyperText

HyperText는 HTML에 쓰이는 HyperText와 의미가 동일한데, 쉽게 말해 참조(하이퍼링크)를 통해 유저가 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트이다.

그렇기에 HyperText를 통해 유저는 다양한 정보에 접근할 수 있게 된다.

📝 Transfer

Transfer은 단어 뜻 그대로 "전송하다"라는 의미를 가지고 있지만 웹 상에서 전송하는 것이 단순한 글자가 아닌 서버와 서버간의 다양한 데이터를 전송하는 것에 의미를 가지고 있습니다.

📝 Protocol

프로토콜은 협약, 통신 규약 이라는 의미를 가집니다. 물리적으로 떨어진 컴퓨터 끼리 어떻게 HTML파일(HyperText)을 주고 받을지에 대한 약속입니다.

결론적으로, 위의 HTTP의 사전적 정의와는 다르게 HTTP의 글자 그대로를 풀어 설명한다면, HTTP란 "서버간에 데이터를 송수신하여 유저가 HyperText를 통해 데이터에 접근할 수 있게 도와주는 규약이다"라고 할 수 있다.

✍ HTTP의 특징

📝 Request & Response

위에서 설명한 HTTP를 통해 서버간의 통신이 이루어지게 되는데 이 때 데이터를 주고 받기 위해서는 요청이 필요하며 이를 "Request"그리고 해당 요청에 대한 응답을 "Response", 즉 HTTP의 가장 큰 특징 중 하나는 서버가 서로 데이터를 송수신하는데 있어 항상 Request와 Response가 이루어져야 한다는 것 입니다.

✏️ Request 구조

Request는 단순하게 말하자면 서버에서 다른 서버에 특정 데이터에 대한 요청이다.

  1. Start Line : 서버로 들어오는 요청에 대한 의도, 목표, 그리고 HTTP의 사용 버전이 담겨 있는 정보를 보여준다
  • 위의 이미지는 Express 환경에서 morgan이라는 패키지를 활용하여 Postman을 활용해 통신을 했을 때 보여지는 정보인데 엄밀히 말해서 Start Line은 아니지만 그래도 보여지는 형식이 비슷해 가져와 봤다.
  • 여기서 "Get"은 HTTP Method, "/"은 요청 목표, 그리고 "HTTP/1.1"은 사용되는 HTTP의 버전을 보여준다.
  1. Headers : 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분
  • 객체 형태로 추가 정보가 들어오기 때문에 Express 상에서 접근하기 위해서는 req.headers로 키 값들을 확인해 봐야 한다.
  • 주로 자주 쓰이는 Key 값은 Authorization과 Content-Type이 있는데 Authorization은 인증/인가 처리를 위한 로그인 토큰을 Content-Type은 해당 요청이 서버에 보내는 메세지의 타입을 정의한다.
  1. Body : 서버에 보내는 실제 데이터가 담겨져 있는 부분이다.
  • 만약 글을 생성하는 요청을 보낸다면 Body 내부에는, 제목 그리고 내용과 같은 정보들이 담겨져 있을 것이다.

✏️ Response 구조

Response 또한 Request에 대한 결과를 반환하는 객체이며, Request와 비슷한 구조로 구성되어 있다.

  1. Status Line : 응답의 결과를 보여주는 상태 줄

2.Headers : 요청의 헤더와 거의 동일한 역할 다만, 서버 관련 메타 데이터가 들어있다는 것이 차이

  1. Body : 요청의 Body와 비슷하게 결과 데이터를 담고 있으며 요청에 따라 생략이 가능하고 보통 JSON 타입의 데이터가 담겨있습니다.

📝 Stateless

사실 HTTP 통신 하면 가장 중요한 점은 Request/Response 객체의 구조가 아닌 바로 Stateless다.

Stateless란 단어 그대로 상태가 없는 것을 의미하는데, 요청과 요청 사이에 전달되는 정보의 상태 혹은 기억이 따로 저장되거나 유지 되지 않는 것을 뜻한다. 쉽게 설명하자면, 각 각의 요청은 독립적인 요청으로 간주된다.

실생활의 예를 들어 표현하자면,

햄버거 가게에 직원과 손님이 있을 때, 손님이 직원에게 1번 세트를 주문하고 나서 잠시 있다가 "기존 주문에 2번 세트 추가해 주세요"라고 요청을 하면 직원은 서로 독립된 요청으로 알고 있기 때문에 "기존 주문"을 제대로 인식하지 못하게 된다. 따라서 제대로 된 요청을 보내려면 손님은 직원에게 "1번 세트와 2번세트 주문 부탁드립니다"라고 요청을 해야 한다.

유투브에 실생활 예제를 사용하여 쉽게 풀이한 영상이 많으니 그것을 참고하면 이해가 빠를 것이다. HTTP STATELESS

📝 Connectionless

HTTP 하면 생각나는 다른 특징 중 하나인데 실질적으로 많이 대두되지는 않아서 개념만 간단하게 짚고 넘어가겠다.

각 각의 요청과 응답 싸이클은 독립적인 싸이클이기 때문에 2개의 엔드포인트 사이에 유지되는 연결이나 세션은 없다는 것이다. 다시 말해서, 클라이언트가 서버에 요청을 하고 응답을 받으면 바로 TCP/IP 연결을 끊어 연결을 유지 하지 않는 것이다.

✍ HTTP Method

HTTP 통신을 통해 클라이언트와 서버는 다양한 종류의 통신을 할 수 있는데 이러한 통신의 의도를 명확하게 구분하기 위해서 다음과 같은 Method를 정의하여 사용하고는 한다.

메소드가 가지고 있는 역할들은 약속이기 떄문에 반드시 지켜져야만 하는 것은 아니다 그리고 여기에 나열되어 있는 메소드 외에도 다양한 메소드들이 존재하기 때문에 공식문서를 참고 바랍니다.

📝 GET

GET 메소드는 클라이언트에서 백 서버로부터 특정 데이터를 가지고 오고 싶을 때 사용하는 메소드이다.

✏️ 특징

Safe란 서버의 상태를 바꾸지 않는 것을 뜻한다.

Idempotent란 단일 요청에 대한 결과가 그 요청을 복수로 했을 때의 요청 결과 값과 차이가 없을 경우 Idempotent를 가진다고 한다.

Chacheable란 캐싱이 가능한 메소드를 뜻한다.

📝 POST

POST 메소드는 백 서버에 데이터를 요청 바디에 담아 DB에 변화를 주는 것이다.

=> POST 요청은 일반적으로 로그인, 회원가입, 글 생성과 같이 데이터를 새롭게 생성할 때 쓰인다.

✏️ 특징

📝 PUT

PUT 메소드는 새로운 데이터를 생성하거나 기존에 데이터를 덮어 씌울 때 사용하는 메소드이다.

✏️ 특징

📝 PATCH

PATCH 메소드는 이미 저장되어 있는 데이터의 일부분을 수정할 때 쓰이는 메소드이다.

✏️ 특징

📝 DELETE

DELETE 메소드란 단어 그대로 특정 데이터를 지울 때 사용하는 메서드이다.

✏️ 특징

단독으로 여러가지 API를 만들면서 알아낸 사실이 이러한 HTTP Method는 말 그대로 Protocol이라는 것이다.

쉽게 말하자면, 지켜지지 않아도 상관은 없다는 것이다. 물론 개발자들간의 의사소통에 문제가 생길 것이 뻔하고 보기에는 좋지 않을 수도 있지만 지장은 없다는 뜻이다. GET 요청을 사용해 글을 생성할 수 있고 GET 요청을 사용해 어떤 데이터를 지울 수도 있다. 하지만 어디까지나 권하지는 않는다.

여기까지가 기본적인 HTTP에 대한 설명이고 다음 게시글부터는 HTTP 버전에 대한 특징을 하나 하나 수박 겉핧기 방식으로 나열해보려고 한다.

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글