Hyun Chul's Utopia

CGI 간략한 소개 본문

프로그래밍/CGI

CGI 간략한 소개

디프시다루핀 2013. 2. 6. 16:58

해당 문서는 아래의 사이트를 바탕으로 작성되었음을 알려드립니다.

http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/cgi

http://en.wikipedia.org/wiki/Common_Gateway_Interface

 CGI는 Common Gateway Interface의 줄임말이다. CGI프로그램은 웹서버에 의해서 모듈 혹은 프로그램 형태로 실행되며, 데이터베이스에 연결해서 데이터를 읽어와 웹페이지로 출력하거나, 데이터를 저장하는 등의 일을 수행할 수 있다. 중간에 데이터를 중계하는 특징 때문에 Gateway라는 이름이 붙었다.


 CGI는 환경변수나 표준입출력을 다룰 수 있는 프로그램 언어에서라면 언어의 구별을 묻지 않고 확장하여 이용이 가능하다. 실행 속도나 텍스트처리의 용의 함 등 과거에는 펄이 많이 사용되었으나, 최근에는 파이썬, 루비, C등도 널리 쓰이고 있다.


 CGI는 어디까지나 인터페이스 이며, 특정 플랫폼에 의존하지 않고, 웹 서버 등으로 부터 외부 프로그램을 호출하는 조합을  가리킨다. 그러므로 그 조합을 사용하요 기동되는 프로그램 본체를 CGI로 호칭하는 것은 잘못된 것이다. (CGI는 인터페이스 이며, 라이브러니나 함수가 아니다.)


CGI를 이용할 수 있는 언어의 종류

- C/C++

- PHP

- Perl

- TCL

- Python

- Ruby

- 모든 종류의 유닉스 Shell Script

- Visual Basic

- AppleScript


 웹서버에서 CGI프로그램은 fork()를 통해서 실행시키며 CGI에 데이터를 전달하기 위해서 표준 출력과 환경 변수를 사용하며, CGI프로그램으로 부터 데이터를 전달받기 위해서 표준입력을 사용한다.


 웹서버에서 CGI프로그램을 실행시킬 때는 여러가지 정보도 CGI프로그램에 전달한다. 전달 방식은 GET, POST방식이 대표적이며, GET방식의 데이터 요청에서 이루어진 URI값은 환경변수를 통해서 이루어 지고, POST방식은 표준입력을 통해서 CGI프로그램으로 넘어간다.


 GET방식의 경우 최대 4KB의 데이터를 전달할 수 있지만, POST방식의 경우 데이터의 양에 제한이 없다는 차이점이 있다.


 CGI 프로그램의 경우 새로운 프로세스 형태로 작동하기 때문에, 웹서버로부터 여러가지 정보를 받아올 수 있어야 한다. 이러한 정보들은 약속된 CGI환경변수를 통해서 읽어올 수 있다. 현재 CGI환경변수에는 아래의 항목들이 정의되어 있다.


DOCUMENT_ROOT              // 문서가 위치하는 루트 디렉토리

GATEWAY_INTERFACE        // 사용된 gateway 인터페이스 (이경우 CGI 1.1) 

HTTP_ACCEPT 

HTTP_REFERER                  // POST방식일 경우 요청한 페이지 이름

HTTP_ACCEPT_CHARSET 

HTTP_ACCEPT_LANGUAGE 

HTTP_CONNECTION            // 연결방식 (보통 Keep-Alive) 

HTTP_HOST                       // 웹서버의 IP와 PORT정보 

HTTP_USER_AGENT            // 연결에 사용한 브라우저 정보

PATH                                 // 실행파일 경로 

QUERY_STRING                  // 쿼리 문자열 

REMOTE_ADDR                  // 클라이언트 주소

REMOTE_HOST

REMOTE_PORT                  // 클라이언트 포트

REQUEST_METHOD            // 요청방법, 보통 GET이나 POST

REQUEST_URI                    // URI정보

SCRIPT_FILENAME 

SCRIPT_NAME                   // 실행한 CGI 프로그램 이름 

SERVER_ADMIN                 // 서버관리자 정보, 보통 email주소

SERVER_NAME                 // 서버이름, 보통 도메인이름

SERVER_PORT                  // 서비스 포트(80, 8080)

SERVER_PROTOCOL         // 서비스 프로토콜(HTTP1.0, HTTP1.1)

SERVER_SOFTWARE          // 서버 프로그램

TZ                                   // 타임존

'프로그래밍 > CGI' 카테고리의 다른 글

CGI 환경 구축하기  (1) 2013.02.06
Comments