Tag Archives: Comet

Comet

목적: Comet의 이해.

번역(翻訳): 방석구

뱀 앞다리:
Wikipedia의 Comet, WebSocket, 메세지 지향 미들웨어(Message-oriented middleware), 푸시 기법(Push technology) 그리고 이하 관련 문서 몇 개의 오역으로 WebSocket 개념을 개괄한 후 상세화 시키기.

 Comet은 Web 어플리케이션 구축에 사용되는 기술로써 이것에 의하여 서버에서 발생한 이벤트를 일정시간이 경과하여 요청이 없어진 클라이언트로 송신하는 것이 가능하다.

 Comet은 이와 같은 통신을 실현화하기 위한 복수(複数)의 방법을 집약한 개념이라 할 수 있다. 이 같은 방법은 브라우저에 plug-in을 추가하는 것이 아니라(JavaScript처럼), 기본 기능만으로 실현이 가능하다. 이론적으로 Comet은 브라우저가 데이터를 요청하는 기존의 웹 모델과는 다른 것으로, Comet 어플리케이션은 Ajax와 Long polling을 사용하여 서버상의 신규 데이터를 취득한다.

왜 필요한가?
 종래의 방법은 웹 페이지가 클라이언트의 요청이 발생한 경우에만 클라이언트로 결과를 전송할 수 있었다. 클라이언트의 요청이 있을 때마다 브라우저는 서버로의 HTTP 커넥션을 생성하고, 브라우저는 클라이언트에 데이터를 반환하며 그 커넥션은 유지되었다. 이러한 방법의 단점은 유저가 명시적으로 페이지를 refresh하거나, 새로운 페이지로 이동한 경우가 아니라면 갱신이 일어나지 않는 다는 것이다. 페이지의 모든 데이터를 전송하기 위해서는 일정시간이 소요되기 때문에 페이지의 refresh는 대단한 지연을 일으킨다.

 이러한 문제에 대한 대책으로 브라우저에서 변경이 일어난 부분만 요청 및 변경을 반영한 기술이 Ajax이다. 이러한 방법만으로 데이터 통신량이 종래보다 적어지기 때문에, 지연의 정도도 적어져 사이트 전체 performance는 향상된다. 거듭 말하면 비동기 통신을 사용함으로써 유저는 단계적으로 데이터를 수신하면서 작업 할 수 있기 때문에 이러한 의미에서도 성능은 나아진다 할 수 있다.

 그러나 Ajax를 도입해도 클라이언트가 어떤 데이터를 취득하기 전까지는 그것에 대한 응답을 할 수 없는 고질적 문제는 해결되지 않는다. 이러한 문제는 예컨대 “어느 사용자가 데이터를 어느 때나 송신 할 수 있다.” 라는 가정처럼 서버상에서 이벤트가 발생할 것을 대기할 필요가 있는 어플리케이션을 설계할 때에는 커다란 장애가 된다.

 서버상에서 이벤트가 발생할 경우 이것을 실시간으로 확인하는 어플리케이션을 설계하는 것도 하나의 해결책이다. 그러나 이 같은 방법은 결국 어플리케이션이 서버상의 이벤트가 완료 되었는가를 확인하는데 많은 시간을 소비하기 때문에 그다지 미려하다 할 수 없다. 또한 네트워크의 대역도 많이 소비된다.

실현 방법
 일반적으로 Web 서버는 클라이언트로부터 요청(request)을 받아 곧바로 응답(response)을 반환한다.

 Comet을 사용한 Web 어플리케이션은 서버가 클라이언트에서 발생한 요청에 즉시 응답하지 않고 그 상태를 보류 돌린 후, 서버상에서 어느 정도의 이벤트(채팅에서 누군가가 얘기를 하는 것처럼)가 발생한 경우에만 응답을 한다. 이러한 방법으로 서버에서 발생한 이벤트를 즉시 클라이언트에 송신할 수 있다.

원문 출처
Comet