Home 9장 HTTP에 기능을 추가한 프로토콜
Post
Cancel

9장 HTTP에 기능을 추가한 프로토콜

9.1 HTTP를 기본으로 하는 프로토콜

HTTP 규격이 만들어졌을 때 주로 HTML로 작성된 문서를 전송하기 위한 프로토콜로 HTTP를 생각했다. 하지만 시간이 흐르면서 웹의 용도는 크게 변하고 있고, 그로인해 HTTP라는 프로코톨의 제한이나 한계가 생겨났다. 그래서 HTTP를 기반으로 추가하는 형태로 새로운 프로토콜이 몇 가지가 구현되었다.

9.2 HTTP의 병목 현상을 해소하는 SPDY

HTTP의 병목 현상

페이스북, 트위터 등의 SNS에서는 많은 사람들이 작성한 정보를 실시간으로 볼 수 있다. 이렇게 갱신된 정보를 가능한 빨리 실시간으로 표시하기 위해서는 서버상의 정보가 갱신되었을 때, 그것을 클라이언트 화면에 반영할 필요가 있다. 하지만 HTTP에서는 이러한 처리를 제대로 할 수가 없다.

HTTP에서는 서버의 정보가 변경되었는지 확인하기 위해서 클라이언트가 항상 서버측에 확인하러 가야한다. 서버상의 정보가 갱신되지 않은 경우 불필요한 통신이 발생하게 된다.

  • Ajax에 의한 해결방법 : Ajax는 웹 페이지의 일부분만 고쳐쓸 수 있는 비동기 통신 방법이다. 페이지의 일부분만 갱신되기 때문에 리스폰스로 전송되는 데이터 양이 줄어든다.
  • Comet에 의한 해결방법 : 서버 측의 콘텐츠 갱신이 있는 경우 클라이언트의 리퀘스트를 기다리지 않고 클라이언트에 보내기 위한 방법으로 리스폰스를 보류 상타로 해두고 갱신시 리스폰스를 반환한다. 단 리스폰스를 보류하기 위해 커낵션을 유지하는 시간이 길어진다.

위 방법을 통해 어느정도 개선은 되었으나 HTTP 프로토콜의 제약은 없앨 수 없었다. 근본적인 개선을 위해서는 프로토콜 레벨에서의 개선이 필요하다. SPDY는 HTTP가 안고 있던 병목 현상을 프로토콜 레벨에서 해소하기 위해 개발되고 있는 프로토콜이다.

SPDY 설계와 기능

SPDY는 TCP/IP의 애플리케이션 계층과 트랜스포트 계층 사이에 새로운 세션 계층을 추가하는 형태로 동작한다. 또 보안을 위해서 표준으로 SSL을 사용하도록 되어 있다. SPDY를 사용하면 다음과 같은 기능을 HTTP에 추가할 수 있다.

  • 다중화 스트림
  • 리퀘스트의 우선 순위 부여
  • HTTP 헤더 압축
  • 서버 푸시 기능
  • 서버 힌트 기능

SPDY를 사용하려면 웹 콘텐츠 측은 할게 없는데 웹 브라우저와 웹 서버는 SPDY에 대응하고 있어야 한다. SPDY는 기본적으로 한 개의 도메인과의 통신을 다중화할 뿐 웹 사이트에서 복수의 도메인으로 리소스를 사용하고 있는 경우에는 그 효과가 한정적이다. 또 SPDY는 HTTP의 병목현상을 해결하는 좋은 기술이지만 대부분 웹 사이트의 문제는 HTTP의 병목현상 때문만은 아니다.

9.3 브라우저에서 양방향 통신을 하는 WebSocket

WebSocket은 웹 브라우저와 웹 서버를 위한 양방향 통신 규격으로 Ajax, Comet에서 사용하는 XMLHttpRequest의 결점을 해결하기 위한 기술로서 개발이 진행되고 있다.

WebSocket은 한 번 접속을 확립하고 나면 그 뒤에 통신은 어느쪽에서도 할 수 있다. 주요 특징으로는 다음과 같은 것이 있다.

  • 서버 푸시 기능
  • 통신량의 삭감
  • 핸드쉐이크/리퀘스트
  • 핸스쉐이크/리스폰스
  • WebSocket API

9.4 등장이 기다려지는 HTTP/2.0

9.5 웹 서버 상의 파일을 관리하는 WebDAV

WebDAV는 웹 서버의 콘텐츠로 직접 파일 복사나 편집 작업 등을 할 수 있는 분산 파일 시스템이다.

HTTP/1.1을 확장한 WebDVA

  • 컬렉션 Collection : 여러 개의 리소스를 한꺼번에 관리하기 위한 개념
  • 자원 Resource : 파일이나 컬렉션
  • 프로퍼티 Property : 리소스의 프로퍼티를 정의 ‘이름=값’의 형식으로 이루어짐
  • 잠금 Lock : 파일을 편집할 수 없는 상태로 한다.

WebDAV에서 추가된 메소드와 상태코드

  • PROPFIND : 프로퍼티 취득
  • PROPPATCH : 프로퍼티 변경
  • MKCOL : 컬렉션 작성
  • COPY : 리소스 및 프로퍼티 복제
  • MOVE : 리소스 이동
  • LOCK : 리소스 잠금
  • UNLOCK : 리소스 잠금 해제

  • 102 Processing
  • 207 Multi-Status
  • 422 Locked
  • 424 Failed Dependency
  • 507 Insufficient Storage
This post is licensed under CC BY 4.0 by the author.

8장 누가 액세스하고 있는지를 확인하는 인증

10장 웹 콘텐츠에서 사용하는 기술