洪民憙 (홍민희) 블로그

이하의 글은 2010년에 쓴 것입니다. 오래된 글인 만큼, 현재의 생각과 전혀 다른 내용도 많이 포함되어 있고, 당시와는 상황이 많이 달라진 점도 있습니다. 또한, 그 당시에 잘못 알려졌던 정보도 포함되어 있을 수 있습니다. 어찌됐든 저는 제 오래된 글이 회자되는 것을 저어합니다. 읽기에 앞서 양해를 부탁드립니다.

미투데이 PyPI 피드

Twitter에는 PyPI 구독 계정인 @pypi가 있는데 왜 미투데이에는 없냐!—하는 생각에 뚝딱뚝딱 만들어봤다. 소스 코드는 GitHub Gist에 올렸는데 별 제한없이 가져다 쓸 수 있다. (난 가져다 쓸 데도 없는 소스 코드를 자꾸 공개하지…)

http://gist.github.com/528781

내 미투데이에는 다음과 같이 공지를 했는데, 미투데이를 하는 분들은 저 포스팅을 미투하거나 핑백을 걸어서 우리나라 Python 프로그래머들한테 널리 알려지도록 해준다면 감사하겠다.

미투데이에서 PyPI를 구독할 수 있도록 미투 PyPI를 만들었어요. PyPI 한테 친신하거나 구독하면 최신 Python 패키지 업데이트를 미투데이에서 확인할 수 있습니다. 소스 코드는 이쪽에서 볼 수 있습니다. (GAE에서 호스팅중.)

보면 알겠지만 Google App Engine 애플리케이션으로 만들었고, 그냥 무식하게 1분마다 검사해서 하나씩 포스팅한다. 그래서 1분에 하나 이상의 패키지가 올라와도 그 중에서 가장 먼저 올라온 것만 당장 반영되고, 나머지는 다음에 포스팅된다는 사소한 단점이 있다. (왜 사소하냐면 하루에 올라오는 패키지 수가 그렇게 많지도 않고 1분에 패키지 여러개가 동시에 올라오는 일도 별로 없을 뿐더러, 여러개 동시에 올라와서 시간이 지연될 뿐이지 결국 순서대로 다 포스팅은 되므로.)

변명하자면 이렇게 한 이유가 다 있는데. Google App Engine 자체가 cron.yaml에 등록할 수 있는 가장 빈번한 스케쥴이 1분이고, 또 이쪽은 cronjob이 특정 프로세스를 실행시키는 것이 아니라, 애플리케이션 내 특정 URL에 HTTP 요청하는 식으로 있다. 그런데 GAE에서 애플리케이션을 만들어본 사람은 다들 알겠지만 매 요청당 타임아웃 제한이 있는데 정확히 몇초인지는 몰라도 암튼 굉장히 짧게 설정되어 있다. (비슷한 제한으로 한 요청당 소모할 수 있는 CPU 싸이클이 정해져 있어서, 그거 이상 연산하면 그냥 에러난다.) 또 미투데이는 미투데이대로 포스팅을 연속적으로 올리지 못하는 제한이 있고, 그러자고 5초나 10초씩 sleep하면 앞서 설명한 GAE의 타임아웃에 걸려서 제대로 동작하지 않는다. 이런저런 플랫폼의 제약들 때문에 이런 모양으로 개발하게 된 것이니, 구현이 거지 같다고 너무 욕은 하지 마시라.