Nov 15, 2011

python으로 web server를 CherryPy

1. 소개
cherry-pypython기반의 web server 이다. python 자체가 원래 web api를 충실히 지원하긴 하지만 cherry-py는 사용이 훨씬 간결하고 편리하다. 특히 저자 처럼 python을 신봉하는 사람이라면 CGI 분야로의 python의 저변 확대는 너무 반가운 얘기이지 않을 수 없다.

cherry-py가 php, asp, jsp 등과 비교하여 무엇이 우월한지는 잘 모르겠다. 원래부터 컴퓨터 언어라는 것이 본인이 사용하기에 편하고 목적 구현에 효율적이기만 하다면 되는거다. 굳이 비교하여 사용의 당위성을 입증할 필요는 없다. 필자에게 제일 재미있는 언어는 python 이다. 사용이 편하고, 목적에 효율적이며, 다루는 재미가 있어서 cherry-py로 간단한 CGI 서버를 만들기로 선택했다.


2. 설치
설치는 별게 아니라 python용 라이브러리를 만드는 일이다.  목적은 그저

import cherrypy

위의 한 줄이 동작하도록 cherry-py library를 설치하는 것이다.
필자의 오래된 macbook pro에는 python 2.7이 mac port로 설치되어 있어서 그것을 이용하였다.
우선,  CherryPy-3.2.2.tar.gz를 다운로드 받고, 압축을 해제한 후, CherryPy-3.2.2 디렉토리 안에 들어가서 아래와 같이 타이핑 한다.
python setup.py install


다 끝나면 설치 완료, 참 간단하다.


3. 실행
cherry-py는 클릭 하면 실행되거나 daemon 형태로 돌면서 특정 디렉토리 안의 소스들을 무작정 서비스 하는 그런 코드가 아니다. 설치 섹션에서 압축을 해제했던 .../CherryPy-3.2.2/cherrypy/tutorial 에는 친절한 튜토리얼이 있다.
실행법은 다음과 같다.


huiso:tutorial garam$ pwd
/Users/garam/Downloads/CherryPy-3.2.2/cherrypy/tutorial
huiso:tutorial garam$ ls
README.txt                     tut02_expose_methods.py        tut08_generators_and_yield.py
__init__.py                    tut03_get_and_post.py          tut09_files.py
bonus-sqlobject.py             tut04_complex_site.py          tut10_http_errors.py
custom_error.html              tut05_derived_objects.py       tutorial.conf
pdf_file.pdf                   tut06_default_method.py
tut01_helloworld.py            tut07_sessions.py
huiso:tutorial garam$ python2.7 tut01_helloworld.py 
[14/Nov/2011:23:50:48] ENGINE Listening for SIGHUP.
[14/Nov/2011:23:50:48] ENGINE Listening for SIGTERM.
[14/Nov/2011:23:50:48] ENGINE Listening for SIGUSR1.
[14/Nov/2011:23:50:48] ENGINE Bus STARTING
[14/Nov/2011:23:50:48] ENGINE Started monitor thread 'Autoreloader'.
[14/Nov/2011:23:50:48] ENGINE Started monitor thread '_TimeoutMonitor'.
[14/Nov/2011:23:50:48] ENGINE Serving on 127.0.0.1:8080
[14/Nov/2011:23:50:48] ENGINE Bus STARTED

웹 브라우저로 접속해보자.



해 준 일은 다음과 같다.


Line 1 : cherrypy 모듈을 불렀다.
Line 3-6 : class 를 하나 만들고, member function index와 member variable exposed를 정의했다.
Line 8-9 : tutorial.conf 파일의 전체 경로를 문자 변수로 들고 있는 tutconf 변수를 정의했다.
                 설정파일은 별게 없고, 서버명, 포트번호 정도가 적혀있다.
Line 11 : 체리파이에게 위에서 만든 class를 서비스 하라고 시켰다.

아, 이 얼마나 아름다운가. 미니멀리즘이란 바로 이런 것이 아닌가!!

견고한 웹 서버와 hello world 예제가 "단지 이게 다" 이다.