개발/네트워크

HTTP란? HTTP에 대해 a부터 z까지 설명드립니다 - 1편

IT의 타이탄 2024. 3. 20. 15:50
SMALL

안녕하세요 IT에 대한 모든것을 알려드리는 IT의 타이탄입니다.

 

 

아마 이 글에 들어오신 분들은 HTTP가 무엇인지? HTTP에 대한 구조는 무엇인지등 다양한 궁금증을 가지고 있으실 것입니다.

 

 

그런 분들을 위해 HTTP에 H자도 몰라도 이해가 될정도로 굉장히 쉽게 이번 글에서 다뤄보고자합니다.

 

 

HTTP라는 개념은 우리가 아는것보다 훨씬 더 깊이 있고 알고 있어야하는 것이 많은 개념인데요 ! 그렇다해서 절대 겁먹지 않으셔도 좋습니다.

 

 

제가 1편 2편으로 나눠 여러분에게 굉장히 쉽게 설명드릴 예정이기 때문입니다. 이번 1편에서는 HTTP개념을 시작으로 특징은 무엇이고 구조는 무엇인지에 대해 가르쳐드리고자 합니다.

 

 

글의 목차는 다음과 같습니다

 

[목차]

  1. HTTP란?
  2. HTTP의 특징 4가지

 

해당 내용을 확인하시고 내가 모르는 개념들이 있는 부분을 읽으시길 바라며, 글을 작성하도록 하겠습니다.

 

 

그럼 HTTP란? 개념부터 시작하겠습니다.

 

 

HTTP란? HTTP에 대해 a부터 z까지 설명드립니다.

1. HTTP란?

HTTP란, HyperText Transfer Protocol이라는 뜻으로 하이퍼 텍스트 간의 링크를 통해서 연결할 수 있도록 적용하는 프로토콜의 줄임말입니다.

 

 

이해가 되시나요? 이해가 되신다면 이 글을 안보셔도 됩니다. 당연히 이해가 안될것입니다. 굉장히 어려운말들만 가득하게 설명했기 때문입니다.

 

 

HTTP를 쉽게 표현하자면, 웹이나 앱끼리 소통할 수 있도록 만든 약속이라고 생각하시면 됩니다.

 

 

예를들어, 네이버 메일을 통해 친구에게 메일을 보내기 위해선 나의 이메일 창에서 친구의 이메일로 메시지가 전달되어야 합니다.

 

 

이때, 적용되는 규칙이 바로 HTTP라고 보시면 됩니다.

 

 

이러한 HTTP는 대표적으로 4가지의 특징을 가지고 있는데요 해당 4가지 특징은 다음과 같습니다.

 

 

2. HTTP의 특징 4가지

HTTP의 특징은 크게 4가지가 존재합니다.

 

HTTP의 특징 4가지
1. 클라이언트와 서버의 구조안에서 사용된다.
2. 무상태 프로토콜과 비연결성으로 이루어져 있다.
3. HTTP 메시지 형태를 지니고 있다. (중요)
4. 단순하고 확장 가능성이 존재한다.

 

 

각각의 특징을 살펴보면 다음과 같습니다.

 

 

1. 클라이언트와 서버의 구조 안에서 사용된다.

 

👉 HTTP는 클라이언트와 서버 간의 소통 안에서 사용되는 규약으로 다음과 같은 규칙을 가지고 있습니다.

 

 

클라이언트 : 서버에게 메시지를 요청한다. (Request)

 

서버 : 클라이언트 요청의 응답한다. (Response)

 

 

예를 들어, 네이버에서 로그인을 누르게 되면, 클라이언트는 우리가 되고 네이버 웹서버는 서버가 됩니다.

 

로그인을 위해선 HTTP를 통해 네이버 웹서버로 요청한다.

 

즉, 우리가 로그인 요청을 네이버 웹서버로 보내고, 네이버 웹서버에서는 우리의 로그인정보를 확인후 아이디와 비밀번호가 일치하다면, 로그인 성공이라는 응답을 보내게 되는 것입니다.

 

 

이 사이에서 HTTP 메세지가 오고가곤 하는데요. 이 HTTP 메세지가 우리가 반드시 알아야하는 개념입니다.

 

 

추후에 설명드릴 HTTP메서드와도 굉장히 밀접한 개념이기 때문에 우리는 반드시 알아야합니다.

 

 

 

2. 무상태 프로토콜과 비연결성으로 이루어져있다.

 

👉 무상태라는 것은 서버가 클라이언트의 상태를 보존하지 않는다는 것을 의미 합니다. 상태를 보존하지 않다는것은 다음과 같은 의미로 해석할 수 있습니다.

 

상태를 보존하지 않는다?
-> 기존 대화의 맥락을 고려하지 않는다.
-> 데이터를 계속 전송해야한다.
-> 클라이언트에서 서버에게 과거에 했던 이야기를 구체적으로 이야기해야한다.

 

 

가게 점원을 예로 들면, 우리가 휴대폰을 산다고 했을 때, 우리는 클라이언트, 가게점원은 서버가 되는것입니다.

 

 

우리가 아이폰을 산다고하면 점원은 현금, 신용카드 중에서 어떤것으로 결제 할거냐고 물어볼것입니다. 

 

 

이때, 구매하기 전에 점원이 바뀐다면 다시한번 어떤것으로 결제할 것인지 말해줘야하며, 이는 클라이언트 측에서 말해줘야합니다.

 

 

그렇다는 것은 점원이 바뀌어도 우리의 요청에 따른 응답이 가능하다는 소리입니다. 상태를 보존하지 않기 때문에 클라측에서 데이터를 계속 보내주기 때문에 점원은 이를 알아 듣고 결제 처리를 할 수 있다는 소리입니다.

 

 

만약 상태를 보존한다면? 우리는 지정된 점원에게서만 물건을 구매할 수 있겠죠. 왜냐면 클라측에서 데이터를 보내지 않기 때문입니다.

 

 

상태를 보존하는 프로토콜의 경우에는 서버가 클라이언트의 정보를 담고있기 때문에, 클라측에서 데이터를 따로 보내지 않고 서버에서 이를 기억하고 처리하게 되는것입니다.

 

 

그렇기 때문에, 내가 뭘살지 모르는 점원에게 결제를 요청해도 우리는 결제를 받을 수 없게되는 것입니다. 그런이유로 무상태 프로토콜 사용하는 것을 지향하는데요

 

 

하지만 무상태 프로토콜일 때의 한계는 당연히 존재하게됩니다. 바로 로그인이라는 기능때문입니다. 로그인이라는 것은 홈페이지에서 어떤 권한을 갖는다는 것을 의미할 것입니다.

 

홈페이지에서 내가 계속 있다는 메시지를 보내야함

 

 

그렇다보니 서버에게 "계속 나 지금 아직 여기 홈페이지에 로그인 되어있어!" 라는 메세지를 계속 보내야하는 것입니다. 그렇다는 것을 당연하게도 통신량이 많아진 다는것이고 비용도 늘어난다는 것입니다.

 

 

이를 해결하기 위한 방법이 바로 브라우저 쿠키와 서버 세션이라는 것입니다. 이에 대한 정보는 추후에 제가 더 자세하게 다뤄보도록 하겠습니다.

 

 

본론으로 돌아와 우리는 최대한 Stateless(무상태) 하도록 개발을 진행해야하고 어쩔수 없는 경우에만 Stateful하게 개발해야합니다.

 

 

처음부터 Stateful하게 개발하게 된다면, 서버 자원을 너무 소모하게 되고 비효율적인 자원관리가 될 뿐만아니라 에러 발생시 크리티컬한 이슈를 불러일으킬 수 있습니다.

 

 

예를들어, 선착순 구매 이벤트를 위해 우리는 로그인이 필요없는 이벤트 페이지를 들어간 후에 구매를 위해 로그인을 한 경험이 있을것입니다.

 

 

이는 한번에 트래픽이 몰리는가중을 분산시키기위한 Stateless한 페이지 뒤에 Stateful한 페이지를 숨겨놓은 것입니다. 서버개발자들이 가장 골치아파하는 트래픽이 몰리는 문제를 Stateless 페이지로 해결한 사례가 되는것입니다.

 

 

또한 HTTP는 비연결성이라는 특징을 가지고 있는데요. 서버와 클라사이에 연결을 계속하게 된다면 앞서 말씀드린 것처럼 서버 자원을 소모하게 됩니다.

 

 

 

A라는 유저는 이미 네이버를 나갔는데, 네이버 웹서버에서 A라는 유저와의 연결을 굳이 계속할 이유가 없는 것입니다.

 

 

하지만 비연결성에도 특징이 존재하는데요. 크롬에서 구글 검색을 하게되면 수많은 페이지가 로딩되고 그안에서는 코드 뿐만아니라 이미지, 동영상 등 수많은 자원이 함께 다운로드 되게됩니다.

 

 

매번 연결할때마다 이를 다운하게 되면 오히려 서버자원을 더 소모하게 되는 경우가 발생하게 되는데요. 이를 지속연결로 문제를 해결하고자하며 최근에 있어서는 더많은 최적화를 이루고 있다고 알고계시면 됩니다.

 

 

다음은 HTTP메시지에 대한 내용을 다뤄야하지만 글이 너무 길어지는 관계로 다음 2편에서 작성하도록 하겠습니다.

 

 


 

지금까지 HTTP란? 을 시작으로 특징까지의 개념을 설명드렸습니다.

 

 

이외에도 우리는 HTTP의 메세지와 메서드에 대해 배워야하는데요. HTTP의 메서드는 과연 무엇이고 왜 배워야할까요? 이는 2,3편에서 다뤄보도록 하겠습니다!

 

 

또한 해당 글을 보시고 모르는 내용이 있다면 댓글 달아주시면 최대한 빠르고 정확하게 답변달아드리도록 하겠습니다!

 

 

긴 글 읽어주셔서 감사드리고 다음 2편인 HTTP 메세지로 찾아뵙겠습니다.

LIST