다음은 hello.py라는 이름의 CGI 스크립트에 연결되는 간단한 링크입니다. 이 파일은 /var/www/cgi-bin 디렉터리에 저장되며, 내용은 아래와 같습니다. CGI 프로그램을 실행하기 전에 반드시 UNIX의 chmod 755 hello.py 명령어로 파일 권한을 변경하여 실행 가능한 상태로 만들어야 합니다.
예제 코드
#!/usr/bin/python print "Content-type:text/html\r\n\r\n" print '<html>' print '<head>' print '<title>Hello Word - First CGI Program</title>' print '</head>' print '<body>' print '<h2>Hello Word! This is my first CGI program</h2>' print '</body>' print '</html>'
실행 결과
hello.py를 클릭하면 다음과 같은 결과가 출력됩니다.
Hello Word! This is my first CGI program
이 hello.py 스크립트는 출력 결과를 STDOUT, 즉 화면에 기록하는 아주 간단한 파이썬 스크립트입니다. 하지만 한 가지 중요하고 특별한 요소가 숨어 있는데, 바로 가장 먼저 출력되는 Content-type:text/html\r\n\r\n이라는 줄입니다. 이 줄은 브라우저로 전송되며, 브라우저 화면에 어떤 유형의 콘텐츠를 표시해야 하는지 지정하는 역할을 합니다.
여기까지 읽었다면 CGI의 기본 개념은 이미 잡힌 것입니다. 이제 파이썬을 활용해 훨씬 복잡한 CGI 프로그램도 충분히 작성할 수 있습니다. 또한 이러한 스크립트는 RDBMS처럼 외부 시스템과 연동하여 정보를 주고받는 데에도 활용할 수 있습니다.
HTTP 헤더란?
앞서 살펴본 Content-type:text/html\r\n\r\n 줄은 브라우저가 콘텐츠를 올바르게 이해하도록 돕는 HTTP 헤더의 일부입니다. 모든 HTTP 헤더는 다음과 같은 형식을 따릅니다.
HTTP 필드 이름: 필드 내용
예제
Content-type: text/html\r\n\r\n
CGI 프로그래밍에서 자주 사용하게 되는 그 밖의 중요한 HTTP 헤더들을 아래 표에서 확인할 수 있습니다.
| 번호 | 헤더 및 설명 |
|---|---|
| 1 | Content-type: 반환되는 파일의 형식을 정의하는 MIME 문자열입니다. 예: Content-type:text/html |
| 2 | Expires: Date 정보가 무효화되는 날짜입니다. 브라우저가 페이지를 언제 새로 고침해야 할지 판단하는 데 사용됩니다. 유효한 날짜 형식은 01 Jan 1998 12:00:00 GMT와 같습니다. |
| 3 | Location: URL 요청된 URL 대신 반환되는 URL입니다. 이 필드를 사용하면 요청을 원하는 다른 파일로 리디렉션할 수 있습니다. |
| 4 | Last-modified: Date 해당 리소스가 마지막으로 수정된 날짜를 나타냅니다. |
| 5 | Content-length: N 반환되는 데이터의 길이(바이트 단위)입니다. 브라우저는 이 값을 참고하여 파일의 예상 다운로드 시간을 표시합니다. |
| 6 | Set-Cookie: String string에 담긴 정보를 통해 쿠키를 설정합니다. |