오늘은 HTTP 에 대해서 배웠다. HTTP 란 무엇인가 그리고 어디에 쓰는가, 왜 필요한가에 대해서 정리해보는 시간을 가져보자.
먼저 HTTP 라는 것이 무엇인지부터 정의해보자.
HTTP 란 HyperText Transfer Protocol 의 약자로 Client 와 Server가 통신규약이다. 이는 웹에서 모든 데이터 교환의 기초이다. 이 통신 규약을 통해 인터넷에서 클라이언트와 서버는 클라이언트에서 서버로 요청을 보내는 request 와 서버에서 클라이언트로 응답을 보내는 response로 통신을 하게끔 되어 있다.
HTTP는 1989년에 처음 탄생하였고 text를 기반으로 클라이언트와 서버가 통신을 한다. 그러나 텍스트만으로 통신을 하였기에 제3자가 클라이언트와 서버사이의 통신데이터를 바로 볼 수 있었고 그것이 문제가 되어 https 라는 것이 탄생하였다. https 라는 것은 기존의 텍스트 형식을 바이너리 형태로 주고 받기 때문에 제3자가 직관적으로 무슨 통신을 하는 지 알 수 없다. 그렇기에 현재 대부분의 브라우저는 https 사이트를 지원하고 https 가 아닌 웹사이트에 접속하게 되면 보안이 안되어 있다고 표시하게 된다.
밑의 사진을 참조하기 바란다.
출처 - 드림코딩 Node.js 강의
Http 의 풀네임을 생각해보자. HyperText Transfer Protocol 이다. Protocol 은 무엇일까? 한국어로 번역하면 규약
이다.서로간의 약속이라는 의미다. 만약 규약이 없다면 어떻게 될까? 각기 다른 사람들이 서로 GET,POST,PUT,DELETE,PATCH 등등을 다르게 사용한다면 어떤 현상이 발생할까? 아마 웹개발자들을 골머리를 앓을 것이다. 어떤 웹사이트는 GET을 삭제로 쓸 수 있다. (단어의 의미상 그렇진 않겠지만.)
다른 예시를 들어보자. 만약 우리사회에 법이 없다면 어떻게 될까? 누군가를 폭행했을 때 그것이 죄가 될까? 법이 없는데? 모든 것을 윤리적으로 판단해야 할 것이다. 그렇게 된다면 누군가에게는 그것이 엄청나게 큰 죄일 것이고 누군가에게는 잘못이 아니라고 생각이 들것이다. 우리는 각자 다른 생각을 가진 존재이기에 규약이라는 것을 적용해서 객관적으로 판단할 수 있는 기준을 정해서 질서있는 사회를 구성한다.
HTTP는 HTTP-MESSAGE라는 것을 통해 통신을 한다. http-message는 서버와 클라이언트 간에 데이터가 교환되는 방식이다. 메세지 타입은 request과 response가 있다.
사실 개발자가 http메세지를 손수 만질 일은 없다고 한다. 나는 아직 개념을 배우는 단계이기에 이말이 제발 사실이길 바란다..........
대부분 http-message를 구성하는 것은 소프트웨어,브라우저,프록시,웹 서버가 그 일을 한다고 한다.
참고자료 MDN
더 자세한 내용은 MDN에 있다.HTTP-Message는 mdn 을 읽어보면 잘 이해가 될것이다.
http-message 의 start-line에는 요청하는 Request Method가 들어가있고 응답으로는 Status-Code가 들어가있다.
이제 밑에서 Request Method 가 무엇이고 Status Code 가 무엇인지 알아보도록 하자.
http-header란? 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해주는 역할이다. http-message 의 구성요소로서 최소한의 정보를 담고 있다고 생각하면 된다.
요약
하자면
요청 header - Host, Accept, User-Agent, Cokie, Referer 등등이 담긴다
응답 header - Date, Server, Content-Type, Last-Modified 등등이 담긴다.
클라이언트는 서버에게 Request 를 보낸다. 이때 무엇을 원하는지를 전달해야 한다. 무엇을 원하는지 전달하지 않으면 서버는 요청을 처리할 수가 없다.
그래서 무슨 요청을 하는지 Request Method
라는 것을 정의하여 서버에게 전달한다.
이 Method들을 통해 서버는 클라이언트가 무엇을 원하는지 알 수 있게 된다.
클라이언트의 요청을 받은 서버는 응답을 보내줘야 한다. 그렇다면 응답이 잘 처리되었는지 잘못 처리되었는지 알려줄 필요가 있다. 이때 필요한 것이 Status Code
다.
출처 - 드림코딩 Node.js 강의
1xx ~ 5xx 까지 수많은 Status Code가 있다. Status Code를 잘 정리한 문서 인 MDN를 참조하길 바란다.
http는 깊게 파고 들면 파고들 수록 굉장히 공부량이 많아 질 듯하다. 사실 네트워크라는 것을 모조리 이해하기란 쉽지 않은 듯하다.그것이 전공이 아니고서야.... 하지만 웹 개발자라고 한다면 뗄래야 뗄 수 없는 것도 네트워크(통신) 아니겠는가. 만약 프론트앤드 개발자라면 어떻게 백앤드와 통신을 할것인가?가 문제를 가지고 있을 것이고, 백앤드는 프론트앤드의 요청을 어떻게 응답을 해줄 것인지에 대한 문제를 가지고 있을 것이다.
이제 Rest api 를 배울텐데 조금이나마 http 에 대한 이해가 생겨서 다행이라고 생각한다. 조금더 서로간의 통신에 대해서 배워보고 싶다는 생각이 들었다. 그리고 얼른 활용해보고 싶다.
잘 읽고갑니다!