공용 게이트웨이 인터페이스

위키백과, 우리 모두의 백과사전.
Ykhwong (토론 | 기여)님의 2015년 7월 28일 (화) 08:20 판 (→‎사양)

공용 게이트웨이 인터페이스(영어: Common Gateway Interface; CGI)는 웹 서버 상에서 사용자 프로그램을 동작시키기 위한 조합이다. 존재하는 많은 웹 서버 프로그램은 CGI의 기능을 이용할 수 있다.

웹 서버 프로그램의 기능의 주체는 미리 준비된 정보를 이용자(클라이언트)의 요구에 응답해 보내는 것이다.그 때문에 서버 프로그램 그룹에서는 정보를 그 장소에서 동적으로 생성하고 클라이언트에 송신하려하는 조합을 작성하는 것이 불가능했다. 서버 프로그램에서 다른 프로그램을 불러내고, 그 처리 결과를 클라이언트에 송신하는 방법이 고안되었다. 이를 실현하기 위한 서버 프로그램과 외부 프로그램과의 연계법을 정한 것이 CGI이다.

CGI는 환경변수나 표준입출력을 다룰 수 있는 프로그램 언어에서라면 언어의 구별을 묻지 않고 확장하여 이용하는 것이 가능하나, 실행속도나 텍스트 처리의 용이함 등의 균형에 의해 이 사용되는 경우가 많았다. 최근[언제?]에는 펄뿐 아니라 파이썬, 루비 등도 널리 쓰이고 있다.

대표적인 애플리케이션에는 전자게시판, 접속 카운터, 위키블로그 시스템 등이 있다.

근래[언제?]에는 웹 서버의 프로세스로서 인터프리터를 상주시킴으로써, CGI로부터 프로그램을 호출해 부하를 줄임으로써 성능을 개선한 자바 서블릿이나 mod perl, mod php, FastCGI 등도 공개되었다.

CGI에 관한 자주 있는 오해

이름에서 알 수 있듯이, CGI는 어디까지나 인터페이스이며, 특정 플랫폼에 의존하지 않고, 웹 서버 등으로부터 외부 프로그램을 호출하는 조합을 가리킨다.

그러므로 그 조합을 사용하여 기동되는 프로그램 본체를 CGI로 호칭하는 것은 잘못된 것이다. 또, 1990년대 후반의 CGI를 사용한 프로그램은 이 대부분인 까닭에 CGI와 펄, 또는 그것에 속하는 특정 언어라는 인식도 널리 퍼져 있으나, 이것도 잘못된 것이다..

사양

CGI의 사양은 NCSA에 의해 최초로 정의 (NCSA HTTPd에 있음) 되어, 현재의 최신판은 CGI1.1이다.[1] 2004년에RFC 3875이 되었다.[2]

CGI는 전형적으로는 아래와 같은 동작이 기대된다. CGI를 경유해 실행되는 프로그램을 CGI 프로그램이라고 부른다.

  • CGI 프로그램은 웹 서버가 클라이언트로부터 요청에 응답해 동작한다.
  • 전형적으로는 웹 서버의 공개 영역에 설치된 프로그램에 대응하는 URI으로 요청이 있으면, 서버는 그 프로그램을 CGI의 결정에 따라 호출한다.
  • CGI 프로그램으로의 정보 입력은 명령줄 인수, 환경변수, 표준입력에 의해 이루어진다.
    • 웹 서버가 프로그램을 호출하는 시점에서 얼마의 환경변수를 정의하는 것이 결정된다.
    • 특히, 클라이언트가 서버에 요구한 URI의 안, 검색문자열(Query String)이 환경변수 QUERY_STRING 에 설정되기 때문에, 그것은 HTML 폼에서 GET 메서드로 입력을 받는 것이 편리하다.
    • QUERY_STRING에 문자'='가 포함되어 있지 않은 경우에, 서버는 QUERY_STRING의 내용을 커맨드라인 인수로서 CGI 프로그램을 넘긴다. 이것은 HTML의 ISINDEX 요소를 이용하여 송신된 정보를 다루는데 편리하다.
    • 클라이언트에서의 HTTP요청 BODY부분은 CGI 프로그램 표준입력에 들어간다. 또, 그 입력의 길이가 환경변수 CONTENT_LENGTH에 설정되어 있다. 그것은 HTML 폼에서 POST메서드로 입력을 받는 것이 편리하다.
    • CGI 프로그램에 대응하는 가상 패스 후에, 더욱이 여분의 패스가 계속 이어진 경우 그 정보는 환경변수 PATH_INFO에 격납(格納)되어 PATH_INFO를 웹 서버의 가상 패스로 해석한 때에 대응해야 하는 물리 패스가 환경변수 PATH_TRANSLATED 에 격납된다. 이 방식도 CGI 프로그램에 사용자 측으로부터 변수를 전하는 목적에 자주 사용된다.
  • 프로그램이 표준입력에 출력된 데이터는 웹 서버를 경우한 클라이언트에 보내진다. 이 데이터는 정당한 HTTP헤더로 시작하지 않으면 안 된다.
  • 단, 몇 개의 특별한 헤더 필드는「서버 디렉티브」로 해석되어, 웹 서버의 거동 (상태 코드 등) 에 환경을 부여한다. 그 밖의 모든 헤더 필드는 그 상태 그대로 클라이언트에 송신된다.
  • 현재의 WWW에서는 HTML이 중심적인 역할을 하고 있어, CGI 프로그램은 HTML을 출력하는 경우가 압도적으로 많다.
    • 영상 데이터 등을 출력하는 것도 있다. (이것은 엑세스 카운터 등을 조작할 때에 사용된다.)

각주

바깥 고리