Python CGI 프로그래밍의 출발점, cgi 모듈
Python에서 CGI(Common Gateway Interface) 프로그램을 작성할 때는 일반적으로 cgi 모듈부터 시작합니다. 이 모듈의 핵심 역할은 HTML 폼(form)을 통해 CGI 프로그램에 전달된 값들을 추출하는 것입니다.
사용자는 대부분 HTML 폼을 통해 CGI 애플리케이션과 상호작용합니다. 폼에 수행할 작업의 세부 내용을 입력한 뒤 제출하면, CGI 프로그램이 그 명세에 따라 동작을 실행하는 구조입니다.
HTML 폼에서 사용할 수 있는 입력 요소
하나의 HTML 폼에는 다양한 유형의 입력 필드를 자유롭게 포함할 수 있습니다.
- 텍스트 입력란(text)
- 체크박스(checkbox)
- 선택 목록(picklist / select)
- 라디오 버튼(radio button) 등
cgi 모듈의 기본 사용법
CGI 스크립트는 import cgi로 시작합니다. cgi 모듈의 가장 중요한 기능은 호출된 HTML 폼의 모든 필드를 딕셔너리(dictionary)처럼 다룰 수 있게 해주는 것입니다. 반환되는 객체는 일반적인 Python 딕셔너리와 완전히 동일하지는 않지만, FieldStorage 객체를 통해 매우 직관적으로 접근하고 조작할 수 있습니다.
예제 코드
import cgi
form = cgi.FieldStorage() # 폼 데이터를 담는 FieldStorage 객체 생성
# "username" 필드가 전송되었는지 확인
# 하나의 필드가 여러 번 전송될 수 있으므로(쉼표로 구분해 처리)
if 'username' in form:
username = form["username"]
usernames = ""
if isinstance(username, list):
# 여러 개의 username 필드가 전송된 경우
for item in username:
if usernames:
# 두 번째 항목부터는 쉼표 삽입
usernames = usernames + "," + item.value
else:
# 첫 번째 항목에는 쉼표 없음
usernames = item.value
else:
# 단일 username 필드가 전송된 경우
usernames = username.value
# 호출된 폼의 모든 필드 이름을 HTML 목록으로 만들어 보기
field_list = '<ul>\n'
for field in form.keys():
field_list = field_list + '<li>%s</li>\n' % field
field_list = field_list + '</ul>\n'위 예제는 먼저 FieldStorage() 객체를 생성해 폼 데이터를 담고, 'username' in form 조건문으로 해당 필드의 전송 여부를 확인합니다. 필드가 리스트 형태로 여러 개 전달되었는지 검사한 후 각각의 값을 추출하며, 마지막에는 폼에 포함된 모든 필드 이름을 순회하며 HTML 목록(<ul>) 문자열을 만들어 냅니다.
참고: 최신 Python 버전 사용 시 주의사항
cgi 모듈은 Python 3.11부터 공식적으로 지원이 중단(deprecated)되었으며, Python 3.13부터는 표준 라이브러리에서 완전히 제거되었습니다. 따라서 최신 버전의 Python으로 새 프로젝트를 시작한다면 Flask, Django 같은 웹 프레임워크나 WSGI 기반 도구를 활용하는 것이 훨씬 안전하고 효율적입니다. 다만 레거시 시스템 유지보수나 CGI 방식의 동작 원리 학습에는 여전히 유용한 참고 자료가 됩니다.
마무리
사용자에게 실질적으로 유용한 페이지를 완성하려면 아직 추가 작업이 필요하지만, HTML 폼에서 제출된 데이터를 성공적으로 처리하는 것만으로도 훌륭한 첫걸음을 내디딘 셈입니다.