소식상자의 또 다른 이름은 비둘기Z

capcold 님이 갑자기 소식상자의 소스를 공개하지 않겠느냐고 하셔서 왜 그러시나 했는데 소식상자와 같이 한 사이트의 소식을 바깥에 내보이게 하는 게 필요하신 모양이더군요.

근데 소식상자는 100% 자바스크립트로 짜여 있습니다. 그리고 소식상자의 기본 개념은 '본체와는 전혀 다른 서버에 있는 사이트나 블로그에서 데이터를 끌어와 뿌려주는 것'입니다. 그리고 기본적으로 자바스크립트는 다른 도메인에 있는 데이터에 직접 접근하려면 권한 문제가 걸리게 마련이죠. 유일한 방법이라면 자바스크립트 파일로 데이터를 배열 형식으로 만들어두고 script src='~.js' 형식으로 읽어오는 겁니다. 이렇게 하면 외부에서도 끌어올 수 있긴 하지만 RSS 같은 범용성 있는 형식이 아닌 바에야 일일이 해당 툴에 맞는 컨버팅 프로그램을 짜야 하는 난점이 있습니다.

『만』 만의 문제라면야 별 문제는 아닌데, 바깥에서도 쓸 수 있는 범용성을 갖추려면 결국 개념을 다시 정리해야 합니다.

1) 자바스크립트로 RSS를 파싱하는 건 가능하다. 하지만 다른 도메인에 있는 경우 처리가 힘드니 사실상 고려 대상이 아니다.
2) 그렇다면 자바스크립트 파일을 본 서버에 자리한 서버스크립트 언어 파일로 처리를 하고, 이 언어에서 RSS를 파싱해 자바스크립트 배열로 HTML 출력을 해 주고 외부에선 그걸 끌어다 쓰면 어떨까.

…까지 현재 구상이 정리가 됐습니다.

현재 『만』 소식상자는 이런 식입니다. 언어 인코딩에 따라서 다음과 같은 지정 경로에 파일을 둡니다. 『만』에서는 RSS 파일을 제작할 때 두 파일을 같이 만들어 둡니다. 꽤 지리멸렬한 짓이죠.

http://mahn.co.kr/marsheaven/newsbox/_data_euc_kr.js ← EUC_KR인 경우
http://mahn.co.kr/marsheaven/newsbox/_data_utf_8.js ← UTF_8인 경우

그럼 태터툴즈나 티스토리, 워드프레스 같은 외부 블로그에서는 이를 가져다가

<script type='text/Javascript' src='http://mahn.co.kr/marsheaven/newsbox/_data_euc_kr.js'></script>
<script type='text/Javascript' src='http://mahn.co.kr/marsheaven/newsbox/_load_euc_kr.js'></script>

식으로 붙입니다.

_data_euc_kr(혹은 _data_utf_8).js에는

mahn_link=new Array();
mahn_title=new Array();mahn_subtitle=new Array();

mahn_title[0]="카투니스트 강태용 씨, ‘제1회 국제생산성카툰공모전’ 대상 수상";
mahn_link[0]="http://www.mahn.co.kr/marsheaven/articles/_view.php?no=1777";
mahn_title[1]="<시드노벨>, 첫 작품으로 임달영 씨의 「유령왕」 발표";
mahn_link[1]="http://www.mahn.co.kr/marsheaven/articles/_view.php?no=1776";
mahn_title[2]="그래픽 아티스트 아메바피쉬 작품집「ROBOT」출간";
mahn_link[2]="http://www.mahn.co.kr/marsheaven/articles/_view.php?no=1763";
...
...

식으로 제목과 URL이 정리되어 있습니다. 미리 배열 데이터로 지정해 둔 거죠. 이렇게 하면 외부 서버에서도 읽어오는 데 무리가 없어지니까요. 그리고 _load_euc_kr(혹은 _load_utf_8).js에서는 이를 받아다 상자 모양으로 꾸며주는 겁니다. 모양과 색깔 변경을 위해 이런 저런 옵션을 지정할 수 있게 해 두는데 이 또한 스크립트의 변수를 이용하죠.

자, 근데 RSS를 쓰기 위해선 어떻게 해야 할까요. _load 쪽 파일은 놔 두고 _data 쪽 파일을 조정하는 편이 맞을 텐데, 서버스크립트 언어로 본체의 지정 위치에 자리한 RSS파일을 읽어서 뿌려주는 겁니다. 이를테면 이런 거죠.

<script type='text/Javascript' src='http://mahn.co.kr/_newsbox.php?encode=utf_8'></script>

이렇게 하면 인코딩별로 따로 둘 것도 없고 PHP파일 선에서 모든 게 해결이 가능해지긴 합니다. RSS파일에서 <TITLE>과 <LINK>에 해당하는 부분만 떼어다 앞서와 같이 배열문으로 나열해주면 되고, 만약 euc_kr로 들어온다고 하면 iconv로 코드 변환을 해서 얹어주면 되니까요. 나머지는 기존과 같이 하면 됩니다. 파일을 하나로 줄이는 것도 방법이긴 하지만, 모양 내주는 파일하고 데이터 파일은 분리해놓는 편이 낫고 또 PHP와 자바스크립트에 HTML이 한 파일에서 혼용되면 가져다 쓰는 사람도 골치아파질 수 있어서 말이죠. (…) 서버 자원을 조금 더 쓴다는 건 어쩔 수 없겠군요.

…라고 하면 말은 쉬운데 짜자니 귀찮아 죽겠군요. 하지만 이렇게 새로 짠다면 다른 팀블로그나 언론을 표방하는 공간, 혹은 블로그카페 등에서 활용하기는 편해질 듯합니다. 급한 건 아니실테니 천천히 가 보겠습니다.


자. 그나저나 비둘기Z 이야기는 왜 나왔느냐. capcold 님이 다른 공간에 전용이 가능하다면 이름을 정해주시는 게 어떻겠느냐 하시더군요. 귀찮으면 그냥 SCH-01로 할 거라고 은근히 협박(?)하시길래 '전령 하면 역시 비둘기지' 라는 생각에 뜬금없이 비둘기Z는 어떻냐고 말했는데 졸지에 진짜 그 이름으로 가게 생겼습니다. pigeonZ…뭔가 고담틱한 암울함이 배어나오는군요. (……)

by 서찬휘 | 2007/05/31 07:16 | 셈틀놀이 | 트랙백 | 덧글(2)

트랙백 주소 : http://seochnh.egloos.com/tb/1576810
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 100쁠쁠 at 2007/05/31 11:47
궁금한 것이 하나 있는데 ajax로는 불가능한가용? 원격 서버에 js가 존재하고 그 서버상에서 php나 html을 불러오면 될것도 같은데.. ;
Commented by 100쁠쁠 at 2007/05/31 13:13
해보니 안되는군요.. ;
전에 한번 대충 됐던 기억이 나는데.. 그땐 어찌된 거지.. 쩝쩝. ;

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶