Archive for the ‘ Tip&Tech ’ Category

개똥이도 하는 Comet

이 글은 개똥이도 하는 Comet 시리즈의 전체 1개 중 1번째 글입니다.

얼마 전에 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

IE6 + XHR + gzip + “no-cache” 버그

XE 개발 도중 발견한 IE6의 버그입니다.

모든 IE6에서 발생하는 것은 아니지만, 일부에서는 분명 발생하고 있습니다. 관련한 버그 리포팅을 받고, 테스트용으로 똑같은 IETester를 WindowsXP SP3와 Windows7에 각각 설치했었는데, XP에서는 발생하지 않았고 Windows7에서는 발생했습니다. 해외에서도 비슷한 사례가 보고된 바 있습니다. 단, 해외와는 달리 frame을 포함하지 않아도 발생한다는 것이 저희가 발견한 사례입니다.

버그 발생 조건은 이렇습니다.

  1. IE6 사용
  2. XHR로 컨텐트 요청
  3. 서버에서 gzip 압축으로 컨텐트를 전송하며, Cache-Control 헤더에 no-cache, no-restore 등의 값을 설정했을 때

혹시나 싶어 gzip 압축 전송 옵션을 사용하지 않았더니 아무런 문제없이 정상동작하는 것을 확인했습니다.

해결책을 여러 가지 방법으로 찾아보았으나 결국 ‘IE6의 버그’라는 말만 있을 뿐 마땅한 대안은 없는 듯 합니다. 안 그래도 느린 IE6인데, 성능을 높이기 위한 gzip 전송마저 못하게 한다면 더 느려질 수 밖에 없습니다.

IE6를 업그레이드 해야할 이유가 하나 더 늘었습니다.

[PHP] HTML 엔티티로 표현된 문자열 변환

간혹 다음과 같이 HTML 엔티티 형태로 표현된 문자열을 만날 때가 있습니다.

파이어폭스

이를 PHP에서 일반적인 형태의 문자열로 바꿔주려면 다음과 같은 코드를 사용하면 됩니다.

$str = '파이어폭스';
echo preg_replace_callback('/&#[0-9]+;/', 'unichar', $str);
function unichar($match) {
    return mb_convert_encoding($match[0], 'UTF-8', 'HTML-ENTITIES');
}
Page 1 of 3312345102030...Last »