왕초보를 위한 Python 2.7
12. 인터넷
12.7. CGI
12.7.3. 폼 입력받기
이번에는 사용자의 입력을 받아서 처리하는 CGI 스크립트를 작성해보도록 하겠습니다. 사용자의 입력을 받는 방법으로는, 아래 그림과 같은 웹 페이지의 폼(form)에서 사용자의 입력을 받아 CGI 스크립트로 넘겨주는 방법을 많이 사용하지요.

이 폼을 직접 만들어볼까요?
다음과 같이 작성하셔서 htdocs에 name.htm이라는 이름으로 저장해 주시기 바랍니다.
<html><body>
<form method=get action="cgi-bin/name.cgi">
이름을 적어주세요:<br>
<input type=text name=user>
<input type=submit>
</form>
</body></html>
<form method=get action="cgi-bin/name.cgi">라고 해준 것은 이 폼에서 사용자의 입력을 받아서 그것들을 cgi-bin에 있는 name.cgi 파일에게 GET 방식으로 넘겨주겠다는 뜻입니다.
그 다음에 <input type=text name=user>라고 해서 텍스트를 입력받는 빈칸을 만들었구요, <input type=submit>이라고 써주어서 버튼도 만들었습니다.
이제 폼에서 입력받은 값을 처리해줄 name.cgi를 만들어봅시다.
#!c:/python21/python.exe import cgi form = cgi.FieldStorage() user = form['user'].value print "content-type:text/html\n" print '안녕하세요~ ' + user + ' 님'
이번에는 cgi라는 모듈이 등장했네요. cgi 모듈의 FieldStorage라는 클래스를 이용하면 폼으로부터 넘겨받은 내용을 CGI 스크립트에서 사용할 수 있답니다. 아까 name.htm에서 사용자의 이름을 입력받는 빈칸의 이름이 user였으니까, 여기서는 form['user'].value라고 하면 입력값을 얻어낼 수 있지요.
이제 웹브라우저에서 테스트를 해 보세요. 입력하신 이름을 받아서 아래와 같은 인사말을 출력해줄 거예요.

위에서 폼을 만들 때, 이 폼이 입력받은 값을 GET 방식으로 name.cgi에게 넘겨준다고 했었죠? GET 방식이란 것은 CGI 프로그램에게 매개변수를 넘겨주는 방법 가운데 하나입니다.
지금 웹브라우저의 주소창을 보시면 http://localhost/cgi-bin/name.cgi?user=Good+Will+Hunting과 같이 되어있지요? 여기서 URL 다음의 ‘?’ 뒷부분이 바로 name.cgi로 넘겨주는 쿼리 스트링(매개변수 목록)이랍니다. 이렇게 GET 방식은 쿼리 스트링을 이용해서 CGI 프로그램에 매개변수를 전달합니다. 내용을 숨기지 않아도 되는 간단한 데이터를 넘겨줄 때 편리하게 사용되는 방식이지요.
다른 방법으로 POST라는 방식도 있는데, 폼을 만들 때 <form method=post action="cgi-bin/name.cgi">와 같이 써주면 됩니다. 폼을 POST 방식으로 고쳐서 name.htm을 reload(새로 고침)해서 테스트해보세요. 이번에는 주소창에 쿼리 스트링이 보이지 않죠?
POST 방식을 쓰면 이렇게 매개 변수의 내용이 보이지 않구요, 많은 양의 데이터를 전달할 수 있다고 합니다. 로그인이나 파일 업로드, 게시판 작성 같은 용도에 POST 방식을 사용하면 좋겠죠?