Differences between revisions 2 and 3
Revision 2 as of 2005-09-06 08:53:40
Size: 11092
Editor: 211
Comment:
Revision 3 as of 2011-08-03 11:00:56
Size: 11094
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 75: Line 75:
[Perky]씨의 파이썬 커미터등극얘기는 예전에 듣긴했지만, 오늘 [http://openlook.org/blog/2003/Dec/08 자세히] 봤다. 많이 부럽다. ^^; 전세계를 무대로 활약하는 모습이... 나도 꼭... 실력을 키워서 저렇게 되야지. 암 [Perky]씨의 파이썬 커미터등극얘기는 예전에 듣긴했지만, 오늘 [[http://openlook.org/blog/2003/Dec/08|자세히]] 봤다. 많이 부럽다. ^^; 전세계를 무대로 활약하는 모습이... 나도 꼭... 실력을 키워서 저렇게 되야지. 암

(<-)

[../2004-01]

[../2004-03]

(->)


2004-02-04

오늘 하루 너무 많은것들을 머릿속에 생각하고 있다. 정리가 잘 안되네. 여따 정리해보자...

PythonKoreaUserGroup에서 본 글중에([Perky]씨 글이군), 일반적인 [Python] [CGI]가 너무 무겁다는 얘기가 있었다. {{| mod_python은 파이썬 인터프리터가 아파치 프로세스에 직접 붙어서 실행되기 때문에, cgi에 비해 상대적으로 부하가 적은 편입니다. 파이썬은 인터프리터 자체만 해도 초기화부하가 엄청나기 때문에 CGI만 갖고는 엄청나게 성능이 떨어지는데, MoinMoin처럼 모듈 개수가 엄청나게 많은 경우 특히 더 느려집니다. 그런데, mod_python을 사용하는 경우에는 아파치 프로세스들이 항상 파이썬 인터프리터를 메모리에 담고 있다가 바로 그 인터프리터들이 핸들러를 실행해주므로 단순한 스크립트 부하만 있으면 되어서 매우 빠릅니다.

그리고, mod_python은 CGI적인 1:1 방법외에 아파치의 리퀘스트 정보를 더 많이 받아와서 디렉토리를 핸들링할 수 있는 능력도 있으며, publisher 같은 별도의 방법도 제공해 줍니다.

그런데, mod_python을 prefork MPM모델의 아파치에서 사용하는 경우에는 (apache 1.x와 2.0중 유닉스 버전은 prefork가 디폴트) 아파치가 서버가 엄청나게 많은 수의 프로세스를 띄우고 분산하여 서비스를 하기 때문에, 각각이 파이썬 모듈들을 따로따로 갖고 있게 되고, 파이썬이 캐쉬하는 모듈들도 따로따로 나가기 때문에 아파치 프로세스 개수가 늘어나면 메모리 소모나 캐쉬 효율면에서 매우 안 좋아집니다. 따라서, mod_python 보다는 통상적으로 scgi나 pcgi2 같은 것들이 선호되는 편입니다. |}}

{{| 아무래도 윈도우 플랫폼에서는 ASP에서 Python을 쓰는 것이 가장 무난한 편이고, UNIX에서는 앞에서 언급했던 modpython, Zope, scgi, albatross, twisted같은 것들이 있습니다. 파이썬CGI가 갖게되는 가장 큰 문제점은 뜨는 시간인데, 뜰 때 마다 프로세스가 초기화되면서, 기본적으로 사용되는 모든 파이썬 모듈이 올라오게 되느라 각 프로세스 별로 보통 0.4~0.5초 이상으로 걸려버리며 디스크 부하도 많이 가는 것이 사실입니다. (모인모인의 경우에는 엄청나죠..) mod_php나 mod_perl같이 초기화를 0.1초 내에 할 수 있는 것들과는 일단 시작부터...

그래서 초기화를 가볍게 하기 위해서 사용하는 것이 서버에 계속 읽어놓고 있는 Persistent Server 모델입니다. Zope는 별도의 널리 알려진 애플리케이션이므로 공개된 솔루션들이 많다는 것이 장점이구요, scgi는 fastcgi처럼 SCGI 서버가 독립 서버로 떨어져 있고, 가벼운 아파치 모듈인 mod_scgi가 웹 요청을 받아서 SCGI서버에 요청하는 모델입니다. fastcgi보다 기능 지원이 적은 반면에 속도가 조금 더 빠릅니다. modpython은 아예 아파치 서버에 파이썬 인터프리터를 포함하는 방법인데, scgi에 비해서, 외부 프로세스와의 대화가 없기 때문에 그 면에서는 빠르지만, 각각의 아파치 쓰레드(1.3과 2.0 prefork에서는 프로세스)가 파이썬 모듈 캐쉬나 네임스페이스를 모두 따로따로갖고 있기 때문에, 메모리 낭비가 심한 편이고, scgi에서 사용할 수 있는 몇가지 캐쉬 테크닉들을 쓸 수 없는 점이 단점입니다. 그 외에 albatross나 twisted는 국내에서는 크게 많이 사용되지 않는 프레임웍 인데, albatross의 경우에는 간편한 웹 개발을 위해 사용되는 세션 라이브러리 등으로 이루어져 있고, twisted는 여러 프로토콜을 추상화한 계층을 통해 유연한 서버 프레임웍을 만드는 것이 목적입니다. 용도에 따라서 선택하시면 좋겠죠~ |}}

대안으로 ModPython, [SCGI], FastCgi등이 있는데, 아무래도, 여기 WikiWiki가 느린 이유도 그래서인듯싶다. 대안중 가장 괜찮다는 [SCGI]를 쓰려고 하는데, 음... [Apache]용 mod_sgci.so 파일이 도데체 어딨는지. 컴파일할라니 에러메세지 투성이고, 여기 아파치가 버젼이 2.0인데... 그래서 안되는건지... 좀 머리아프네.


앞으로 [Python] WebApplication을 만들때 [Medusa]를 써야겠다. IoMultiplexing방식이 이쪽일들에 더 맞는것 같다는 생각이 들었다. 메듀사를 쓰자니, 전체 소스코드를 이해해야되는데, 쉽지않더라. 알아보면서, [Quixote]라는 프로그램을 봤는데, 괜찮더군. 메듀사서버를 쓰고 있더군, 더군다나, 이강성교수님의 PyBB도 보니깐 메듀사서버를 쓸수있게 되어있구... 내 목적은 메듀사의 웹서버를 약간변형, 해당디렉토리의 [HTML]파일을 보내는게 아닌, 메인함수를 실행하는것. 차분히 공부하자. 앞으로 써먹을데가 많을 것 같다.


약 500개정도의 쿼리서열을 [BLAST]ing 한후, 결과를 재 정리해라는 부탁을 받았는데, [COG] DB에 대해서도 검색해달라고 했다. 사실 [COG]서열들은 아이디만 출력되므로, 해당 기능 및 자세한 정보를 보기위해선 추가적인 조작이 필요하다. 어떤 방법이 좋을까.


2004-02-05

[Sefiroth/2004-02-05]하는날.


이곳위키의 [SCGI]세팅에 실패했다. 왜 나만 이렇게 세팅이 안되는겨, 다른사람들은 잘되는것 같던데... 일단 FastCgi로 선회. 쉽게 되지는 않는다. [Quixote]를 중심으로, 꾸준한 스터디가 필요할것 같다.


[Perky]씨의 파이썬 커미터등극얘기는 예전에 듣긴했지만, 오늘 자세히 봤다. 많이 부럽다. ; 전세계를 무대로 활약하는 모습이... 나도 꼭... 실력을 키워서 저렇게 되야지. 암


2004-02-06

[Sefiroth/2004-02-05] 뒷풀이때 나왔던 얘기중, 네트워크 프로그래밍얘기가 자꾸 머릿속을 맴돈다. [BIND]같은 프로그램이 대표적인 예제로, 해당 프로그램 하나는 특별한 기능이 얼마 없이, 단순한 몇가지 규칙에 따라 행동하는것뿐이지만, 전체적으로 봤을때, 인터넷같은 엄청난 EmergentProperty를 만들어낸다. [OOP]의 접근방법역시, 각 객체들을 만들고, 해당 객체들이 자발적으로 행동함으로써, 전체적인 패턴을 만들어낸다고 한다. 그런 프로그램을 만들고 싶다는 생각이 자꾸 든다. 간단한 규칙 몇개를 가진 프로그램이 네트워크를 통해서 여러명이 같이 사용할경우, 새로운 무언가를 창발해내는 것... 그런면에서는 WikiWiki도 비슷하고, [Blog]를 통해 관심분야의 글들을 통합하는것도 비슷하다.

[Sefiroth]를 스터디중심의 모임에서 프로젝트중심의 모임으로 변화시키자는 논의가 있었다. 쉽지는 않겠지만서도, 서서히 프로젝트들을 띄워보는 시도를 해야겠다. 그리고 나왔던 얘기중, 바이오관련 [P2P]커뮤니티를 만들자는 의견. 개개인은 약 50여개의 서브분류항목을 두개이상 선정할 수 있고, 해당 항목에 질문을 하면, 실시간으로 해당항목을 포함하고 있는 사람이 메세지를 볼 수 있고, 해당 메세지에 답변 메세지를 날릴수 있다. 그러자니, [IRC]랑 비슷하네. 좀더 고민...


2004-02-27

[Medusa]-[Quixote]를 이용하여, 간단하게나마 실험분석내용을 그래픽이미지로 웹을 통해 보여주는 프로그램을 통해서, pig [Genome]관련 분석작업을 돕고 있다. [PIL]로 실시간 이미지를 만들어 웹으로 출력하는 방식을 취하고 있는데, 가끔씩 로드가 많이 걸리는 부분이 있다. 그 경우, [Medusa]의 IoMultiplexing특성때문에, blocking되어 다른곳에서는 무작정 기다리는 현상이 생긴다. 혼자서 볼때는 몰랐는데, 여러곳에서 동시에 실행하게 되니 이런 현상이 눈에띄게 거슬린다.

어제 [picxenk]와의 대화에서 [Twisted]얘기가 나왔고, 그리고, 바람직한 AsynchronousProgramming에 대한 조언을 들을 수 있었다. 순간 request에 대한 CPU 로드를 적게 갖도록 디자인하는 것. 그러려면 보다 더 낮은 레벨에서 asyncore 모듈을 다룰 수 있어야할꺼다.

[Twisted]에 대해서 대강 둘러봤는데, 거의 모든 형태의 인터넷네트워크 프로토콜들을 지원하는듯. [Quixote]에서도 [Twisted]서버를 예제로 한 코드가 있어서 눈여겨 볼 수 있었다. 조만간 수행하게될 과제는 [Twisted] 프레임워크를 이용하고 싶다고 생각.

  • Async는 개별 request의 처리시간이 극히 짧지만 순간 request 개수가 많은 경우에 적합합니다. 보완책으로 Async+Thread를 권합니다. Twisted에서 잘 지원되고 있습니다. --[김창준]

    • 네... 로드가 많이 걸리는 부분에 대해서는 thread로 돌리는거군요.


100kb이상의 [BAC]서열을 통채로 [BLAST]N 을 돌렸더니, 결과 파일이 엄청나게 크게 나온다. e-value옵션 및 출력대상 subject를 줄이는 방식을 쓰는데도 불구하고, 결과 텍스트파일하나가 대략 100M에 육박. 이걸 BioPython으로 [Parsing]하고, 그 결과를 pickle로 dump하는데 시간도 무쟈게 오래걸린다. 덕분에, [Medusa]서버는 걍 무작정 기다리는중.

이 경우, 어떤 방식으로 정보를 저장하고 Web으로 결과를 보여줄 수 있을까. RelationalDatabase를 써야하나...


내가 [Bioinformatics]에서 강점을 보일수 있는 부분은 어떤것일까. 수학적 백그라운드도 적절히 받혀주지 못하고 있고, ComputerScience 전공도 아니고, 고급수준([Cee]등)의 ComputerProgramming이 가능한것도 아니고, 그렇다고 [Biology]쪽에 내세울것이 있는것도 아니고...

그냥 이렇게 주변인으로 남느냐, 아님 나만의 강점을 찾느냐...

문득 들었던 생각한가지. {{| 생물정보 --> 데이터설계 --> [XML] --> WebService |}}

이쪽 방향에 내가 강점을 가질 수 있지 않을까.


가끔씩 보면, 프로그래머로서의 내공에 질려버릴듯한 사람들이 있다. JuneKim씨나 [Perky]씨등등... 오늘 여기저기 둘러보다가 본 JoincDotCoKr의 관리자도 그런 사람인듯. 상당한 내공의 소유자인듯 싶다. 암튼 [Cee]잘다루면 내가볼때 다 대단해보임. 가까이 하면할수록 배울것도 많으리라.


다같이 작성하는 PresentMyKeyWords


(<-)

[../2004-01]

[../2004-03]

(->)


CategoryWebLogYong

yong27/2004-02 (last edited 2011-08-03 11:00:56 by localhost)

web biohackers.net