HTTP 개관
많은 웹 애플리케이션이 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(Uniform Resource Identifier)가 있음.
- URI에는 URL과 URN이 있음.
- URL은 Uniform Resource Locator의 약자로 특정 서버의 한 리소스에 대한 구체적인 위치를 서술함.
- 리소스 식별자의 가장 흔한 형태이자 오늘날 대부분의 URI는 URL임.
- 대부분의 URL은 세 부분으로 이루어진 표준 포맷을 따름.
- scheme : 리소스에 접근하기 위해 사용되는 프로토콜을 서술함. 보통
https://
형식임. - www.blog.hubspot.com : 서버의 인터넷 주소를 제공.
- /marketing : 웹 서버의 리소스를 가리킴.
- URN은 Uniform Resource Name의 약자로 콘텐츠를 이루는 한 리소스에 대해, 그 리소스의 위치에 영향을 받지 않는 유일무이한 이름 역할을 함.
- 위치 독립적이기 때문에 리소스를 여기저기 옮기더라도 문제없이 동작함.
- 하지만 효율적인 동작을 위해 URN은 리소스 위치를 분석하기 위한 인프라 지원이 필요한데, 그러한 인프라가 없어 채택이 늦어지고 있음.
미디어타입
URI

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 트래픽을 다른 프로토콜로 변환하기 위해 사용.
터널
: 단순히 HTTP 통신을 전달하기만 하는 특별한 프락시.- ex) 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송함으로써 웹 트래픽만 허용하는 사내 방화벽을 통과시킴.
에이전트
: 자동화된 HTTP 요청을 만드는 준지능적 웹클라이언트.- ex) 사람의 통제 없이 스스로 웹을 돌아다니며 HTTP 트랜잭션을 일으키고 콘텐츠를 받아오는 자동화된 사용자 에이전트. 이걸로 검색엔진의 데이터베이스나 가격 비교 로봇을 만듦.
프록시 서버는 컨텐트 캐시, 보안, 필터링 등의 역할을 하는 중개자라면, 게이트웨이는 서로 다른 네트워크 통신에서 서로 다른 프로토콜을 호환 가능하게 하는 특별한 서버라고 볼 수 있음.