맨위로가기

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

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

공용 게이트웨이 인터페이스(CGI)는 웹 서버가 외부 프로그램을 실행하기 위한 표준 인터페이스이다. 1993년 NCSA에서 처음 정의되었으며, 웹 서버가 데이터베이스와 같은 레거시 시스템에 연결될 수 있도록 게이트웨이 역할을 했다. CGI는 웹 서버가 클라이언트 요청에 응답하여 프로그램을 실행하고, 그 결과를 클라이언트에 전송하는 방식으로 동작한다. 각 HTTP 요청마다 새로운 프로세스를 생성하는 오버헤드를 줄이기 위해 FastCGI, WSGI 등의 대안 기술이 개발되었다. CGI는 인터페이스일 뿐 특정 언어나 플랫폼에 의존하지 않으며, 웹 애플리케이션의 용도와 보안에 대한 고려가 필요하다.

더 읽어볼만한 페이지

  • 웹 기술 - FastCGI
    FastCGI는 웹 서버와 외부 애플리케이션 간 효율적인 통신을 위한 프로토콜로, CGI의 단점을 보완하여 지속적인 프로세스를 통해 웹 애플리케이션의 성능과 안정성을 향상시킨다.
  • 웹 기술 - WebAuthn
    WebAuthn은 웹 인증 워킹 그룹에서 개발한 웹 인증 표준으로, 기존 비밀번호 인증의 취약점을 해결하고 피싱 공격 등을 방지하며, FIDO2의 일부로서 웹사이트와 사용자 인증 장치 간 안전한 인증을 제공하지만, 일부 암호화 방식의 보안 취약점과 표준 개발 방식에 대한 비판도 있다.
  • 웹 1.0 - 전화 접속
    전화 접속은 공중 교환 전화망을 통해 모뎀과 전화선으로 인터넷에 연결하는 방식으로, 1980년대부터 사용되었으나 광대역 인터넷의 등장으로 2000년대 이후 사용이 줄어 현재는 제한적으로 사용되며 사라지는 추세이다.
  • 웹 1.0 - 자바 애플릿
    자바 애플릿은 웹 페이지에서 실행되는 자바 기반 프로그램으로, 웹 상호작용성을 높였으나 기술적 문제와 웹 표준 기술 발전에 따라 쇠퇴하여 사용이 중단되었다.
  • 서버 - 슈퍼 서버
    슈퍼 서버는 TCP 래퍼를 통해 접근 권한을 확인하고 필요에 따라 다른 서버 프로그램을 시작하여 메모리 사용량 감소 및 시스템 관리 효율성을 높이지만, 높은 연결 요청 빈도에서는 성능 저하를 유발할 수 있으며, inetd, launchd, systemd, ucspi-tcp, xinetd 등이 대표적인 구현체이다.
  • 서버 - 씨마이크로
    씨마이크로는 2007년 설립되어 투자 유치 후 AMD에 인수된 서버 개발 회사로, SM10000, SM15000 시리즈 등의 제품을 개발하고 버라이즌과의 협력 및 여러 수상 경력을 보유하고 있다.
공용 게이트웨이 인터페이스

2. 역사

공용 게이트웨이 인터페이스(CGI)는 1993년 국립 슈퍼컴퓨팅 응용 센터(NCSA) 팀이 www-talk 메일링 리스트를 통해 웹 서버가 외부 프로그램을 실행하기 위한 초기 사양을 제안하면서 시작되었다.[1][2][3] 이 방식은 다른 웹 서버 개발자들에게 받아들여져 웹 서버의 표준 기능 중 하나로 자리 잡았다.

1997년 11월, 켄 코어가 주도하는 워크 그룹이 CGI의 NCSA 정의를 공식적으로 확립하기 위한 작업을 시작했으며,[4] 이 노력은 CGI 버전 1.1을 기술하는 RFC 3875의 제정으로 이어졌다.

한국에서는 1990년대 후반부터 CGI 기술이 도입되어 웹사이트 개발에 널리 활용되기 시작했다. 특히 펄(Perl) 언어를 이용한 CGI 프로그래밍이 당시 개발자들 사이에서 높은 인기를 얻었다.

2. 1. 초기 역사와 한국의 웹 발전

1993년, 국립 슈퍼컴퓨팅 응용 센터(NCSA) 팀은 www-talk 메일링 리스트를 통해 웹 서버가 외부 프로그램을 실행하기 위한 사양을 처음 제안했다.[1][2][3] 이 방식은 다른 웹 서버 개발자들에게 빠르게 받아들여져 웹 서버의 표준 기능으로 자리 잡았다. 이후 CGI 규격을 보다 공식적으로 정의하기 위한 노력이 이어졌다. 1997년 11월, 켄 코어가 의장을 맡은 실무 그룹은 NCSA의 CGI 정의를 바탕으로 표준화 작업을 시작했다.[4] 이 작업의 결과물은 CGI 버전 1.1을 정의하는 RFC 3875로 발표되었다. RFC 3875는 다음과 같은 인물들의 기여를 명시하고 있다.

CGI라는 이름은 웹의 초기 시절, 웹 서버를 데이터베이스와 같은 기존 정보 시스템에 연결하려는 시도에서 유래했다. 당시 CGI 프로그램은 웹 서버와 이러한 외부 시스템 사이의 통로, 즉 "게이트웨이" 역할을 수행하며 데이터를 주고받았다.

역사적으로 CGI 프로그램은 종종 C 프로그래밍 언어를 사용하여 작성되었다. RFC 3875 "공용 게이트웨이 인터페이스(CGI)"는 환경 변수가 "C 라이브러리 루틴 getenv() 또는 변수 environ에 의해 접근된다"고 언급하며 C 언어와의 관련성을 보여준다.

3. 사양

1993년 NCSA 팀은 www-talk 메일링 리스트를 통해 명령 줄 실행 파일을 호출하는 방식에 대한 사양을 처음 작성했다.[12][1][2][3] 비록 NCSA는 더 이상 이 초기 사양을 호스팅하지 않지만,[13][14] 다른 웹 서버 개발자들이 이를 채택하면서 CGI는 웹 서버의 표준적인 기능으로 자리 잡게 되었다.

1997년 11월, 켄 코어(Ken Coar)가 주도하는 워크 그룹은 NCSA의 CGI 정의를 보다 공식적으로 확립하기 위한 작업을 시작했다.[15][4] 이 노력의 결과로 2004년 RFC 3875 사양이 탄생했으며, 이는 CGI 버전 1.1을 기술한다.[16][17] RFC 3875는 다음과 같은 인물들의 기여를 명시적으로 언급하고 있다:

이름소속/역할
롭 맥쿨NCSA HTTPd 웹 서버 작성자
존 프랭크스GN 웹 서버 작성자
아리 루오토넨CERN httpd 웹 서버 개발자
토니 샌더스Plexus 웹 서버 작성자
조지 필립스브리티시컬럼비아 대학교 웹 서버 관리자



역사적으로 CGI 프로그램은 C 프로그래밍 언어로 작성되는 경우가 많았다. RFC 3875 "공용 게이트웨이 인터페이스(CGI)"는 환경 변수가 "C 라이브러리 루틴 getenv() 또는 변수 environ에 의해 접근된다"고 언급하며 C 언어를 사용한 구현을 일부 예시하고 있다.

CGI라는 이름은 웹 초창기에 웹마스터들이 데이터베이스와 같은 기존 정보 시스템을 웹 서버에 연결하고자 했던 시도에서 유래했다. CGI 프로그램은 웹 서버와 이러한 기존 시스템 사이의 공통적인 게이트웨이 역할을 수행하도록 설계되었다.

CGI 사양은 빠르게 채택되어 아파치, 마이크로소프트 IIS 등 널리 사용되는 대부분의 HTTP 서버에서 계속 지원되고 있다. CGI는 웹 서버가 동적인 웹 페이지를 생성하기 위해 외부 프로그램을 실행하고 그 결과를 클라이언트에게 전달하는 표준화된 방법을 제공한다.

3. 1. CGI 프로그램의 동작 방식

CGI 프로그램은 웹 서버클라이언트의 요청에 응답하여 실행하는 프로그램이다. 일반적으로 웹 서버의 특정 영역에 설치된 프로그램에 해당하는 URI로 요청이 들어오면, 서버는 해당 프로그램을 CGI 규격에 따라 호출한다.[16][17]

CGI 프로그램으로 정보를 전달하는 방법은 크게 세 가지이다: 명령줄 인수, 환경 변수, 표준 입력.

  • 환경 변수: 웹 서버는 CGI 프로그램을 호출할 때 여러 환경 변수를 정의한다.
  • 클라이언트가 요청한 URI의 쿼리 문자열(Query String) 부분은 QUERY_STRING 환경 변수에 저장된다. 이는 HTML 폼에서 GET 메서드를 통해 전달된 데이터를 처리할 때 유용하다.
  • 만약 QUERY_STRING에 등호(=) 문자가 포함되어 있지 않다면, 서버는 QUERY_STRING의 내용을 명령줄 인수로 CGI 프로그램에 전달할 수도 있다. 이는 과거 HTMLISINDEX 요소를 처리하기 위한 방식이었다.
  • 클라이언트가 보낸 HTTP 요청의 본문(body) 데이터는 CGI 프로그램의 표준 입력으로 전달된다. 이때 데이터의 길이는 CONTENT_LENGTH 환경 변수에 저장된다. 이는 HTML 폼에서 POST 메서드를 통해 전달된 데이터를 처리할 때 주로 사용된다.
  • 요청된 URI에서 CGI 프로그램 경로 뒤에 추가적인 경로 정보가 붙는 경우, 이 추가 경로는 PATH_INFO 환경 변수에 저장된다. 그리고 이 가상 경로(PATH_INFO)에 해당하는 실제 서버 상의 물리적 경로는 PATH_TRANSLATED 환경 변수에 저장된다. 이 방식 역시 사용자로부터 CGI 프로그램에 정보를 전달하는 데 사용될 수 있다.
  • 표준 입력: 위에서 언급했듯이, 주로 POST 방식으로 전송된 데이터가 표준 입력을 통해 CGI 프로그램에 전달된다.
  • 명령줄 인수: QUERY_STRING=가 없는 경우 등 특정 상황에서 사용될 수 있다.


CGI 프로그램이 처리 결과를 클라이언트에 보내려면 표준 출력을 사용해야 한다. 프로그램이 표준 출력으로 내보내는 데이터는 웹 서버를 거쳐 클라이언트에게 전달된다. 이 데이터는 반드시 유효한 HTTP 헤더로 시작해야 한다.[16][17]

일부 특별한 헤더 필드는 웹 서버에 대한 지시어(Server Directive)로 해석되어, 서버의 상태 코드 설정 등 동작에 영향을 줄 수 있다. 그 외의 모든 헤더 필드는 그대로 클라이언트에게 전송된다.

현재 환경에서는 HTML이 중심적인 역할을 하므로, CGI 프로그램은 주로 동적인 HTML 페이지를 생성하여 출력하는 경우가 많다. 하지만 필요에 따라 이미지 데이터 등을 생성하여 출력하는 경우도 있는데, 예를 들어 웹 페이지 방문 횟수를 보여주는 액세스 카운터 같은 곳에 활용될 수 있다.[16][17]

4. 배포

웹 서버CGI를 지원하도록 설정될 수 있으며, 특정 URL을 CGI 스크립트에 대한 참조로 해석한다. 일반적인 관례 중 하나는 웹 서버의 디렉토리 구조 내에 `cgi-bin/`이라는 특정 디렉토리를 두는 것이다. 이 디렉토리 안에 있는 실행 파일들은 웹 서버에 의해 CGI 스크립트로 취급된다. 예를 들어, 웹 브라우저가 `cgi-bin/` 디렉토리 내의 파일을 가리키는 URL(예: `http://example.com/cgi-bin/printenv.pl/with/additional/path?and=a&query=string`)을 요청하면, HTTP 서버는 해당 파일을 단순히 전송하는 대신 지정된 스크립트를 실행하고 그 결과를 웹 브라우저로 전달한다. 즉, 스크립트가 표준 출력으로 보내는 모든 내용은 웹 클라이언트로 전달된다.[6]

또 다른 일반적인 관례는 특정 파일 확장자를 사용하는 것이다. 예를 들어, CGI 스크립트에 일관되게 `.cgi` 확장자를 부여하면, 웹 서버는 이 확장자를 가진 모든 파일을 CGI 스크립트로 해석하도록 구성할 수 있다. 이는 편리하며 많은 기존 스크립트에서 요구되지만, 만약 원격 사용자가 적절한 확장자를 가진 실행 가능한 코드를 서버에 업로드할 수 있다면 보안상 취약점이 될 수 있다.[6]

CGI 사양은 웹 서버가 스크립트에 추가 정보를 전달하는 방법을 정의한다. 웹 서버는 요청과 관련된 HTTP 환경 정보를 포함한 환경 변수를 생성하여 스크립트에 전달한다. 예를 들어, URL 경로에서 스크립트 이름 뒤에 추가 경로 정보(예: `/with/additional/path`)가 오면, 이 정보는 `PATH_INFO` 환경 변수에 저장된다. HTTP GET 요청을 통해 URL의 물음표 뒤에 매개변수(예: `?and=a&query=string`)가 전달되면, 이 매개변수들은 `QUERY_STRING` 환경 변수에 저장된다. HTTP POST 요청과 같이 HTTP 메시지 본문을 통해 데이터가 전송되는 경우, 이 데이터는 스크립트의 표준 입력으로 전달된다. 스크립트는 이러한 환경 변수나 표준 입력의 데이터를 읽어 웹 브라우저의 요청에 맞게 동작할 수 있다.[6]

5. 용도

CGI는 사용자로부터 입력받은 정보를 처리하고 그에 맞는 적절한 결과물을 만드는 데 자주 사용된다. 초창기 CGI 스크립트의 주요 사용 사례 중 하나는 HTML 폼을 처리하는 것이었다. 당시 HTML 폼에는 일반적으로 "action" 속성과 "submit" 버튼이 있었는데, 사용자가 제출 버튼을 누르면 "action" 속성에 지정된 URI로 폼 데이터가 쿼리 문자열 형태로 서버에 전송되었다. 만약 "action" 속성에 CGI 스크립트가 지정되어 있다면, 해당 스크립트가 실행되어 결과적으로 새로운 HTML 페이지를 생성했다.

CGI 프로그램의 구체적인 예시로는 위키 시스템 구현을 들 수 있다. 사용자가 특정 위키 항목의 이름을 요청하면, 웹 서버는 해당 요청을 받아 CGI 프로그램을 실행시킨다. CGI 프로그램은 요청된 항목의 페이지 원본 데이터(소스)를 찾아 HTML 형식으로 변환한 뒤 결과를 출력한다. 웹 서버는 이 출력 결과를 받아 사용자에게 다시 전송한다. 사용자가 페이지 편집 버튼을 클릭하면, CGI 프로그램은 해당 페이지의 내용을 담은 HTML 텍스트 영역(textarea)이나 다른 편집용 컨트롤을 화면에 표시한다. 마지막으로 사용자가 페이지 게시 버튼을 클릭하면, CGI 프로그램은 수정된 내용을 다시 해당 항목 페이지의 원본 데이터 형식으로 변환하여 저장하는 방식으로 작동한다.

6. 보안

CGI 프로그램은 기본적으로 웹 서버의 보안 컨텍스트에서 실행된다. 초기 CGI가 도입될 때, NCSA, 아파치, CERN 웹 서버 등의 참조 배포판에는 쉘 스크립트나 C 프로그램을 이용해 CGI를 활용하는 방법을 보여주는 여러 예제 스크립트가 포함되어 있었다. 그중 하나가 간단한 전화번호부 기능을 구현한 PHF라는 CGI 프로그램이었다.

당시 다른 여러 스크립트처럼 PHF 스크립트도 사용자 입력을 검증하고 이를 유닉스 쉘에 전달하기 위해 `escape_shell_cmd()` 함수를 사용했다. 이 함수는 웹 서버의 보안 컨텍스트에서 명령이 실행되도록 설계되었으나, 모든 사용자 입력을 올바르게 검증하지 못하는 취약점이 있었다. 공격자는 입력값에 새 줄 문자를 삽입하는 방식으로 여러 개의 쉘 명령을 실행할 수 있었고, 그 결과는 웹 서버를 통해 그대로 노출되었다. 웹 서버가 가진 권한 내에서 악의적인 명령 실행이 가능했던 것이다.

이 사건은 검증되지 않은 웹 사용자 데이터가 웹 서버에서 코드 실행으로 이어질 수 있음을 보여준 최초의 광범위한 코드 삽입 공격 사례였다. 문제가 된 예제 코드가 기본적으로 설치되는 경우가 많았기 때문에 공격은 광범위하게 이루어졌고, 1996년 초에는 여러 관련 보안 권고가 발표되었다.[7] 이러한 CGI 보안 취약점은 한국에서도 초기 웹 해킹의 주요 원인 중 하나로 지적되었으며, 이에 대한 주의와 대응이 중요하게 요구되었다.

7. CGI 이외의 대안

CGIHTTP 요청이 들어올 때마다 새로운 프로세스를 생성하고 요청 처리가 끝나면 파괴하는 방식으로 동작한다. 이 과정, 특히 프로세스를 생성하고 파괴하는 작업은 상당한 계산 오버헤드를 유발하며, 이는 웹 서버의 성능에 부담을 줄 수 있다. 특히 인터프리터 언어로 작성된 스크립트의 경우나 HTTP 요청 수가 많을 때 이 문제는 더욱 심화되어 웹 서버를 빠르게 압도할 수 있다.[5]

이러한 CGI의 비효율성을 개선하기 위해, 각 요청마다 프로세스를 새로 만드는 대신 더 효율적으로 동적 콘텐츠를 처리할 수 있는 다양한 대안 기술들이 개발되었다. 이러한 기술들은 웹 서버의 부하를 줄이고 응답 속도를 향상시키는 것을 목표로 한다. 구체적인 대안 기술들에 대해서는 이어지는 하위 섹션들에서 자세히 설명한다.

7. 1. 웹 서버 확장

CGI 스크립트는 각 HTTP 요청마다 새로운 프로세스를 생성하고 요청 처리 후 파괴하는 방식으로 동작한다. 이 과정에서 발생하는 계산 오버헤드, 특히 프로세스 생성 및 파괴에 드는 비용은 웹 서버에 상당한 부담을 줄 수 있다. 이러한 오버헤드를 줄이기 위한 여러 기술 중 하나가 웹 서버 확장이다.

웹 서버 확장은 웹 서버 자체의 기능을 확장하여 동적 콘텐츠 생성을 서버 내부에서 처리하도록 하는 방식이다. 대표적인 예시는 다음과 같다.

  • 아파치 웹 서버의 모듈: `mod_perl`, `mod_php`, `mod_python`과 같은 모듈을 사용하여 각각 , PHP, 파이썬 스크립트를 아파치 프로세스 내에서 직접 실행할 수 있다.
  • NSAPI 플러그인: 과거 넷스케이프 웹 서버에서 사용된 확장 인터페이스이다.
  • ISAPI 플러그인: 마이크로소프트IIS 웹 서버에서 사용하는 확장 인터페이스이다.


이러한 웹 서버 확장 기능들은 여러 요청을 효율적으로 처리하고, 웹 서버 내에서 애플리케이션 프로세스를 오랫동안 유지(장기 실행)할 수 있도록 하여 CGI 방식의 성능적 단점을 개선한다.[5]

7. 2. 외부 애플리케이션 프로세스

FastCGI, SCGI, AJP와 같은 방식은 CGI가 각 요청마다 새로운 프로세스를 생성하고 파괴하는 데 따르는 계산 오버헤드를 줄이기 위한 기술이다. 이 방식은 여러 HTTP 요청을 처리할 수 있는 장기 실행 애플리케이션 프로세스를 사용하며, 이 프로세스는 웹 서버와는 별도로 외부에서 호스팅된다.

각 애플리케이션 프로세스는 소켓을 통해 들어오는 요청을 감시한다. 웹 서버는 HTTP 요청을 받으면, 정적 콘텐츠는 직접 처리하고 동적 콘텐츠가 필요한 경우에만 FastCGI, SCGI, 또는 AJP와 같은 특정 프로토콜을 사용하여 해당 소켓으로 요청을 전달한다.

이러한 접근 방식은 웹 서버 확장 기능(예: mod_perl, mod_php)을 사용하는 방식보다 더 적은 수의 애플리케이션 프로세스를 필요로 하므로 메모리를 덜 소비하는 장점이 있다. 또한, 애플리케이션 프로그램을 웹 서버 확장 기능으로 변환해야 하는 것과 달리, FastCGI, SCGI, AJP를 사용하는 애플리케이션 프로그램은 웹 서버와 독립적으로 유지될 수 있다.

7. 3. 기타 대안

CGI는 각 요청마다 새로운 프로세스를 생성하고 파괴하기 때문에 계산 오버헤드가 발생할 수 있다. 특히 , PHP, 파이썬과 같이 인터프리터로 실행되는 경우 이 오버헤드는 더욱 커질 수 있다. 이러한 성능 문제를 해결하고 개선하기 위해 다양한 대안 기술들이 개발되었다.

  • 미리 컴파일된 프로그램: CC++처럼 기계어로 미리 컴파일된 프로그램을 사용하면 인터프리터를 사용하는 스크립트보다 빠르게 실행될 수 있다.
  • 웹 서버 확장: 아파치의 모듈(예: `mod_perl`, `mod_php`, `mod_python`)이나 NSAPI, ISAPI 플러그인처럼 웹 서버 내에서 직접 코드를 실행하여 프로세스 생성 오버헤드를 줄인다. 이 방식은 여러 요청을 처리하는 장기 실행 애플리케이션 프로세스를 허용한다.
  • 장기 실행 외부 프로세스: FastCGI, SCGI, AJP와 같은 기술은 웹 서버 외부에 별도의 애플리케이션 프로세스를 두고 여러 요청을 처리하게 한다. 웹 서버는 정적 콘텐츠는 직접 처리하고, 동적 콘텐츠 요청만 이 외부 프로세스에 전달한다. 이 방식은 웹 서버 확장 방식보다 메모리를 적게 사용하고 웹 서버와 애플리케이션을 분리할 수 있다는 장점이 있다.
  • 자카르타 EE: 웹 컨테이너에서 서블릿 애플리케이션을 실행하여, 프로세스 생성/파괴 대신 훨씬 가벼운 스레드 생성/파괴 오버헤드로 동적 콘텐츠를 처리한다. Java SE 라이브러리 활용도 가능하다.
  • 독립형 HTTP 서버: 애플리케이션 자체에 HTTP 서버 기능을 내장하는 방식이다.
  • 언어별 게이트웨이 인터페이스: 웹 서버와 특정 프로그래밍 언어로 작성된 애플리케이션 간의 통신을 위한 표준화된 방법을 제공한다.
  • WSGI (Web Server Gateway Interface): 파이썬을 위한 표준 인터페이스로, PEP 3333[8]에 정의되어 있다. `mod_wsgi` (아파치 모듈), Gunicorn, uWSGI 등 다양한 구현체가 있다.
  • PSGI: 펄을 위한 인터페이스이다.
  • 이 외에도 PHP의 `mod_php` 등 언어 인터프리터를 웹 서버에 통합하는 방식이 널리 사용된다.


최근에는 위와 같은 인터페이스 및 구현 방식이 일반화되면서, 일부 최신 웹 서버는 CGI를 직접 지원하지 않고 FastCGI 등을 통해 간접적으로 지원하기도 한다.

또한, 웹 프레임워크는 사용자 에이전트와 상호 작용하기 위해 CGI 스크립트를 사용하는 대신 웹 애플리케이션을 개발하는 구조화된 방법을 제공하며 CGI의 대안으로 널리 사용된다.

어떤 방식을 선택하는 것이 최적인지는 애플리케이션의 특성, 예상되는 트래픽 양, 트랜잭션의 복잡성 등을 종합적으로 분석하여 주어진 작업 및 시간 예산에 맞춰 결정해야 한다.

8. CGI에 관한 오해

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

그러므로 그 조합을 사용하여 실행되는 프로그램 본체를 CGI라고 부르는 것은 잘못된 것이다. 또한, 1990년대 후반 CGI를 사용한 프로그램은 (Perl)이 대부분이었기 때문에 CGI와 펄, 또는 특정 프로그래밍 언어를 동일시하는 인식도 널리 퍼져 있으나, 이것도 잘못된 인식이다.

참조

[1] 간행물 Server Scripts http://1997.webhisto[...] 2019-05-15
[2] 웹사이트 The Common Gateway Interface http://hoohoo.ncsa.u[...] National Center for Supercomputing Applications (NCSA)
[3] 웹사이트 CGI: Common Gateway Interface http://www.w3.org/CG[...] World Wide Web Consortium 2019-05-15
[4] 웹사이트 Common Gateway Interface RFC Project Page http://ken.coar.org/[...]
[5] 웹사이트 Mapping URLs to Filesystem Locations Apache HTTP Server Version 2.2 http://httpd.apache.[...] 2014-07-16
[6] 서적 Building Electronic Commerce with Web Database Constructions Addison Wesley
[7] 웹사이트 phf CGI Script fails to guard against newline characters https://www.kb.cert.[...] 2019-11-21
[8] 웹사이트 PEP 3333 – Python Web Server Gateway Interface v1.0.1 https://peps.python.[...] 2024-04-05
[9] 문서 CGI 【Common Gateway Interface】 https://e-words.jp/w[...]
[10] 문서 CGI https://xtech.nikkei[...]
[11] 문서 CGIプログラミング(1) http://www.rsch.tuis[...]
[12] 문서 Server Scripts http://1997.webhisto[...]
[13] 인용 The Common Gateway Interface http://hoohoo.ncsa.u[...]
[14] 문서 CGI: Common Gateway Interface http://www.w3.org/CG[...]
[15] 웹인용 Common Gateway Interface RFC Project Page http://ken.coar.org/[...]
[16] 웹인용 보관된 사본 http://hoohoo.ncsa.u[...] 2007-08-09
[17] 웹인용 보관된 사본 http://www.ietf.org/[...] 2009-07-16



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com