공용 게이트웨이 인터페이스: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
잔글 로봇이 더함: uk:CGI
Whisperlip (토론 | 기여)
편집 요약 없음
1번째 줄:
'''Common Gateway Interface''' ('''CGI''')는, [[Web서버|웹서버]]상에서 유저 [[프로그램(컴퓨터)]]를 동작시키기 위한 조합. 존재하는 많은 웹서버 프로그램은 CGI의 기능을 이용할 수가 있다.
'''공용 게이트웨이 인터페이스'''({{lang|en|common gateway interface}},CGI)는 웹서버에서 유저인터페이스를 동작시키기 위한 표준화된 방법을 말한다.
CGI를 이용하는 프로그램의 언어는 [[C (프로그래밍 언어)|C]]나 [[펄]]을 주로 사용해 왔고 최근에는 [[PHP]]나 [[파이썬]], [[루비 (프로그래밍 언어)|루비]]등도 쓰고 있다.
 
웹서버 프로그램의 기능의 주체는 미리 준비된 정보를 이용자([[클라이언트]])의 요구에 응답해 보내는 것이다.그 때문에 서버 프로그램 단체(単体)에서는 정보를 그 장소에서 동적으로 생성하고 클라이언트에 송신하려하는 조합을 작성하는 것이 불가능했다.
게시판이나 접속자 카운더, Wiki나 [[블로그]] 시스템을 만드는 목적으로 CGI를 쓰는 경우가 있다. 이 경우 이용자가 글을 쓰거나 접속함에 따라 게시내용이 계속해서 달라지기때문에 CGI와 같은 기술을 필요로 한다. 하지만 지금은 CGI이외의 기술로도 가능하게 되었다.
서버 프로그램에서 다른 프로그램을 불러내고, 그 처리 결과를 클라이언트에 송신하는 방법이 고안되었다.
그것을 실현하기 위한 서버 프로그램과 외부 프로그램과의 연계법을 정한것이 '''CGI'''이다.
 
CGI는 환경변수나 표준입출력을 다룰수 있는 [[프로그램 언어]]에서라면 언어의 구별을 문지 않고 확장하여 이용하는 것이 가능하나, 실행속도나 텍스트 처리의 용이함 등의 균형에 의해 [[Perl]]이 사용되는 경우가 많았다.
최근에는, Perl에 더해져 [[Python]], [[Ruby]]등도 널리 사용되고 있다.
 
대표적인 어플리케이션에는 [[전자게시판]], [[엑세스카운터]], [[위키|Wiki]]나 [[블로그|Blog]]시스템 등이 있다.
 
근래에는, Web서버의 프로세스로서 인터프리터를 상주시킴으로서, CGI부터 프로그램을 호출해 오버헤드를 감소시켜, 퍼포먼스를 향상시킨[[Java Servlet]]나 [[mod_perl]], [[mod_php]], [[FastCGI]] 등도 출현하고 있다.
 
== CGI에 관한 자주 있는 오해 ==
이름에서 알 수 있듯이,CGI는 어디까지나 인터페이스이며, 특정 플랫폼에 의존하지 않고, 웹서버 등으로부터 외부 프로그램을 호출하는 조합을 가르킨다.
 
그 때문에, 그 조합을 사용하여 기동되는 프로그램 본체를 CGI로 호칭하는 것은 잘못된 것이다. 또, [[1990년대]]후반의 CGI를 사용한 프로그램은[[Perl]]이 대부분인 이유로,「CGI와 Perl 또는 그것에 속하는(그런 종류의) 특정 언어이다.」라고 하는 인식도 넓게 존재하나, 이것도 잘못된 것이다.
 
== 사양 ==
CGI의 사양은[[NCSA]]에 의해 최초로 정의([[NCSA HTTPd]]에 있어)되어, 현재의 최신판은 CGI1.1이다.
<ref>http://hoohoo.ncsa.uiuc.edu/cgi/interface.html</ref>。2004년에[[Request for Comments|RFC]] 3875이 되었다.
<ref>http://www.ietf.org/rfc/rfc3875.txt</ref>。
 
CGI는, 전형적으로는 아래와 같은 동작이 기대된다. CGI를 경유해 실행되는 프로그램을, '''CGI프로그램'''이라고 부른다.
 
*CGI프로그램은 퀩서버가 클라이언트로부터 리퀘스트에 응답해 동작한다.
*:전형적으로는, 웹서버의 공개영역에 설치된 프로그램에 대응하는 [[Uniform Resource Identifier|URI]]으로 리퀘스트가 있으면, 서버는 그 프로그램을 CGI의 결정에 따라 호출한다.
* CGI프로그램으로의 정보 입력은 커맨드라인 [[인수]], [[환경변수]], [[표준입력]]에 의해 이루어진다.
**웹서버가 프로그램을 호출하는 시점에서 얼마의 환경변수를 정의하는 것이 결정된다.
**특히, 클라이언트가 서버에 요구한 URI의 안, 검색문자열(Query String)이 환경변수 QUERY_STRING 에 설정되기 때문에, 그것은 [[HyperText Markup Language|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헤더]]로 시작하지 않으면 안된다.
*단, 몇개의 특별한 헤더 필드는「서버 [[디렉티브]]」로서 해석되어, 웹서버의 거동(스테이터스 코드 등)에 환경을 부여한다. 이것 이외의 모든 헤더 필드는 그 상태 그대로 클라이언트에 송신된다.
*현재의[[World Wide Web|WWW]]에서는 HTML가 중심적인 역할을 하고 있어, CGI프로그램은 HTML을 출력하는 케이스가 압도적으로 많다.
**영상 데이터 등을 출력하는 것도 있다.(이것은 [[엑세스 카운터]]등을 조작할 때에 사용된다.
 
<references/>
 
== 바깥고리 ==
* The [http://www.w3.org/CGI/ CGI standard] at w3.org.
* The [http://hoohoo.ncsa.uiuc.edu/cgi/ CGI/1.1 specification].
* [http://hoohoo.ncsa.uiuc.edu/cgi/interface.html The CGI Specification]
* [http://www.ietf.org/rfc/rfc3875.txt RFC3875 The Common Gateway Interface (CGI) Version 1.1]
* [http://www.ietf.org/rfc/rfc1630.txt RFC1630 Universal Resource Identifiers in WWW]
* [http://www.ietf.org/rfc/rfc2616.txt RFC2616 Hypertext Transfer Protocol -- HTTP/1.1]
 
{{토막글|컴퓨터}}
줄 26 ⟶ 65:
[[is:Common Gateway Interface]]
[[it:Common Gateway Interface]]
[[ko:공용 게이트웨이 인터페이스]]
[[ja:Common Gateway Interface]]
[[lt:CGI]]
[[nl:Common Gateway Interface]]
줄 36 ⟶ 75:
[[sl:Common Gateway Interface]]
[[sv:Common Gateway Interface]]
[[uk:CGI]]
[[zh:通用网关接口]]