텍스트큐브와 트랙백

텍스트큐브는 트랙백을 보내는 것이 상당히 어렵다. 정확이 이야기 하면 트랙백을 보내는 것이 어렵다기 보다는 트랙백을 여러 개 받으면 트랙백을 받은 글을 찾아 가는 것이 어렵다. 스킨에서 받은 트랙백을 5개로 설정하고 5개 이하의 트랙백을 받았다면 사이드바의 최근 트랙백을 통해 찾아가면 된다. 그런데 이 이상 받은 트랙백은 관리도구에서 확인은 가능하지만 트랙백을 받은 글을 찾아갈 수 있는 방법이 없다. 따라서 받은 트랙백을 텍스트큐브 관리 도구가 아니라 구글 리더를 이용해서 관리한다. 그 이유는 이렇게 하는 것이 트랙백을 받은 글을 찾기 쉽기 때문이다.

는 트랙백을 보내는 것이 상당히 어렵다. 정확이 이야기 하면 트랙백을 보내는 것이 어렵다기 보다는 트랙백을 여러 개 받으면 트랙백을 받은 글을 찾아 가는 것이 어렵다. 스킨에서 받은 트랙백을 5개로 설정하고 5개 이하의 트랙백을 받았다면 사이드바의 최근 트랙백을 통해 찾아가면 된다. 그런데 이 이상 받은 트랙백은 관리도구에서 확인은 가능하지만 트랙백을 받은 글을 찾아갈 수 있는 방법이 없다. 따라서 받은 트랙백을 텍스트큐브 관리 도구가 아니라 구글 리더를 이용해서 관리한다. 그 이유는 이렇게 하는 것이 트랙백을 받은 글을 찾기 쉽기 때문이다.

그런데 얼마 전 텍스트큐브가 1.7.6으로 판올림 됐다. 가장 반가운 기능은 역시 관리도구에서 트랙백을 바로 보낼 수 있는 기능이었다. 그런데 막상 관리도구에서 트랙백을 바로 보내려고 하자 다음처럼 "글을 걸지 못했습니다"라는 오류 메시지가 나타났다. 시절에는 버그가 있으면 손보는 것이 상당히 쉬웠다. 그러나 텍스트큐브로 올라가면서 각종 플러그인을 지원하고 개체기반으로 바뀐 뒤로는 텍스트큐브의 구조를 알고 있지 않으면 버그를 잡는다는 것이 쉽지 않다.

그래서 텍스트큐브 1.5판부터 트랙백 문제가 있었지만 버그를 잡지 못하고 그냥 사용해 왔다. '1.7.6'도 비슷하다. 마음에 드는 기능은 많지만 버그도 많았다. 몇몇 버그는 이미 패치가 된 상태이지만 아직도 곳곳에 버그가 눈에 띈다. 가장 마음에 들지 않는 버그는 트랙백을 바로 보내는 기능. 이 기능 때문에 판올림을 한 것인데 가장 중요한 기능이 정상적으로 동작하지 않아 이번에 원인을 파악했다. 기본적으로 텍스트큐브는 AJAX를 기반으로 동작하기 때문에 패킷 스니퍼링 프로그램으로 날라가는 패킷을 분석해서 버그를 잡았다. 텍스트큐브의 구조를 모르고 요즘 텍스트큐브는 너무 복잡하기 때문에 이 방법외에 다른 방법은 힘들었다.

일단 확인해본 결과 blog.trackback.php 파일에 버그가 있었다. 또 맞트랙백을 보내는 기능은 트랙백을 보낸 시스템에서 텍스트큐브에서 지원하는 형식의 RDF를 지원해야 가능했다. 따라서 티스토리에서 보낸 트랙백은 관리도구에서 바로 트랙백을 보낼 수 없다. 따라서 관리도구의 트랙백을 바로 보내는 기능 역시 트랙백을 바로 보낼 수 있는 경우에만 전송 단추가 나타나도록 개선되야 할 것 같았다(쉽지는 않은 기능 같다). 말이 조금 길어졌다. 텍스트큐브의 관리도구에서 트랙백을 바로 보내기 위해서는 blog.trackback.php 파일을 다음처럼 패치해야 한다.

  1. 좋아하는 편집기(예: EditPlus)로 library/model/blog.trackback.php 파일을 연다.
  2. function getRDFfromURL을 찾아 requireComponent를 다음처럼 바꾼다.

    변경전
    requireComponent('NeedleWorks.PHP.HTTPRequest');
    
    변경후
    requireComponent('Eolin.PHP.HTTPRequest');
    

    확인해 보면 알 수 있지만 배포본에는 NeedleWorks.PHP.HTTPRequest.php가 없고 Eolin.PHP.HTTPRequest.php만 있다. 따라서 1.8에서 1.7.6으로 내리면서 잘못 배포된 것이 아닌가 싶다.

  3. 다음처럼 if (class_exists('DOMDocument')) { ... } else { 를 주석처리한다. else 다음 블럭은 살려 둬야 하기 때문에 꼭 else { */처럼 주석 처리해야 한다.

    /*  if (class_exists('DOMDocument')) {
            $doc = DOMDocument::loadXML($match[0]);
            if (!$doc) {
                return false;
            }
            $desc = $doc->getElementsByTagNameNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'Description');
            $desc = $desc->item(0);
            if ($desc === null) {
                return false;
            }
            return array(
                'title' => $desc->getAttributeNS('http://purl.org/dc/elements/1.1/', 'title'),
                'url' => $desc->getAttributeNS('http://purl.org/dc/elements/1.1/', 'identifier'),
                'trackbackURL' => $desc->getAttributeNS('http://madskills.com/public/xml/rss/module/trackback/', 'ping')
            );
        } else {*/
    
  4. 함수 끝의 return 문 바로 아래의 괄호를 다음처럼 주석처리한다.

    return (isset($result['trackbackURL'])) ? $result : false;
    ////    }
    

직접 패치하는 것이 귀찮은 사람은 다음 파일을 내려받아 library/model 폴더에 올리면 된다.

이외에 사용하는 도중 발견된 버그가 꽤 많다. 일단 위지윅편집기의 기본 편집 모드가 HTML로 설정해도 자동으로 위지윅으로 바뀐다는 것은 이전 글에서 설명했다. 그런데 더 재미있는 것은 이렇게 위지윅모드에서 글을 입력하면 입력한 글이 모두 사라진다. 또 임시글의 유령글이 종종 발견된다. 이 것은 1.7.6의 버그인지 아니면 데이터 교정을 했기 때문에 발생한 일인지 분명하지는 않다. 이것외에도 또 있는데 지금 기억나는 것(불편한 것)은 이 두가지이다.




텍스트큐브의 유령글들

처음에는 무슨 일인가 싶었다. 아울러 원본을 삭제한 덕에 유령으로 복구한 글도 있다. 날짜를 보면 임시글 때문에 생긴 현상인 것 같은데 정확한 원인은 알 수 없었다.

관련 글타래