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.0284 sec