CGI 프로그램으로 체크박스 데이터 전달하기
체크박스(Checkbox)는 사용자가 두 개 이상의 옵션을 동시에 선택할 수 있어야 하는 경우에 사용하는 폼 요소입니다. 라디오 버튼과 달리 여러 항목을 중복 선택할 수 있다는 점이 특징입니다.
체크박스가 선택되면 해당 항목의 name과 value가 서버로 전송되지만, 선택되지 않으면 아무런 데이터도 전송되지 않습니다. 이 특성을 이해하면 CGI 스크립트에서의 처리 로직이 쉽게 이해됩니다.
체크박스가 포함된 HTML 폼 작성
다음은 두 개의 체크박스를 포함한 폼의 HTML 코드 예제입니다.
<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank"> <input type = "checkbox" name = "maths" value = "on" /> Maths <input type = "checkbox" name = "physics" value = "on" /> Physics <input type = "submit" value = "Select Subject" /> </form>
이 코드를 브라우저에서 실행하면 다음과 같은 폼이 화면에 나타납니다.
Maths Physics [Select Subject]
체크박스 입력을 처리하는 CGI 스크립트
아래는 웹 브라우저에서 체크박스 버튼을 통해 전송된 입력값을 처리하는 checkbox.cgi 스크립트입니다.
#!/usr/bin/python
# CGI 처리를 위한 모듈 임포트
import cgi, cgitb
# FieldStorage 인스턴스 생성
form = cgi.FieldStorage()
# 각 필드에서 데이터 가져오기
if form.getvalue('maths'):
math_flag = "ON"
else:
math_flag = "OFF"
if form.getvalue('physics'):
physics_flag = "ON"
else:
physics_flag = "OFF"
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Checkbox - Third CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> CheckBox Maths is : %s</h2>" % math_flag
print "<h2> CheckBox Physics is : %s</h2>" % physics_flag
print "</body>"
print "</html>"
스크립트 동작 원리
이 스크립트의 핵심 동작 과정은 다음과 같습니다.
1. FieldStorage 객체 생성: cgi.FieldStorage()를 호출하면 POST 또는 GET 방식으로 전송된 폼 데이터를 파싱하여 저장한 객체가 만들어집니다.
2. getvalue()로 값 확인: form.getvalue('maths')는 'maths' 체크박스가 선택되었으면 해당 값("on")을 반환하고, 선택되지 않았으면 None을 반환합니다. 따라서 조건문만으로 체크 여부를 판별할 수 있습니다.
3. 결과 출력: 각 체크박스의 상태를 "ON" 또는 "OFF" 문자열로 변환한 뒤, HTML 형식으로 출력하여 사용자에게 결과를 보여줍니다.
참고 사항
위 예제의 print 문은 파이썬 2 문법입니다. 파이썬 3에서는 print() 함수 형태로 작성해야 하며, 헤더 출력 시에는 반드시 빈 줄(\r\n\r\n)을 포함해야 브라우저가 본문을 정상적으로 해석합니다.
또한 cgi 모듈은 파이썬 3.11부터 지원 중단(deprecated)되었고 파이썬 3.13에서 완전히 제거되었습니다. 실제 프로젝트에서는 Flask, Django 같은 최신 웹 프레임워크를 사용하는 것이 권장되지만, CGI의 기본 동작 원리를 학습하는 데에는 위 예제가 여전히 유용한 참고 자료가 됩니다.