많은 웹 애플리케이션이 HTTP를 이용해 통신함. HTTP는 어떻게 그 일을 해내는지 개략적으로 알아보자.
-
http는 인터넷의 멀티미디어 배달부다!
- 수십억 개의 JPEG 이미지, HTML 페이지, 텍스트 파일, MPEG 동영상, WAV 음성 파일, 자바 애플릿 등의 파일을 신뢰성 있는 데이터 전송 프로토콜을 사용하여 웹 브라우저로 옮겨줌.
-
url을 열면 웹 브라우저는 http 요청을 url 서버로 보냄 → 서버는 index.html 등 요청받은 객체를 찾음 → 성공 시 타입, 길이 등의 정보와 함께 http 응답에 실어 클라이언트에게 보냄.
-
웹 서버는 웹 리소스를 관리, 제공함. 리소스는 파일 시스템의 정적 파일을 포함해 동적 콘텐츠 리소스도 해당됨. 웹 콘텐츠를 이루기 위한 어떤 종류의 콘텐츠도 리소스가 될 수 있음.
미디어타입
- 인터넷은 수천 가지 데이터 타입을 다루기 때문에, HTTP는 웹에서 전송되는 객체 각각에 MIME 타입이라는 데이터 포맷 라벨을 붙임.
- MIME은 Multipurpose Internet Mail Extensions의 약자로 전자 우편을 위한 인터넷 표준 포맷임.
- 이메일에서 워낙 잘 동작했기 때문에, HTTP에서도 멀티미디어 콘텐츠를 기술하고 라벨을 붙이기 위해 채택함.
- 웹브라우저는 서버로부터 객체를 돌려받을 때, 다룰 수 있는 객체인지 MIME 타입을 통해 확인함.
- MIME 타입은
/
로 구분된 주 타입과 부 타입으로 이루어진 문자열 라벨임.
- ex)
text/html
, image/jpeg
URI
- 서버 리소스를 고유하게하기 위해 URI(Uniform Resource Identifier)가 있음.
- URI에는 URL과 URN이 있음.
-
URL은 Uniform Resource Locator의 약자로 특정 서버의 한 리소스에 대한 구체적인 위치를 서술함.
-
리소스 식별자의 가장 흔한 형태이자 오늘날 대부분의 URI는 URL임.
-
대부분의 URL은 세 부분으로 이루어진 표준 포맷을 따름.

- scheme : 리소스에 접근하기 위해 사용되는 프로토콜을 서술함. 보통
https://
형식임.
- www.blog.hubspot.com : 서버의 인터넷 주소를 제공.
- /marketing : 웹 서버의 리소스를 가리킴.
URN
- URN은 Uniform Resource Name의 약자로 콘텐츠를 이루는 한 리소스에 대해, 그 리소스의 위치에 영향을 받지 않는 유일무이한 이름 역할을 함.
- 위치 독립적이기 때문에 리소스를 여기저기 옮기더라도 문제없이 동작함.
- 하지만 효율적인 동작을 위해 URN은 리소스 위치를 분석하기 위한 인프라 지원이 필요한데, 그러한 인프라가 없어 채택이 늦어지고 있음.

-
HTTP의 요청과 응답으로 리소스를 주고받는데, 이를 트랜잭션
이라 함.
-
HTTP 메시지
라고 불리는 정형화된 데이터 덩이리를 이용해 이루어짐.
- 클라 → 서버는 요청 메시지, 서버 → 클라는 응답 메시지라 부름.

시작줄, 헤더, 본문의 단순한 줄 단위 텍스트 구조를 가짐. 시작줄이나 헤더와 달리 본문은 이미지, 오디오, 텍스트 등 임의의 이진 데이터를 포함할 수 있음.
-
HTTP 메서드
라는 여러 가지 종류의 요청 명령을 지원함.
-
모든 HTTP 응답 메시지는 상태 코드
와 함께 반환됨.
-
웹페이지는 첨부된 리소스들에 대해 각각 별개의 HTTP 트랜잭션을 필요로 함. 이는 시각적으로 풍부한 웹페이지를 가져올 때 대량의 HTTP 트랜잭션을 수행함. 결국 웹페이지는 하나의 리소스가 아닌 리소스의 모음임.
-
이런 HTTP는 TCP(Transmission Control Protocol) 커넥션을 통해 한 곳에서 다른 곳으로 옮겨감.
- HTTP는 애플리케이션 계층 프로토콜이기 때문에 네트워크 통신의 핵심적인 세부사항에 대해서 신경 쓰지 않음. 대신 대중적이고 신뢰성 있는 인터넷 전송 프로토콜인 TCP/IP에게 맡김.
- TCP가 제공하는 것.
- 오류 없는 데이터 전송.
- 순서에 맞는 전달.
- 조각나지 않는 데이터 스트림 (어떤 크기로든 보낼 수 있음).
- TCP/IP는 각 네트워크와 하드웨어의 특성을 숨기고, 어떤 종류의 컴퓨터나 네트워크든 서로 신뢰성 있는 의사소통을 하게 함.
- TCP 커넥션을 맺으려면 클라이언트와 서버가 URL에 있는 인터넷 프로토콜(IP) 주소와 포트번호를 사용함.
- 그래서 웹브라우저가 어떻게 HTTP를 이용해서 멀리 떨어진 곳에 있는 서버의 리소스를 사용자에게 보여줄까?
- 웹브라우저는 서버의 URL에서 호스트 명을 추출.
- 웹브라우저는 서버의 호스트 명을 IP로 변환.
- 웹브라우저는 URL에서 포트번호를 추출.
- 웹브라우저는 웹 서버와 TCP 커넥션을 맺음.
- 웹브라우저는 서버에 HTTP 요청을 보냄.
- 서버는 웹브라우저에 HTTP 응답을 돌려줌.
- 커넥션이 닫히면, 웹브라우저는 문서를 보여줌.
- 일단 TCP 커넥션이 맺어지면, 클라이언트와 서버 컴퓨터 간에 교환되는 메시지가 없어지거나, 손상되거나, 순서가 뒤바뀌어 수신되는 일은 결코 없음.
-
프로토콜 버전
- 0.9부터 시작해 현재 표준으로 쓰이고 있는 1.1 그리고 2.0도 나옴.
- 지금은 3.0도 준비 중이라고..
-
인터넷과 상호작용할 수 있는 웹 애플리케이션은 많음. 그 중에 대표적인 애플리케이션들은 다음과 같음.
프록시
: 클라이언트와 서버 사이에 위치한 HTTP 중개자.
- 보안을 위해 사용자를 대신해서 서버에 접근함. 프록시는 신뢰할 만한 중개자임.
- 회사에서 다운 받을 때 바이러스를 검출하거나 초등학생들에게서 성인 콘텐츠를 차단함.
캐시
: 많이 찾는 웹페이지를 클라이언트 가까이에 보관하는 HTTP 창고.
- 사본을 저장하는 특별한 종류의 HTTP 프록시 서버임.
게이트웨이
: 다른 애플리케이션과 연결된 특별한 웹 서버.
- HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용.
<aside>
💡 프록시 서버는 컨텐트 캐시, 보안, 필터링 등의 역할을 하는 중개자라면, 게이트웨이는 서로 다른 네트워크 통신에서 서로 다른 프로토콜을 호환 가능하게 하는 특별한 서버라고 볼 수 있음.
</aside>
터널
: 단순히 HTTP 통신을 전달하기만 하는 특별한 프락시.
- ex) 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송함으로써 웹 트래픽만 허용하는 사내 방화벽을 통과시킴.
에이전트
: 자동화된 HTTP 요청을 만드는 준지능적 웹클라이언트.
- ex) 사람의 통제 없이 스스로 웹을 돌아다니며 HTTP 트랜잭션을 일으키고 콘텐츠를 받아오는 자동화된 사용자 에이전트. 이걸로 검색엔진의 데이터베이스나 가격 비교 로봇을 만듦.