Blendy - 블로그 엔트리 배포 플러그인
블로그(BLOG)를 글의 쓰임새/의미적으로 생각해 볼 때 크게 두가지로 나눠 볼 수 있는데, 그 하나는 널리 전파(Broadcasting)하고자 하는 글이고, 다른 하나는 그런 의도없이 순수하게 개인의 일상이나 사건 등의 기록(LOGging)을 목적으로 하는 글이라 봅니다. 이 순수 로깅 목적의 글인 경우에, 누가 보든 말든 별 상관하지 않고, 단지 자신이 좀 더 편리하게 그 개인적인 기록일지에 접근하기 위해 블로깅하는 차원입니다. 그러한 개인적 기록을 열린 공간인 웹에 저장하는 주된 이유는, 제3자와의 정보 공유차원이 아니라(이는 종된 혹은 결과적인 이유), 바로 "자신"이 오프라인의 공간에 구속되지 않고, 어디서든 그 기록을 쉽게 참조해 보기 위함일 뿐인 것입니다.
그럼 Broadcasting을 목적으로 하는 글들을 블로거는 어떤 수단을 통해 그 목적을 달성할까요?
만약 자신의 특정 엔트리가 사회적, 정치적, 문화예술적, 기술적 등의 사안에 관한 공유할만한 주제를 다루고 있는 경우에 기본적으로 가능하면 많은 이들이 그 정보에 접할 기회만이라도 가질 수 있게 되길 바라는건 인지상정입니다. 이런 경우에 단지 인터넷이라는 열린 공간에 올렸다는 이유만으로 그 목적을 달성할 수 있을까요?
그건 하나의 가능성일 뿐, 실제 우리는 인터넷이라는 방대한 공간에서 한명의 블로거, 하나의 엔트리가 소외받는, 즉 선택의 기회조차 가지지 못하고 제3자의 시각에서 벗어나는 경험을 일상적으로 하게 마련입니다. 특히나 야심찬(?) 의도, 기발한 아이디어와 많은 시간,노력을 통해 작성한 엔트리가 그냥 일상적인 기록글과 아무런 구별방법 없이 같은 잣대로, 메타사이트나 검색사이트에 순간 나타났다 사라지는 일을 한 두번쯤 경험해보셨을테고, 그런 것에 대한 글쓴이의 안타까움은 논외로 하더라도, 그런 정보에 대한 잠재적 수요자일 수 있는 여타 블러거들에게도 기회상실이라는 측면의 아쉬움을 가져다 주게 마련입니다.
이런 문제의 해소측면에서 블로그 시스템은, 몇가지 소통의 도구를 제공합니다. 바로 앞서 예로 든, 블로그 메타 사이트의 존재와, 블로그 커뮤니티내에서의 인기글/최근글/랜덤블로그 등의 시스템을 통한 블로그 외적인 방법과, 블로그 내에서는 각종 피드 파일을 제공하는 것과 트랙백 핑 등의 방법에 의해 글의 존재를 제3자도 쉽게 알 수 있도록 도와주는 기능들이 그것입니다.
이 플러그인이 처음 개발되었을 때는, 이러한 측면에 타겟을 두고 시작했습니다. 기존에 한국적 상황에서 "싱크블로그"라는 의미가 그것이었습니다. 하나의 메인(주로 설치형 블로그) 블로그에 글을 적고, 그 글의 내용이 Broadcasting을 요해 가능하면 많은 이에게 접근기회를 제공하고 싶을 경우, "싱크"라는 방법을 통해 여타 다른 자신의 블로그(주로 가입형 블로그)로 해당 엔트리를 포스팅해서, 그 각각의 블로그 커뮤니티에서 제공하는 최신/인기 글 등에 한번이라도 노출시킬 기회를 가지게 하고자 하는 방법입니다. 물론 그 블로그 커뮤니티 내에서 랜덤이나 이웃 등의 방법을 통해 그 블로그를 접한 블로거가 메인 블로그로 다시 유입되는 가외 효과도 노리는 것입니다.
어쨋든 이런 소위 "싱크블로그"라는 타겟에 맞춰 개발했지만, 그 완성 단계에 와서 이름이나 개념을 조금 수정하게 되었습니다. 즉 기본 개념을 싱크(실제로는 원래 의미의 싱크는 아닌거죠. 싱크, 즉 동기라는 의미에서는 한쪽의 엔트리를 수정하면 다른 쪽도 반영이 되는 개념까지 포함해야 하지만, 이까지는 보통 구현하지 않기에)라는 것에만 맞춰 한정시킬 필요가 없다고 느꼈기 때문입니다. Pronet(엠티 관련 프로그래머들 위주의 메일링 네트워크)을 통해, 다른 방향으로의 사용가능성도 확인했기때문에, 좀더 일반적인 의미의 배포/분배의 의미로 Distributor라고 이름하였습니다.
그 다른 적용 가능성 중의 하나는(물론 한국적 상황에서 개인블로거에게 흔한 케이스는 아니지만), 하나의 주된 MT 블로그상에서 엔트리를 영어로 작성하고, 이를 같은 서버 내 혹은 원격 서버상에 있는 다른 MT 블로그 상에 있는 전문 번역 블로거에게 원문 엔트리를 그대로 전송하면, 그 전송된 글을 바탕으로 직접 복사/붙이기 등의 번거로운 과정없이 바로 번역해서, 같은 내용의 다른 번역본 사이트를 운영하는 경우에도 적용이 가능합니다. 물론 이런 경우 다른 해결책이 MultiBlog 등 여러가지가 제시될 수 있지만, 가장 타당한 해결책은 이런 방법입니다.
또 다른 경우는, 이 Blendy 플러그인은 일종의 엔트리 Proxy 역할을 하는데, 즉 엔트리의 거의 모든 데이터(작성날짜, 본문,제목,인코딩 종류, 타임존, 글 상태 등등) 를 내보내주기 때문에, 예를 들어 평문의 TEXT데이터를 입력받아 이를 PDF등으로 변경해주는 툴이 있다면, 바로 이 툴로 데이터를 보내서, 엔트리 하나 혹은 수개를 한번에 PDF로 만들고자 하는 경우에도 중간자 역할을 쉽게 해줄 수 있습니다.
이 Blendy 플러그인은 하나의 엔트리 혹은 다수의 엔트리를 MT 3.2에서 도입된 액션 명령을 통해 BlendyCGI 라고 하는 개별 CGI로 전송만 해주는 역할입니다. 즉 실제 받은 데이터를 어떻게 처리할 것인가 하는 것은 사용자에게 일임되는 형식입니다. 물론 기본적으로 사용가능한 몇 종류의 BlendyCGI 는 포함되어 있습니다.
Requirement
Blendy 플러그인 자체는 별도의 펄 모듈을 요하지 않습니다만, 몇몇 BlendyCGI 는 HTML::HeadParser 나 Net::MovableType 같은 펄 모듈을 사용합니다.
Installation
압축파일을 다운받아 (mt home) 폴더 바로 밑에서 $ tar xvfz Blendy.tar.gz 식의 명령으로 풀어 주면, 아래와 같은 폴더 구조 밑에 파일들이 자동 생성됩니다. 만약 telnet 등과 같은 터미널 환경을 사용할 수 없는 경우라면 ftp로 아래 폴더 구조대로 개개의 파일들을 업로드하면 됩니다.
- (mt home)/plugins/alogblog/Blendy.pl
- (mt home)/plugins/alogblog/tmpl/blendy.tmpl
- (mt home)/plugins/alogblog/images/blendy.gif
- (mt home)/plugins/alogblog/BlendyCGI/movabletype-XMLRPC.cgi
- (mt home)/plugins/alogblog/BlendyCGI/movabletype-HTTP.cgi
- (mt home)/plugins/alogblog/BlendyCGI/livejournal.cgi
- (mt home)/plugins/alogblog/BlendyCGI/blogspot.cgi
Configuration
각 블로그의 플러그인 목록 페이지에서 세가지 옵션을 설정할 수 있습니다.
- CGI extensions : BlendyCGI 폴더 밑에 존재하는 파일 중에, 여기서 정한 파일 확장자를 가진 파일들만 Blendy를 위한 CGI로 인식합니다. 디폴트는 'cgi pl php asp' 입니다.
- CGI Base URL : 설치시 자동 생성되는 디폴트 BlendyCGI 폴더의 위치를 다른 곳으로 옮겼다면, 여기서 그 결과 URL을 수정해주면 됩니다.
- CGI Base Path : BlendyCGI 폴더에 대한 파일 시스템상의 절대 경로입니다.
Work-flow
Fig. 1: 전체 흐름도

Fig. 2 : 먼저 배포할(즉 BlendyCGI로 데이터를 보낼) 엔트리 하나 혹은 다수개를 엔트리 목록(Entries) 페이지상에서 선택합니다. 그런 후에 오른쪽 위쪽의 액션 메뉴에서 "Blendy Entries"를 실행(Go)합니다. 이 액션실행은 엔트리 목록에서뿐만 아니라, 엔트리 작성화면에서도 할 수 있습니다.

Fig. 3: 그러면 다음 페이지가 나타납니다. 여기서 엔트리를 전송할 블로그의 비밀번호를 입력합니다. 이때 모든 블로그에 대해 기본적으로 비밀번호가 같다고 가정합니다.(각각이 다른 경우는 아래의 Note를 보십시요) 그리고 실제 전송할 블로그만 선택한 후에 "Blendy Entries"버튼을 클릭합니다.

Fig. 4: 그러면 이 Blendy플러그인은 배포를 선택한 블로그 각각에 해당하는 BlendyCGI로 엔트리 데이터를 보냅니다. 그럼 받은 CGI가 그 데이터를 해당 블로그로 보내 엔트리를 포스팅하게 됩니다. 아래 그림은 선택한 두개의 엔트리에 대한 전송 결과 창입니다.

BlendyCGI
Blendy CGI 스크립트 자체는 Blendy 플러그인의 일부는 아닙니다. 플러그인은 선택된 엔트리(들)의 거의 모든 데이터를 이 BlendyCGI(이 Blendy를 위해 특별히 제작된 CGI)에게 보내는 것으로 역할이 끝입니다. 그럼 이 CGI가 각각의 목적에 맞게 특정한 외부 블러그나 다른 MT블로그에게 그 엔트리 데이터를 포스팅할 수 있게끔 처리해서 보낸는 것입니다.
이 BlendyCGI는 엔트리의 거의 모든 데이터(제목, 본문, 확장문, 요약문, 키워드, 카테고리 정보, 타임스탬프, 코멘트/핑 상태, 인코딩, 타임존, 퍼머링크, 필터링된 본문/확장문 등)을 보냅니다. 이렇게 많은 정보를 보내는 이유는, 이 플러그인이 범용으로서 꼭 다른 블로그에 포스팅할 목적만으로 한정된게 아니므로, 가능하면 필요한 많은 데이터를 일단 전송하는 것입니다. 그 받은 엔트리 데이터 중 어떤 것을 이용할 것인가하는 것은 전적으로 BlendyCGI에게 일임됩니다.
그럼 그 받은 엔트리 데이터를 이용해서, BlendyCGI는 가령, 타입패드나 기타 다른 가입형 블로그로 포스팅할 수도 있고, 전체 블로그엔트리가 아니라 선택한 몇몇의 엔트리에 대해서만 내보내기(export)를 할 수도 있으며, 받은 내용을 PDF로 변환하거나 혹은 다른 특수한 템플릿을 이용해 별개의 정적 HTML파일로 퍼블리싱을 할 수도 있을 것입니다. 이 모든 것이 BlendyCGI를 각각에 맞게 제공함으로서 가능합니다.(현재로는 다른 블로그로 전송하는 CGI만 제공합니다)
이 압축파일내에는 기본적으로 2 GGIs(Blogger.com, Livejournal.com용)와 무버블 타입 블로그에 엔트리를 전송할 수 있는 movabletype-HTTP.cgi 과 movabletype-XMLRPC.cgi 이 포함되어 있습니다. movabletype-XMLRPC.cgi 은 Net::MovableType Perl 모듈을 이용하는데, 이는 내부적으로 XMLRPC를 이용해 엔트리를 전송하는 방식입니다. 만약 서버내에 Net::MovableType 모듈이 설치되어 있다면, 이를 이용해서 같은 서버내의 다른 블로그 혹은 원격 서버내의 다른 엠티 블로그로 엔트리를 포스팅할 수 있습니다. 이 외에 같은 역할을 하는movabletype-HTTP.cgi도 포함시켰는데, 이놈은 HTTP 프로토콜만 이용해서 전송합니다. 전자와의 차이점은 카테고리 명등이 한글일 경우에 엠티가 제공하는 XMLRPCServer가 제대로 처리하지 못하기때문에, 그냥 일반적인 방식의 HTTP방식도 넣은것입니다. 이걸 이용할 때에는 한글 카테고리 명도 문제없이 생성됩니다.
현재는 영어버전부터 만드는 바람에 예제 BlendyCGI가 무버블타입용 2개랑 Blogger.com, Livejournal.com 용만 포함되어 있는데, 이미 한국에 존재하는 대부분ㅇ2-30개 이상)의 가입형 블로그에 대한 CGI를 일단 작동이 가능한 선에서 만들어 놓긴 했습니다. 아직 MT 3.2용에 맞게 손보고 하지 못해서 배포하진 못합니다만, 조만간 시간이 좀 나면 하나씩 공개해 나갈 것입니다.
이 BlendyCGI 를 직접 만드는 경우에는 하나 딱 지켜야 할 룰이 있습니다. 다름 아니라, 원하던 작업을 성공했을 경우에 최종적으로 "success" 라는 문자열을 print해줘야 합니다. Perl 상에서 간단히 표현하자면 print "Content-type: text/html\n\nsuccess"; 이런 식으로 말입니다. 왜냐면, Blendy 플러그인은 해당 엔트리에 대해 성공한 CGI를 기록하게 됩니다. 그래야만 같은 엔트리에 대해 실수로 반복해서 같은 글을 전송하는 일을 방지하기 위해서입니다.
예제 BlendyCGI를 이용하고 싶으면 해당 파일을 열고, 그 안에 적힌 주석에 맞춰 자신의 서버 환경에 맞게 간단한 사항을 수정해야 합니다.
Test
아마 글만 봐서는 무슨 소린지 잘 감이 안잡힐 수도 있고, 머 엄청 어려운거 같이 느낄 수도 있으나 실상은 엄청 간단합니다. 그래서 전체적인 흐름을 이해할 수 있게 가이드라인을 따라 한번 테스트해 보도록 하겠습니다.
- 플러그인을 설치합니다.
- 먼저 엠티 상에서 간단히 새로운 블로그를 엠티 메뉴상에서 하나 생성합니다.
- 무버블 타입 블로그로 엔트리를 전송하는 예를 테스트하는 거니까, 설치한 BlendyCGI/ 폴더밑의 movabletype-HTTP.cgi를 열고 주석에 따라 몇가지 경로등의 사항을, 이번에 새로 만든 블로그에 맞게 고쳐줍니다. CGI니까 실행권한이 파일에 있는지도 한번 검토합니다.
- 이제 준비가 모두 끝났으니, 엔트리를 Blendy해 봅니다. 예전 블로그에서 임의의 글을 엔트리 목록에서 한 두개 정도 선택한 후에, 액션메뉴의 Blendy Entries를 실행(Go)합니다.
- 그러면, 비밀번호를 적는 페이지가 나옵니다. 여기서 해당 블로그의 저자(Author)의 비밀번호를 입력하고, 실제 보낼 곳의 CGI 부분(movabletype-HTTP.cgi)만 체크한후 Blendy Entries버튼을 클릭합니다.
- 잠시후 팝업창이 뜨면서 각각의 선택한 엔트리를 전송하는 모습이 보이고 끝엔, 결과가 보여집니다. OK라고 나타나면, 새롭게 만들어진 블로그를 브라우져로 열어봅니다. 아무 문제가 없다면, 예전 블로그 상에서 선택한 엔트리가 새로운 블로그에 나타남을 볼 수 있습니다.
Notes
1.
다수의 블로그가 다른 비밀번호를 가지는 경우에, 위처럼 하나의 비밀번호를 공유해서 사용하는 경우 바로 적용할 수 없는데 이럴땐, 하나의 비밀번호를 마스터키처럼 사용하면 됩니다. 즉, 마스터 비밀번호로 123456이라고 예로 정한 후에, 각각의 CGI내에서 실제 해당 블로그의 비밀번호를 하드코딩시켜주는 것입니다. 그리고 만약 CGI로 전송된 비밀번호(마스터키)가 123456이랑 같다면, 실제 하드코딩된 비밀번호로 대입시키는 방식으로 해결하면 됩니다. 코드로는,
if($q->param('pswd') eq '123456') { $pswd = '해당 블로그의 실제 비밀번호'; } else { die; }
License
Released under the Creative Commons License.
Version History
- 3.2.01: for MT 3.2
- 1.0: for MT 3.17, in the name of SyncBlog
Post a comment