트랙백 문제

이 블로그는 계속 트랙백 문제가 있었다. 어떨 때는 트랙백이 가지 않는다. 또 이덕에 트랙백으로 동작하는 다음 블로거뉴스 플러그인도 동작하지 않았다. 결국 이 문제는 날 잡아 해결을 봤다. 그런데 또 블로거뉴스 플러그인이 동작하지 않았다. 이 문제는 블로거뉴스에서 API를 바꾸었기 때문에 발생한 현상으로 역시 직접 패치했다. 그런데 또 트랙백이 동작하지 않았다. 그런데 이번에는 소스를 분석해도 그 원인을 찾을 수 없었다.

트랙백 문제

이 블로그는 계속 트랙백 문제가 있었다. 어떨 때는 트랙백이 가지 않는다. 또 이덕에 트랙백으로 동작하는 다음 블로거뉴스 플러그인도 동작하지 않았다. 결국 이 문제는 날 잡아 해결을 봤다. 그런데 또 플러그인이 동작하지 않았다. 이 문제는 블로거뉴스에서 API를 바꾸었기 때문에 발생한 현상으로 역시 직접 패치했다. 그런데 또 트랙백이 동작하지 않았다. 그런데 이번에는 소스를 분석해도 그 원인을 찾을 수 없었다.

결국 트랙백을 마지막으로 보낸 날을 기준으로 이 문제가 '서비스관리/서버'에서 '외부 리소스 사용'을 체크했기 때문에 발생한 문제라는 것을 알았다. 그런데 또 트랙백이 동작하지 않았다. 다만 이번 트랙백은 모든 트랙백이 가지 않는 것이 아니라 티스토리로 보내는 트랙백만 동작하지 않았다. 이 문제는 텍스트큐브 포럼에도 올라왔고 최면님 역시 같은 문제를 호소했다.

결국 어제 문제의 원인을 파악해 봤다. 그런데 문제의 원인을 찾던 중 티스토리에서 조금 이상한 현상을 발견했다. 일단 telnet을 이용해서 트랙백을 보내면 트랙백은 정상적으로 전송된다. 그러나 telnet으로 직접 연결한 뒤 보내면 정상적으로 가는 트랙백이 PHP의 fsockopen 함수를 이용해서 보내면 항상 408 Request Timeout 오류가 발생하는 것이었다.

인터넷을 찾아 봤지만 이 오류에 대한 질문은 있어도 답은 없었다. 그러던 중 어제 저녁 갑자기 의 트랙백이 정상적으로 동작하는 것을 확인했다. 그래서 이 문제는 티스토리 서버의 문제로 봤다. 아울러 서버에서 이 문제가 고쳐진 것으로 생각했다. 그런데 오늘 다시 트랙백을 보내려고 하니 역시 트랙백이 보내지지 않았다. 그래서 어제 시도한 방법을 그대로 다시 시도해 봤다.

트랙백을 보낸 방법

그런데 한 가지 재미있는 것은 이 방식으로 하면 잠깐 동안은 트랙백이 간다는 점이다. 일단 어떤 방법으로 트랙백을 보냈는지 확인해 보자. 일단 블로그를 호스팅하고 있는 서버에 다음과 같은 트랙백 전용 프로그램을 만들었다.

<?
$socket = fsockopen('offree.com', 80, $errno, $errstr, 10);
$query=<<<___QUERY___
POST /trackback/473 HTTP/1.1
Host: offree.com
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 2129
Connection: Close

url=http%3A%2F%2Foffree.net%2F2263&title=%EC%A3%BD%EC%9C%BC%EB%A9%B4%20%EC%A0%9C%EB%B0%9C%20%EC%A7%80%EC%98%A5%EC%97%90%20%EA%B0%80%EA%B2%8C%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94&blog_name=%EB%8F%84%EC%95%84%EC%9D%98%20%EC%84%B8%EC%83%81%EC%82%AC%EB%8A%94%20%EC%9D%B4%EC%95%BC%EA%B8%B0&excerpt=%EB%82%B4%EA%B0%80%20%EA%B8%B0%EB%8F%85%EA%B5%90%EC%9D%B8%EB%93%A4%EC%97%90%EA%B2%8C%20%ED%95%AD%EC%83%81%20%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%95%BC%EA%B8%B0%EA%B0%80%20%EC%9E%88%EB%8B%A4.%20%EA%B8%B0%EB%8F%85%EA%B5%90%EC%9D%B8%EB%93%A4%EC%9D%B4%20%EA%B0%80%EB%8A%94%20%EA%B3%B3%EC%9D%B4%20%EC%B2%9C%EB%8B%B9%EC%9D%B4%EB%9D%BC%EB%A9%B4%20%EB%82%9C%20%EC%96%B8%EC%A0%9C%EB%82%98%20%EC%A7%80%EC%98%A5%EC%9D%84%20%ED%83%9D%ED%95%98%EA%B2%A0%EB%8B%A4.%20%EB%82%B4%EA%B2%8C%20%EC%B2%9C%EB%8B%B9%EC%9D%80%20%EA%B8%B0%EB%8F%85%EA%B5%90%EC%9D%B8%20%EC%97%86%EB%8A%94%20%EA%B3%B3%EC%9D%B4%EB%8B%A4.%20%EA%B8%B0%EB%8F%85%EA%B5%90%EC%9D%B8%EB%93%A4%EC%9D%B4%20%EB%AA%A8%EB%A5%B4%EB%8A%94%20%EA%B2%83%EC%9D%80%20%EC%83%81%EB%8B%B9%ED%9E%88%20%EB%A7%8E%EB%8B%A4.%20%EA%B7%B8%20%EC%A4%91%ED%95%98%EB%82%98%EA%B0%80%20%EB%B0%94%EB%A1%9C%20%EC%97%AD%EC%A7%80%EC%82%AC%EC%A7%80%EB%8B%A4.%20%EC%97%AD%EC%A7%80%EC%82%AC%EC%A7%80%EA%B0%80%20%EB%AC%B4%EC%8A%A8%20%EB%9C%BB%EC%9D%B8%EC%A7%80%20%EB%AA%A8%EB%A5%B4%EB%8A%94%20%EA%B8%B0%EB%8F%85%EA%B5%90%EC%9D%B8%EB%93%A4%EC%9D%B4%20%EB%A7%8E%EC%9D%80%20%EA%B2%83%20%EA%B0%99%EC%95%84%20%EB%B6%80%EC%97%B0%20%EC%84%A4%EB%AA%85%ED%95%98%EC%9E%90%EB%A9%B4%20%EC%97%AD%EC%A7%80%EC%82%AC%EC%A7%80%28%E6%98%93%E4%B9%8B%E6%80%9D%E4%B9%8B%29%EB%8A%94%20%EC%B2%98%EC%A7%80%EB%A5%BC%20%EB%B0%94%EA%BF%94%20%EC%83%9D%EA%B0%81%ED%95%98%EB%9D%BC%EB%8A%94%20%EB%9C%BB%EC%9D%B4%EB%8B%A4.%20%EC%9D%B4%EB%9E%98%EB%8F%84%20%EB%AA%A8%EB%A5%B4%EB%8A%94%20%EC%82%AC%EB%9E%8C%EC%9D%B4%20%EC%9E%88%EB%8B%A4%EB%A9%B4%20%EA%B9%80%EA%B1%B4%EB%AA%A8%EC%9D%98%20%EB%85%B8%EB%9E%98%2C%20%ED%95%91%EA%B3%84%EC%9D%98%20%EA%B0%80%EC%82%AC%20%EC%A4%91%20%22%EC%9E%85%EC%9E%A5%20%EB%B0%94%EA%BF%94%20%EC%83%9D%EA%B0%81%EC%9D%84%20%ED%95%B4%EB%B4%90%22%EB%A5%BC%20%EB%96%A0%EC%98%AC%EB%A6%AC%EB%A9%B4%20%EB%90%9C%EB%8B%A4.%20%EC%9A%94%EC%A6%98...
___QUERY___;

fwrite($socket, "$query\r\n");
$res=fread($socket, 10240);
fclose($socket);

echo $res;
?>

확인 절차

소스를 보면 알 수 있지만 fsockopen을 이용해서 offree.com에 소켓 연결한 뒤 HTTP 명세트랙백 명세에 따라 트랙백을 전송하고 그 결과를 화면에 뿌려 주는 간단한 프로그램이다.

  1. 이 프로그램을 웹에서 실행하면 다음 그림처럼 'HTTP/1.1 408 Request Timeout' 메시지가 출력된다.
  2. 프로그램 소스를 POST /trackback/473GET /trackback/473로 바꾼 뒤 다시 실행하면 그림처럼 'HTTP/1.1 302 Moved Temporarily'라는 메시지가 나타난다.
  3. 이 응답은 주소가 /trackback/473에서 /trackback/473?a97ceeb0로 바뀐 것을 말하므로 소스를 GET /trackback/473에서 GET /trackback/473?a97ceeb0로 바꾼 뒤 다시 실행하면 그림처럼 다시 'HTTP/1.1 302 Moved Temporarily'라는 메시지가 나타난다.
  4. 이 상태에서 소스를 GET /trackback/473?a97ceeb0에서 다시 원래의 상태인 POST /trackback/473로 바꾼 뒤 실행하면 다음 그림처럼 트랙백이 정상적으로 전송됐다는 응답 메시지가 나타난다.

일단 이런 단계를 거친 뒤 티스토리에 트랙백을 보내보면 한동안은 트랙백이 정상적으로 간다. 물론 일정 시간이 지나면 다시 트랙백을 보낼 수 없는 상태가 된다. 결국 티스토리에 트랙백을 보내는 것은 이 프로그램을 이용해서 티스토리에 트랙백이 정상적으로 가도록 바꾼 뒤 에서 트랙백을 보내고 있다.

처음에는 의 문제인가 싶어서 다른 무료 호스팅[1]에서 [2]로 트랙백을 보내봤지만 역시 트랙백은 전송되지 않았다. 따라서 카페24의 문제가 아니라 티스토리 서버의 문제로 보이지만 아직까지 이런 현상에 대한 명백한 이유는 알 수 없었다.

참고로 이 과정에서 "URL이 없다"는 메시지(오류 코드 5), "해당하는 글에는 트랙백을 보낼 수 없다"는 메시지(오류 코드 3)도 얻었다. 해당 글에는 트랙백을 보낼 수 없다는 메시지(오류 코드 3)은 같은 글에 같은 트랙백을 보낼 때 발생하는 것[3]으로 봐서 스팸 트랙백을 방지하는 기능으로 보인다.

관련 글타래


  1. Codex.kr이라는 무료 호스팅이다. 월 30G의 전송량을 제공하기 때문에 하루 전송량이 1G 미만인 사람에게는 상당히 유용한 무료호스팅이다. 또 월 전송량을 따지기 때문에 하루 전송량이 1G를 초과해도 사이트가 닫히는 문제는 발생하지 않는다. 마지막으로 제어판을 이용하면 상당히 여러 가지 웹 프로그램을 손쉽게 설치할 수 있는 잇점도 있다. 
  2. Codex.kr에는 도아의 게임이야기(https://gemul.net/)을 호스팅하고 있다. 
  3. 해당 글로 보낸 트랙백을 삭제한 뒤 휴지통까지 비우면 같은 URL의 트랙백을 보낼 수 있다.