[Boostcourse] 풀스택/웹 프로그래밍(풀스택)

HTTP 프로토콜 이해 { 개요, 작동방식(stateless), URL }

Ben의 프로그램 2023. 7. 11. 22:31
728x90
인터넷 네트워크 통신의 이해

인터넷하면 WWW 을 떠올리곤 합니다. 하지만 WWW이 인터넷의 전부인 것은 아닙니다. 물리적인 하나의 컴퓨터에는 여러 개의 서버가 동작할 수 있으며 각각의 서버는 Port 라는 것으로 구분됩니다. Web 은 80 번이라는 포트를 이용하구요. Email 은 25 번 FTP 는 21 번 포트를 사용합니다. 인터넷은 한 마디로 네트워크들의 네트워크라고 말할 수 있습니다. 수많은 네트워크들의 결합체인 것이죠. 이러한 인터넷은 보통 TCP / IP 라는 약속으로 연결되어 있습니다. 
HTTP (Hypertext Transfer Protocol) 란?
인터넷 중 웹에서는 서로 통신하기 위해서 HTTP 를 사용합니다. 팀 버너스리와 CERN 에서 웹 브라우저 및 HTTP 를 발명하게 됩니다. HTTP 는 서버와 클라이언트가 인터넷 상에서 데이터를 주고 받기 위한 프로토콜입니다. 가장 성공한 인터넷 프로토콜이 HTTP 입니다. HTTP 는 어떤 종류의 데이터도 전송할 수 있도록 설계되어 있습니다. 이미지, 오디오, 텍스트 등 종류를 가리지 않고 전송할 수 있습니다. 지금 여러분이 이 강의를 들을 수 있는 이유이기도 합니다. HTTP 는 계속 발전해서 HTTP version 2 까지 등장한 상태입니다. 우리 강의에서는 현재 가장 많이 사용되고 있는 HTTP 1.1 을 다뤄보도록 하겠습니다. 
HTTP 작동방식
HTTP 는 서버 클라이언트 모델을 따릅니다. 클라이언트가 요청을 서버에 보내면 서버는 응답을 클라이언트에게 보내게 됩니다. 요청과 응답으로 이루어져 있습니다. HTTP 는 무상태 프로토콜이라고도 부릅니다. 무상태 프로토콜이라는 것은 클라이언트가 서버에게 요청해서 클라이언트에게 응답하는데, 그 전에 먼저 연결을 하는 과정이 일어나고 서버는 클라이언트에게 받은 요청을 응답 결과로 만들어서 응답 하고 나면 해당 연결을 바로 끊습니다. 다시 말하자면 이 클라이언트가 바로 다음 것을 요청한다 하더라도 서버는 이 클라이언트를 인식할 수 없습니다. 이런 stateless 방식은 장단점을 가지고 있습니다. 장점은 불특정 다수를 대상으로 하는 서비스에 적합합니다. 왜냐하면 서버가 동시에 처리할 수 있는 클라이언트의 수는 한정되어 있는데, 응답하고 바로 해당 클라이언트의 자리를 비워버리기 때문에 많은 수의 사람들이 사용을 하더라도 서버는 계속해서 처리를 할 수 있게 됩니다. 단점은 그냥 연결을 끊어버리기 때문에 클라이언트가 무엇을 했는지 알 수가 없습니다. 예를 들어 내가 쇼핑몰에서 쇼핑을 하다가 결제를 하려고 했는데, 내가 어떤 것을 결제하려는지 모른다는 것이죠. 기본적으로 HTTP 가 무상태 프로토콜이기 때문에 그렇습니다. 이런 단점을 극복하기 위해 Cookie 와 같은 기술들이 등장하여 정보를 유지할 수 있게 되었습니다.
URL (Uniform Resource Locator)
URL 은 문서와 다른 자원들의 위치를 나타내기 위해서 사용이 됩니다. URL 은 크게 3 부분으로 나뉘어집니다. 프로토콜의 종류, 자원이 있는 서버의 IP 주소 혹은 도메인 이름, 자원의 위치로 나뉘어 집니다. 물리적인 컴퓨터를 찾기 위해서 필요한 것은 IP 주소 혹은 도메인 이름입니다. IP는 쉽게 말하면 집 주소라고 할 수 있습니다. 하나의 컴퓨터에는 하나의 IP 가 존재한다고 이해할 수 있습니다. 집 안에 여러 방들이 존재하는 것처럼 각 방을 Port 라고 할 수 있습니다. 그래서 물리적인 컴퓨터를 서버를 찾기 위해서는 port 값이 필요합니다. HTTP 는 기본 포트 값이 80번 입니다.
HTTP 동작 과정 그림
위 그림은 굉장히 중요하니까 꼭 기억하셨으면 좋겠습니다. 동작 과정을 살펴보겠습니다. 우선 클라이언트가 웹 서버에 연결해야 합니다. 그 다음 클라이언트가 다시 웹 서버에게 요청을 보내야합니다. 반드시 클라이언트가 요청을 하면 이때 요청에 따른 응답 결과를 보내주는 반응이 이어집니다. 응답이 이루어지고 나면 HTTP 의 Stateless 특성에 따라 연결이 바로 끊어지게 됩니다. 조금 더 자세히 살펴볼까요. HTTP 요청 데이터는 정해진 규칙이 있습니다. 이것을 요청 데이터 포멧이라고 하는데요. 요청 포멧에는 요청 헤더, 요청 바디로 구성됩니다. 요청 헤더의 첫 줄을 보겠습니다. 크게 3부분으로 나뉘어져 있는데요. 첫 번째 GET 은 요청 메서드입니다. 이어지는 부분이 요청 URI 입니다. 요청하는 자료의 위치를 의미합니다. 마지막으로 나오는 부분은 HTTP 프로토콜의 버전을 의미합니다. 웹 브라우저가 사용하는 HTTP 의 버전을 의미합니다. 요청 바디가 지금 비어있는 것을 볼 수 있는데요. GET 요청 메서드는 실제로 요청할 때 가져가야 하는 것들을 URI 에 함께 가져갑니다. 요청 바디가 그래서 없습니다. 응답 데이터 포멧을 살펴보겠습니다. 요청 데이터 포멧과 마찬가지로 응답 헤더 부분, 빈줄, 응답 바디로 구분되어 있습니다. 

 

 

 

출처 : boostcourse 웹 프로그래밍(풀스택) 
https://www.boostcourse.org/web316/lecture/20655?isDesc=false