Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python CGI에서 TEXTAREA 여러 줄 텍스트 데이터 전달 및 처리하기

웹 개발에서는 게시글 본문, 소개글, 피드백처럼 여러 줄에 걸친 긴 텍스트를 사용자로부터 입력받아 CGI 프로그램으로 전달해야 하는 경우가 자주 있습니다. 이럴 때 HTML의 <textarea> 요소를 사용합니다. 한 줄만 입력받는 <input type="text">와 달리, TEXTAREA는 단락 단위의 긴 문장 입력에 적합합니다.

HTML 폼 예제

다음은 TEXTAREA 박스가 포함된 폼의 HTML 코드 예제입니다.

<form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">
<textarea name = "textcontent" cols = "40" rows = "4">
여기에 텍스트를 입력하세요...
</textarea>
<input type = "submit" value = "Submit" />
</form>

각 속성의 역할은 다음과 같습니다.

  • action: 폼 데이터를 전송할 CGI 스크립트의 URL (예: /cgi-bin/textarea.py)
  • method: 데이터 전송 방식. 긴 텍스트를 전송할 때는 POST 방식이 적합합니다.
  • name: 서버 측에서 해당 필드 값을 참조할 때 사용하는 이름 (예: textcontent)
  • cols / rows: 텍스트 영역의 가로 폭(문자 수)과 세로 높이(줄 수)를 지정합니다.

이 코드를 브라우저에서 실행하면 다음과 같은 폼이 나타납니다.

Python CGI에서 TEXTAREA 여러 줄 텍스트 데이터 전달 및 처리하기

CGI 스크립트로 입력값 처리하기

웹 브라우저에서 전송된 데이터를 처리하는 textarea.py 스크립트는 다음과 같습니다.

#!/usr/bin/python3
# CGI 처리를 위한 모듈 임포트
import cgi, cgitb

# 오류 발생 시 브라우저에 상세 디버그 정보 표시
cgitb.enable()

# FieldStorage 인스턴스 생성
form = cgi.FieldStorage()

# 필드에서 데이터 가져오기
if form.getvalue('textcontent'):
    text_content = form.getvalue('textcontent')
else:
    text_content = "입력 없음"

# HTTP 헤더 출력
print("Content-type:text/html\r\n\r\n")
print("<html>")
print("<head>")
print("<title>Text Area - Fifth CGI Program</title>")
print("</head>")
print("<body>")
print("<h2>입력한 텍스트 내용: %s</h2>" % text_content)
print("</body>")
print("</html>")

코드 동작 원리

  1. 모듈 임포트: cgi 모듈은 폼 데이터를 파싱하는 핵심 기능을 제공하고, cgitb는 스크립트 실행 중 오류가 발생했을 때 브라우저에 상세한 traceback을 표시해 디버깅을 돕습니다.
  2. FieldStorage 객체 생성: cgi.FieldStorage()가 전송된 폼 데이터를 파싱하여 마치 딕셔너리처럼 필드별로 접근할 수 있는 객체를 만듭니다.
  3. getvalue()로 값 읽기: form.getvalue('textcontent')는 name이 textcontent인 필드의 값을 반환합니다. 값이 없으면 None을 반환하므로 if 문으로 빈 입력을 안전하게 처리할 수 있습니다.
  4. 결과 출력: Content-type 헤더를 먼저 출력한 뒤 HTML 본문을 출력하여, 사용자가 입력한 텍스트를 화면에 그대로 보여줍니다.

참고: 위 코드는 현재 표준인 Python 3 문법(print 함수)으로 작성되었습니다. 구버전 Python 2에서는 print "Content-type:text/html\r\n\r\n"처럼 print를 괄호 없이 문장 형태로 사용했습니다. 또한 Python 3.13부터는 표준 라이브러리에서 cgi 모듈이 제거되었으므로, 최신 환경에서는 Flask나 Django 같은 웹 프레임워크 사용을 권장합니다.

마무리

TEXTAREA 요소와 CGI의 FieldStorage를 조합하면 여러 줄 텍스트 입력을 손쉽게 처리할 수 있습니다. 실무에서는 입력값 검증과 함께 XSS 공격 방지를 위해 html.escape() 등으로 출력값을 이스케이프 처리하는 것도 반드시 고려해야 합니다.