파이썬은 안쓰이는 곳이 없는 것 같습니다.
그만큼 개발하기에 편리한 프로그래밍 언어이고, 여러 라이브러리들이 존재해서 확장성 면에도 뛰어난 언어라고 생각됩니다.

먼저 cgi에 대해서 설명하는 것이 맞지만 cgi와 관련해서는 여러 좋은 문서가 많이 있기 때문에 참고하시면 될 것 같습니다.

cgi reference 
1. wiki - http://en.wikipedia.org/wiki/Common_Gateway_Interface 

이번 포스팅에는 python을 cgi로 활용하는 방법에 대해서 설명하고자 합니다.
cgi 종류는 PHP, Python, JSP, ASP, Perl 등등이 있는데요. 그럼 python으로 왜 cgi를 개발해야 할까요??...

제가 Python으로 cgi를 처리하는 이유를 간단하게 적어보면

1. 개발이 매우 쉽고, 코드가 깔끔해서 유지보수에 편리하다.
2. 여러 라이브러리와와 연동이 쉽다.
3. 잘 사용할 줄 알고, 경험이 있다.
4. 속도는 떨어지지만, 간단한 것을 처리하기에는 적합하다.

입니다.


그럼 cgi를 어떻게 사용해야 하는지 알아보죠.

1. 웹 서버 셋팅하기 (apache)

1.1 vi /etc/httpd/conf/httpd.conf

     AddHandler cgi-script cgi pl py
     Options +ExecCGI
     AddHandler cgi-script .py

1.2 service httpd restart

 2. 웹 서버에 python cgi 파일 생성 및 활용

일단 웹 서버가 정상적으로 잘 작동하고 있다고 가정하고, 웹 서버의 홈 폴더에 python 파일을 하나 생성합니다.
매우 기초적이지만, 일반적으로 Linux의 웹 서버 폴더는(디폴트로 사용할 경우) /var/www/html 이 됩니다.


예를 들어 HTML에서 사용자가 아이디와 패스워드를 입력하고 이를 서버로 전송해서 데이터베이스와 비교해서 로그인 처리를 수행하는 것을 간단하게 구현한 것에 대한 소스를 보시죠(주석을 잘 달아 뒀어요).

vi /var/www/html/cgi/login.py

#!/usr/bin/python         
# 바로 위에 줄은 python 명령어의 위치를 정확하게 써주셔야 합니다. 디폴트는 /usr/bin/python 이지만

# 다른 버전의 python을 설치했고, 그 python을 통해서 cgi 처리를 수행하고 싶으시면 변경하셔야 합니다.

import os
import sys
import cgi                   #cgi 모듈을 import 하는 부분이죠
import psycopg2              #PostgreSQL 데이터베이스와의 연동을 위한 모듈을 import 하는 부분입니다.

print "Content-type: text/html\n\n"               #요게 없으면 에러가 나버려요!! 반드시 추가

form   = cgi.FieldStorage()                       #HTML에서 넘어오는 form value들을 받습니다.
userid = form.getvalue('userid')                  #넘어온 여러 값들 중에서 userid란 녀석을 얻어냅니다. 
passwd = form.getvalue('passwd')                  #마찬가지로 passwd란 녀석을 얻어냅니다.


#Python을 통한 데이터베이스 연동 부분은 Python-Database 부분에 쓰여진 포스팅을 참고하세요 ^ ^. conn_string = "host='localhost' dbname ='test' user='username' password='1111'" #데이터베이스 연결!!! try: conn = psycopg2.connect(conn_string) except: print "error database connection" curs= conn.cursor() query = "SELECT COUNT(*) FROM web_user WHERE userid='" + userid + "' and passwd='" + passwd+"'" curs.execute(query) row_value = curs.fetchall() print row_value[0][0] #데이터베이스에 userid와 passwd가 동일한 것을 찾으면 1이 넘어 올 것이구요, 아니라면 0이 넘어오겠죠. #1을 리턴하면 true 0을 리턴하면 false가 되겠습니다. #이에 따른 HTML에서 Javascript 처리를 수행하시면 됩니다.



cgi 처리 방식이 여러 가지가 있지만 이번 포스팅에서는 가장 간단한 것을 소개했습니다.
다음 포스팅에는 mod_python을 통하거나 psp(python server page)와 같은 내용을 차례대로 작성할 예정입니다.



+ Recent posts