[HTTP] HTTP란?(HTTP 트랜잭션, 메시지, TCP/IP와의 차이점)

Ko Seoyoung·2021년 3월 16일
4

(본 블로그 포스팅은 'HTTP 완벽가이드: 웹을 어떻게 동작하는가' 책을 통해 공부한 내용을 기반으로 작성되었습니다.)

전세계의 웹 브라우저, 웹 애플리케이션, 서버는 모두 HTTP를 통해 서로 소통한다.

전세계 사람들 사이 영어가 공용어로 사용되는 것처럼, 현대 인터넷들은 HTTP를 공용어로 사용하고 있다.

🧐 : 그렇다면 HTTP란 무엇일까?


HTTP란?

HTTP는 Hypertext Transfer Protocol의 약자이다. 이를 그대로 해석하면 하이퍼텍스트를 전송하는 프로토콜(통신 규약)이라는 뜻이다.

HTTP는 하나의 프로토콜으로서 컴퓨터가 다른 컴퓨터와 메시지를 주고 받을 수 있게 해준다.

이 덕분에 사람들은 전세계의 웹 서버로부터 HTML 페이지, 텍스트 파일, JPEG 이미지, MPEG 동영상 등의 대량의 정보를 빠르고, 간편하고, 정확하게 자신의 pc에 설치된 웹브라우저로 전달받을 수 있게 되었다.

HTTP는 신뢰성 있는 데이터 전송 프로토콜을 사용하므로 전송 중 손상되거나 꼬이지 않는다! 따라서 개발자인 우리는 인터넷 결함이나 약점에 대한 걱정없이 에플리케이션의 고유기능 구현에 집중할 수 있다.


하이퍼 텍스트란?

웹은 컨텐츠들이 하이퍼텍스트로 묶인 집합이라고 볼수 있다.

기존의 문서가 위에서부터 또는 왼쪽에서 오른쪽으로 읽어가는 순차적이면서 서열형 구조라면, 하이퍼텍스트는 링크에 따라 그 차례가 바뀌는 임의적이면서 나열형인 구조를 가진다. 즉, 출판된 책처럼 작가의 의도대로 사용자가 따라가는 것이 아닌, 하이퍼링크로 연결된 문서들을 어떠한 행위(클릭)에 따라 자유롭게 이동할 수 있다. 이런 하이퍼텍스트의 등장은 검색엔진과 더불어 정보습득의 새로운 장을 인류에게 가져다 주었다.

하이퍼텍스트는 인터넷과 결합하여 HTML의 주된 구성요소가 되었다.


HTTP의 동작: "HTTP가 웹트래픽을 어떻게 전송하나요?"

(웹 트래픽(Web traffic): 웹 사이트에 방문하는 사람들이 데이터를 주고받은 양)

Response & Request (요청과 응답)

HTTP는 클라이언트와 서버 간의 요청과 응답의 형태로 동작한다.

  • 웹 클라이언트: 인터넷 익스플로어, 구글 크롬과 같은 웹 브라우저로 서버에게 HTTP 객체를 요청(request)하고 사용자의 화면에 보여준다.
  • 서버: 클라이언트로부터 요청 받은 객체를 찾고 찾는데 성공했다면, 객체와 그것의 타입,길이 등의 정보를 HTTP 응답(response)에 실어 클라이언트에게 보낸다.

예시) 우리가 웹페이지 http://www.shopping.naver.com/home.html 를 열어볼 때 크롬은 http요청을 www.shopping.naver.com 서버로 보낸다.

👩🏻‍💻 크롬(클라이언트): "네이버 쇼핑 서버님, 메인 홈페이지(ex) /home.html)좀 주실 수 있나요?"

🖥 네이버 쇼핑 서버: "쇼핑 페이지 여깄습니다 고객님~, 페이지 길이는 5349자이네요."


HTTP 트랜잭션

(transaction: 거래, 매매)

애플리케이션은 보통 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행한다. 따라서 시각적으로 풍부한 웹페이지를 가져올 때 대량의 HTTP 트랜잭션을 수행한다.

클라이언트가 웹 서버와 리소스를 주고받기 위해 HTTP를 어떻게 사용하는지 좀 더 자세히 알아보자.

위에서 말한것 처럼 HTTP 트랜잭션은 요청 명령응답 결과로 구성되어 있는데 이는 HTTP 메시지라고 불리는 정형화된 데이터 덩어리를 통해 이뤄진다.

메서드

HTTP는 HTTP 메서드라고 불리는 여러가지 종류의 요청 명령을 지원한다.

모든 HTTP 요청 메세지는 한 개의 메서드를 갖고, 해당 메서드에서는 서버에게 어떤 동작이 취해져야 하는지를 말해준다. (ex) 웹페이지 가져오기, 정보 수정하기, 파일 삭제하기 등)

👉 메서드 종류

  • GET: 서버에서 클라이언트로 지정한 리소스를 보내라
  • PUT: 클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장해라
  • DELETE: 지정한 리소스를 서버에서 삭제해라
  • POST: 클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보내라
  • HEAD: 지정한 리소스에 대한 응답에서, HTTP 헤더 부분만 보내라

상태코드

HTTP 응답 메세지는 세자리 숫자로 구성된 상태 코드와 텍스트로 된 사유 구절(reason phrase)이 함께 반환된다. 서버는 다음과 같이 상태코드를 통해 클라이언트에게 요청이 어떻게 처리되었는지를 알려준다.

👉 상태코드 종류

  • 200: 좋다. 문서가 바르게 반환되었다.
  • 302: 다시 보내라. 다른 곳에 가서 리소스를 가져가라.
  • 404: 없음. 리소스를 찾을 수 없다.

사유구절은 단지 설명만을 위해 포함된 것으로 실제 응답 처리에는 상태코드가 사용된다.

👉 사유구절 예시

200 OK , 200 Document attached , 200 Success , 200 All's cool dude


HTTP 메시지

HTTP 메시지는 단순한 줄 단위의 문자열이다! 특히 이진형식이 아닌 사람이 읽고 쓰기 편한 일반 텍스트로 되어 있다.

메시지는 요청과 응답, 두가지 종류가 있다. 웹 클라이언트가 웹 서버로 보낸 HTTP 메시지를 요청 메시지, 서버에서 클라이언트로 가는 메시지를 응답 메시지라고 한다.

요청과 응답 메시지는 다음과 같이 매우 비슷한 형식을 갖는다.


우리는 크롬과 같은 브라우저의 개발자툴을 통해 직접 요청과 응답 메시지를 확인할 수 있다. (네트워크 탭)

👉 메시지 형식

  • 시작줄: 요청인 경우 - 무엇을 해야하는지, 응답인 경우 - 무슨 일이 일어났는지
    ex) 요청: GET /carts/653 HTTP/1.0
    응답: HTTP/1.0 200 OK

  • 헤더: 0개 이상의 헤더 필드로 이루어지고, :로 구분되어 있는 하나의 이름과 하나의 값으로 구성된다.

  • 본문: 요청의 본문 - 웹 서버로 데이터를 실어 보냄, 응답의 본문 - 클라이언트로 데이터를 반환!
    문자열이며 구조적인 시작줄이나 헤더와 달리, 본문은 임의의 이진 데이터(이미지, 비디오, 오디오 등)를 포함할 수 있다.


TCP/IP란?

그렇다면 메세지가 어떻게 TCP 커넥션을 통해 한 곳에서 다른 곳으로 옮겨가는 것일까?

TCP는 Transmission Control Protocol로 전송제어 프로토콜이다. HTTP가 애플리케이션 계층의 프로토콜이라면, TCP는 전송계층의 프로토콜, IP(Internet Protocol)는 네트워크 계층의 프로토콜이다. TCP/IP는 TCP와 IP가 층을 이루는, 패킷 교환 네트워클 프로토콜의 집합이고, TCP/IP는 각 네트워크와 하드웨어의 특성을 숨기고 어떤 종류의 컴퓨터나 네트워크든 서로 신뢰성 있는 의사소통을 하게 해 준다.

HTTP 네트워크 프로토콜 스택 (Top-Down)

  • HTTP (애플리케이션 계층)
  • TCP (전송 계층)
  • IP (네트워크 계층)
  • 네트워크를 위한 링크 인터페이스 (데이트 링크 계층)
  • 물리적인 네트워크 하드웨어 (물리 계층)

그 중 개념상 가장 최상단에 있는 HTTP는 네트워크 통신의 핵심적인 세부사항에 대해 신경 쓰지 않고, 대신 대중적이고 신뢰성 있는 프로토콜인 TCP/IP에 맡긴다.

👉 TCP 역할

  • 오류없는 데이터 전송
  • 순서에 맞는 전달 (데이터는 언제나 보낸 순서대로 도착)
  • 조각나지 않는 데이터 스트림 (언제든 어떤 크기로든 보낼 수 있음)

접속, IP주소 그리고 포트번호

우리는 HTTP 클라이언트가 서버에 메시지를 전송할 수 있게 되기 전, 클라이언트와 서버 사이에 TCP/IP 커넥션을 맺어야 한다. 이는 마치 회사의 특정 사원에게 전화를 하고자 할 때 해당 회사에 전화를 걸고, 그 사원의 내선 번호를 눌러 전화 연결이 되는 것과 비슷하다.

우리는 url을 통해 IP 주소포트번호를 알 수 있고 이를 통해 TCP/IP 커넥션을 맺을 수 있다.

profile
Web Frontend Developer 👩🏻‍💻 #React #Nextjs #ApolloClient

0개의 댓글