E D R , A S I H C RSS

Freechal Album Spider

1002 가 만들었던 프리첼 앨범퍼오기 프로젝트. (10월 20일 ~ 29일) 그와 관련한 프로젝트 후기.

작업동기

프리첼이 유료화되면서 주위 사람들이 게시판들을 프리첼로부터 이전을 하기 시작하였다. 주위 아는 교회선배들의 경우는 그중 숭실대에서 게임방을 운영하시는 분이 있어서 교회사람들 전용 서버를 하나 마련하고 게임방에서 굴리기로 한다. 프리첼 게시판 변환기의 경우 이미 범용적인 제로보드나 이지보드에서 제공을 하지만, 앨범이나 화일 백업은 지원하지 않는다. 그리고, 게시판 백업을 할때엔 프리첼 관리자가 기존 게시판들의 접근 권한정도를 조절해줘야 한다. 로그인처리가 안되어있기 때문인데, 제로보드 게시판 변환기를 보니 쿠키 관련 처리가 없었다.

마침 개인적으로 자주 이용하는 ClientCookie 가 있기 때문에 쉽게 작성할 수 있을것이라 판단, 어느정도 스케줄을 잡고 작업 시작.~

프로토콜 분석

처음 무엇을 해야 할지 고민을 해야 하는데, 일단은 '이미지를 가져오는게 가능한가?' 를 먼저 하게 되었다. 프리첼의 경우 이미지를 얻어오는 방법이 getImage.asp 화일을 통해서만 가능하다. 일반 JPG 링크가 아니기 때문에, getImage.asp 로 넘겨주는 인자들을 알아내야 한다.

1002 는 webdebug 와 Proxomitron 두개를 이용하는데, 둘 다 일종의 프록시 서버처럼 이용하여 HTTP 로 송수신 되는 GET/POST, HTTP Header 데이터들의 로그를 확인할 수 있다. 둘을 이용, 프로토콜 분석을 하였다.

프로그래밍

교회 사람이 운영하는 겜방에서 작업; 금연인 겜방이 이렇게 좋을수가. 한쪽의 세미나실의 기독교 관련 서적이 빼곡하게 차 있는 것이 인상적.

vi - python - ctags - grep 조합이 손에 참 잘 들어맞는다. 다른 Python 쪽 좋은 IDE들을 잘 못접해서 그런지 개인적으론 가장 편한 조합이 되었다. 타 개발툴들로 작업할때 하던 일들을 이것들의 조합으로 의식적으로 할 수 있게 된다.

처음에는 모듈에 대해 Remote Test 를 먼저 진행했다가, Local Test 로서 일단 HTML 문서를 받아놓고, 이를 TDD 로 하면서 데이터들을 추출하는것이 낫겠다 판단, Local Html Test 를 작성해나갔다. 이전 ProjectPrometheus 에서 했었던 방법과 비슷했었던지라, 일사천리로 거의 하루동안 관련 작업들이 끝났다.

작업을 계속 하다 보니, 각 모듈들에 대해 BottomUp 스타일로 작성이 되었다. 근데, 막상 '다음에 해야 할일은?' 질문을 해보니, 좀 멍멍해졌다. 이래서는 안되겠다고 판단, 일단 만들어놓은 개개의 모듈들을 근거로 시퀀스 다이어그램을 그리고 그 순서를 잡아나갔다.

각 모듈들이 서로 불러져야 할 순서들을 정하고 난뒤, 내가 만든 각 모듈들을 일종의 SpikeSolution 처럼 라이브러리 연습하듯이 이용해보았다. 그러면서 잠시 놓쳤던 흐름을 다시 잡았다. 이러한 일들을 의식적으로, 그리고 '무엇을 할까 - 이것을 하자' 라고 생각해낼 수 있었던 것이 기분을 참 좋게 했다.

초반 3일정도는 TDD 를 하고 후반의 PBI 스타일로 테스트 코드이 진행했는데, 후반으로 갈수록 작업 진척도가 떨어지고, 코드에 대한 이해도도 떨어짐을 느꼈다.

주로 제로보드 데이터로 변환하기 위한 데이터베이스 저장 부분인데, 첫번째 이유로는 제로보드 DB 의 스키마를 제대로 파악하지 못한것이 문제였다. 이 문제는 프리첼->제로보드 컨버터 PHP 소스를 보고 이를 Python 으로 포팅하였다. 이전에 PHP 프로그래밍을 많이 했기 때문에 익숙했고, 어차피 같은 어족군(?)의 언어이므로 별다른 어려움이 없었다. 하지만, 테스트 경우를 명확하게 하지 않았기 때문에, 작동이 제대로 되지 않는지에 대해서는 게시판 변환뒤 매번 웹에서 나온 결과를 확인해야 했다.

또하나 문제로는 이상하게 MySQLdb 모듈이 문제를 일으켰는데, update query 를 날릴때 에러발생을 하는 것이였다. 똑같은 쿼리문을 쉘에서 실행했을때는 잘 되었는데, MySQLdb 의 cursor 클래스를 이용, 쿼리를 날리면 실행이 안되는 것이였다. (DB 에 적용은 되는데, 에러가 발생한다.) 이 부분에 대해서는 일단 try-except 로 땜질처리를 했지만, 그리 기분좋진 않다. 수정이 필요하다.

질문

제가 python을 전혀 몰라서 그러는데요, 이거 사용법좀 알려 주시겠어요.
암만 해도 안 되서요.. freechal 앨범용량이 너무 커져서 앨범의 일부분을 이주하려고 하는데, 이미지 가져오는 부분을 PHP로 하는데 잘 안되서요..
이글을 보면 부탁드립니다...
늦게서야 보게 되어서..; 지금도 작동을 할런지는 잘 모르겠습니다. 알바때문에 바빠서 유지보수를 못하는 중인지라.. freechal service UI 가 바뀌면 깨지는 녀석일것인지라..; 사용하기전에 필요한 것으론 Python 2.2x 버전 정도와 MySQLdb 라이브러리가 필요하고요. 해당 proper.py 화일을 맞춰주신뒤, freechalscript.py 를 실행해주시면 됩니다. 같은 역할을 하는 프로그램은 http://www.perlmania.or.kr 에서 먼저 구현된걸로 기억합니다. 거기서 해당 강좌도 있던걸로 기억하오니 참조하세요. --1002
우선 감사합니다. 근데 에러가 나네요^^; 제가 현재 이미지 가져오는 부분을 처리를 도저히 못하겠는데, 혹시 이 부분에서 주의하여야 할 부분이 있나요? python도 Header setting같은 거 하나요? 전 PHP로 하고 있거든요..
원리는 보통의 이런류의 프로그램 (HTTP 로 문서 가져오고 스트링 파싱하여 데이터로 가공하고 DB에 저장) 이 비슷합니다. 단, 앨범게시판의 경우 로그인이 필요한데, 이 경우 쿠키 처리를 위한 header setting을 해줘야겠죠. Perl 같은 경우 LWP, Python 의 경우 ClientCookie, Java 의 경우 HttpUnit(원래의 용도는 다르지만, 이런 프로그램을 위한 간이 브라우저 라이브러리로 쓸 수 있습니다.) 등의 라이브러리를 쓸 수 있습니다. 그리고, 이미지의 경우는 해당 URL을 보고 다시 HTTP Connection 을 열어서 얻어와서 binary로 저장해야 한다는 것이 유의사항이 되겠습니다. (HTML만 얻어오면 img tag 의 링크들만 있겠죠.) 그리고 header setting 에서 약간 미묘(?)한 부분이 있던것 같던데, 저는 걍 webdebug 로 캡쳐한거 그대로 보낸지라..; 이 부분은 CVS의 코드 참조하세요. --1002

감사합니다. Image가져오는 부분이 그 동안 안 되서 포기하고 있었는데, 덕분에 PHP로 해결했습니다. ^^ 제가 Header setting을 잘못했더군요.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:17
Processing time 0.0486 sec