개발관련 도서/Http&Network Basic

제9장. HTTP에 기능을 추가한 프로토콜/ 제10장 웹 콘텐츠에서 사용하는 기술

prden 2021. 7. 19. 09:04

1. HTTP의 병목 현상 관련

HTTP에서는 서버의 정보가 갱신되었는지 확인하기 위해 클라이언트가 항상 서버 측에 확인하러 가야 한다. 만약, 서버 상의 정보가 갱신되지 않은 경우에는 불필요한 통신이 발생하게 된다. 리퀘스트는 클라이언트에서만 시작할 수 있고 리스폰스만 받는 것은 불가능하기 때문이다. (서버에서 통신을 개시하는 서버 푸시 기능은 예외)

 

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

WebSocket프로토콜이란 웹 서버와 클라이언트가 한번 접속을 확립하면 그 뒤의 통신을 모두 전용 프로토콜로 하는 방식으로 JSON이나 XML, HTML, 이미지 등 임의 형식의 데이터를 보내게 된다. HTTP에 의한 접속의 출발점이 클라이언트에 있다는 것은 변함이 없지만 한 번 접속을 확립하면 WebSocket을 사용하여 서버와 클라이언트 어느 쪽에서도 송신을 할 수 있게 된다. 

 

1) WebSocket의 주요 특징

a. 서버 푸시 기능

서버는 클라이언트의 리퀘스트를 기다리지 않고 데이터를 보낼 수 있다 

 

b. 통신량의 삭감

WebSocket은 접속을 한번 확립하면 접속을 유지하려고 한다. HTTP에 비해 자주 접속을 하는 오버헤드가 적어지고, 또 헤더의 사이즈도 작기 때문에 통신량을 줄일 수 있다. WebSocket으로 통신을 하려면 한 번 HTTP에 접속을 확립하고, WebSocket에 의해 통신을 하기 위해서 핸드 셰이크 절차를 밟을 필요가 있다. 

 

c. 핸드 셰이크/ 리퀘스트

WebSocket으로 통신을 하려면 HTTP의 Upgrade 헤더 필드를 사용해서 프로토콜을 변경하는 것으로 핸드 셰이크를 실시한다. 

 

d. 핸드 셰이크/리스폰스

Sec-WebSocket-Accept는 Sec-WebSocket-Key값에서 생산된 값이 저장된다. 핸드 셰이크에 의해 WebSocket 커넥션이 확립된 후에 HTTP가 아닌 WebSocket 독자적인 데이터 프레임을 이용해 통신을 한다. 

 

e. WebSocket API

즉 핸드 셰이크 리퀘스트, 리스폰스를 통해 HTTP에서 WebSocket이라는 별도의 프로토콜로 변경하고 WebSocket은 양방향 통신이 가능하기 때문에 서버에서 리퀘스트를 기다리지 않고 데이터 송신이 가능하다. 

 

3. HTTP 2.0

HTTP 2.0은 사용자가 웹을 이용할 때 체감 속도의 개선을 목표로 하고 있다. HTTP1.1 경유로 TCP를 사용하는 것이 기본으로 되어있기 때문에 다음의 프로토콜이 베이스가 되어 사양이 검토되고 있다. 

- SPDY

- HTTP Speed+Mobility

- Network-Friendly HTTP Upgrade

HTTP Speed + Mobility는 마이크로소프트 사가 제안하고 있는 모바일 통신에서 통신속도와 효율성을 개선하기 위한 규격이다. 

Network-Friendly HTTP Upgrade는 주로 모바일 통신에서 HTTP의 효율 개선을 위한 규격이다. 

 

 

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

WebDAV(Web-based Distributed Authoring and Versioning)는 웹 서버의 콘텐츠에 대해서 직접 파일 복사나 편집 작업 등을 할 수 있는 분산 파일 시스템으로 HTTP1.1을 확장한 프로토콜이다. 

 

5. 데이터 송신에 이용되는 포맷이나 언어

1) 범용적으로 사용할 수 있는 마크업 언어 XML

인터넷을 통해 데이터 공유를 용이하게 하는 것을 목적으로 하며, HTML과 같은 문서 기술 언어에서 파생된 것이지만 HTML에 비해 데이터를 기술하는 것에 특화되어있다. 

 

2) 갱신 정보를 송신하는 RSS/Atom

RSS와 Atom은 뉴스나 블로그의 기사 등의 갱신 정보를 송신하기 위한 문서 포맷의 총칭으로 둘 다 XML을 이용하고 있다. 

 

3) JSON

JSON은 경량데이터 기술 언어로 JavaScript에 있어서 오브젝트 표기법을 바탕으로 한다. 다룰 수 있는 데이터는 false/true, null, 오브젝트, 배열, 수치, 문자열 등이다.