개똥이도 하는 Comet
얼마 전에 Comet 기술을 사용해서 채팅방을 하나 만들었습니다. 원래는 NodeJS 라는 새로운 자바스크립트 인터프리터에 대해 소개하기 위한 예제로 작성했는데, 오히려 Comet에 대해서 관심을 보이는 분들이 많았습니다. 자바스크립트만으로도 빠르게 실시간으로 반응하는 채팅방이 가능하다는 사실에 놀라워하더군요. 그 분들께 Comet 이라고 말씀드리면 이름 자체를 처음 들어보거나 들어보기는 했지만 잘 모르는 분들이 대부분이었습니다. 그게 바로 이 연재를 시작한 이유입니다.
이 연재를 통해 Comet에 대해 알아보고, 간단하게 채팅 서버와 스크립트를 만들어 보겠습니다. 그 후, HTML5에 새롭게 추가된 WebSocket에 대해 배워보고 Comet으로 작성한 채팅 서비스를 WebSocket을 사용하도록 변환해 볼 생각입니다. 여기까지 하면 Comet이나 WebSocket에 대해서 충분히 이해하게 되지 않을까 싶습니다.
우선 이 글에서는 Comet의 개념에 대해 설명해볼까 합니다.
웹의 한계
필요는 발명의 어머니입니다. Comet 기술은 웹이 가지는 한계가 사람들의 욕구를 충족시키지 못했기 때문입니다. 바로 실시간(real-time)에 대한 욕구죠. HTTP는 원래 프로토콜 특성상 실시간을 위해 필수적인 지속되는 연결(persistent connection)을 가질 수 없습니다. 클라이언트에서 서버에 접속하면 서버가 응답하고 연결이 끊어집니다. 우리가 웹을 사용할 때는 이 동작을 수없이 반복할 뿐입니다. 효율을 위해서 선택한 방식이기는 했지만, 이것이 웹이 가지는 한계가 되기도 했습니다. HTTP가 만들어지던 당시에는 그래도 충분했었습니다. 웹의 목적은 정보의 저장과 전달이었을 뿐, 실시간일 필요는 없었기 때문입니다. 웹이 생활과 밀접하게 되면서 사람들이 더 많은 것을 바라기 전까지는 그걸로도 충분했으나 이제는 상황이 바뀌었습니다.
이쯤에서 누군가는 몇 년전쯤에 크게 주목받은 Ajax를 떠올릴 것입니다. 어쩌면 이렇게 생각할지도 모르겠습니다.
“네이버의 실시간 급상승 검색어를 보면 실시간으로 데이터를 가져오던데?”
안타깝지만 현재 웹에서 운용되는 실시간 서비스들은 대부분 실시간이 아닙니다. 대부분의 실시간 서비스들이 그렇듯 네이버의 실시간 급상승 검색어의 경우도 바로바로 데이터를 갱신하는 것이 아니라 일정한 간격을 두고 데이터를 다시 불러들이는 형태입니다. 페이지 전체를 리프레시하거나 이동해야만 변경된 데이터를 볼 수 있었던 예전에 비하면야 실시간에 가깝지만, 그렇다고 실시간이라고 부를 수 있는 것은 아닙니다. 10초 단위 혹은 30초 단위 실시간이라고 말할 수는 있을지 몰라도 실시간이라고 부르기에는 부족합니다. 사실, x초 단위 실시간이 모순적인 단어이긴 합니다.
Read more
