검수요청.png검수요청.png

"CGI"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(구조)
잔글
 
(사용자 2명의 중간 판 35개는 보이지 않습니다)
2번째 줄: 2번째 줄:
  
 
==개요==
 
==개요==
CGI는 Common GateWay Interface의 줄인말로 말 그대로 해석하면 외부 프로그램과 브라우저 사이의 일반적인 입출력 방법을 말한다. 즉, [[웹 브라우저]]와 외부 프로그램의 상호간의 정보를 주고 받는 역할을 하는 프로그램이다. 웹 서버 프로그램의 기능의 주체는 미리 준비된 정보를 [[클라이언트]](이용자)의 요구의 응답해 보내는 것이기 때문에 서버 프로그램 그룹에서는 정보를 그 장소에서 동적으로 생성하고 클라이언트에 송신하려는 조합을 작성하는 것이 불가능했다. 서버 프로그램에서 다른 프로그램을 불러내고, 그 처리 결과를 클라이언트에 송신하는 방법이 고안되었는데, 이를 실현하기 위한 [[서버]] 프로그램과 외부 프로그램과의 연계를 정한 것이 CGI다.<ref>〈[https://ko.wikipedia.org/wiki/%EA%B3%B5%EC%9A%A9_%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4 공용 게이트웨이 인터페이스]〉,《나무위키》</ref>
+
CGI는 'Common GateWay Interface'의 줄임말로 말 그대로 해석하면 외부 프로그램과 브라우저 사이의 일반적인 입출력 방법을 말한다. 즉, [[웹 브라우저]]와 외부 프로그램의 상호 간의 정보를 주고받는 역할을 하는 프로그램이다. 웹 서버 프로그램의 기능 주체는 미리 준비된 정보를 [[클라이언트]](이용자)의 요구 응답해 보내는 것이기 때문에 서버 프로그램 그룹에서는 정보를 그 장소에서 동적으로 생성하고 클라이언트에 송신하려는 조합을 작성하는 것이 불가능했다. 서버 프로그램에서 다른 프로그램을 불러내고, 그 처리 결과를 클라이언트에 송신하는 방법이 고안되었는데, 이를 실현하기 위한 [[서버]] 프로그램과 외부 프로그램과의 연계를 정한 것이 CGI다.<ref name="위키백과">〈[https://ko.wikipedia.org/wiki/%EA%B3%B5%EC%9A%A9_%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4 공용 게이트웨이 인터페이스]〉, 《위키백과》</ref>
 +
 
 +
==역사==
 +
1993년 NCSA팀은 www-talk 메일링 리스트의 명령줄 실행 파일을 호출하는 사양을 작성하였다. 하지만 NCSA는 더 이상 이 사양을 [[호스팅]](hosting)하지 않고 있다. 기타 웹 서버 개발자들이 이를 수용하여, 그 이후로 웹 서버의 표준으로 자리 잡고 있다. [[켄 코어]](Ken Coar)가 주도하는 워크 그룹이 1997년 11월 시작되어 CGI의 NCSA 정의가 공식적으로 확립되었다. 이를 통해 RFC 3875 사양이 탄생되었으며 이는 CGI 버전 1.1을 기술한다.<ref name="위키백과"></ref>  
  
 
==구조==
 
==구조==
보통 웹 브라우저 안에서나 [[HTML]]의 폼(form)을 통해 요청이 웹 서버로 전달되면, 웹 서버는 요청에 들어 있는 주소가 CGI프로그램에 대응되는지 확인한다. 대응되면 그 프로그램을 실행해서 환경 변수와 표준 입력의 형태로 요청을 전달한다. 웹 서버는CGI 프로그램이 표준 출력으로 돌려 보낸 내용을 그대로 응답으로 돌려준다.
+
보통 웹 브라우저 안에서나 [[HTML]]의 폼(form)을 통해 요청이 웹 서버로 전달되면, 웹 서버는 요청에 들어 있는 주소가 CGI프로그램에 대응되는지 확인한다. 대응되면 그 프로그램을 실행해서 환경 변수와 표준 입력의 형태로 요청을 전달한다. 웹 서버는 CGI 프로그램이 표준 출력으로 돌려보낸 내용을 그대로 응답으로 돌려준다. 좀 오래된 사이트에서 종종 '/CGI-bin/'으로 시작하는 주소를 볼 수 있는데, 웹 서버가 해당 [[디렉터리]]에 들어 있는 프로그램을 모두 다 CGI 프로그램으로 인식하게 되어 있는 경우이다. 요즘은 보안 문제 때문에 막무가내로 이런 식으로 하는 경우는 흔치 않고 웹 서버에서 설정할 수 있도록 해 놓는다. 2000년대 전후로 대한민국에도 [[인터넷 익스플로러]](internet explorer)를 통해 웹 브라우저로 접속이 가능해졌고, 개인 홈페이지 만들기에서 만든 홈페이지를 다른 사람과 교류하기 위해 [[BBS]]프로그램을 계정에 설치해서 게시판 용도로 활용했었다. 이때는 CGI가 개인 홈페이지 게시판 프로그램에 가장 널리 활용되었다. PHP는 개발 시기가 살짝 늦었고, PHP 기반 게시판을 구동하려면 [[마이에스큐엘]](MySQL) 서버가 필요해서 유료로 서비스를 사용하기 때문에, 무료였던 CGI가 초창기의 주류였다. '/CGI-bin/'은 무료 게시판 프로그램을 돌릴 때 쓰던 디렉터리 지정 방식이었다. 처음에는 CGI프로그램은 [[C언어]] 같은 컴파일되는 언어를 이용해서 만들어졌으나, 유지 보수가 불편하다는 단점이 있었다. 그런데 웹 서버가 흔히 동작하는 [[유닉스]](UNIX) 환경에서는 [[스크립트]] 언어를 마치 보통의 실행 파일처럼 실행하는 기능이 있기 때문에, CGI프로그램 또한 이러한 스크립트 언어를 통해 컴파일 없이 동작하는 방법으로 넘어가게 되었다. [[펄]](Perl)이 사실은 딱히 웹 환경을 위해 만들어진 언어가 아님에도 한동안 인기를 끌었다. 이유는 당시 [[펄]](Perl)이 CGI [[라이브러리]]가 있는 얼마 안 되는 스크립트 언어였기 때문이다. <ref>〈[https://namu.wiki/w/Common%20Gateway%20Interface Common Gateway Interface]〉, 《나무위키》</ref>
  
참고로 좀 오래된 사이트에서 종종 '/cgi-bin/'으로 시작하는 주소를 볼 수 있는데, 웹 서버가 해당 [[디렉토리]]에 들어 있는 프로그램을 모두 다 CGI 프로그램으로 인식하도록 되어 있는 경우이다. 요즘은 보안 문제 때문에 막무가내로 이런 식으로 하는 경우는 흔치 않고 웹 서버에서 설정할 수 있도록 해 놓는다. 2000년대 전후로 대한민국에도 [[인터넷 익스플로러]](internet explorer)를 통해 웹 브라우저로 접속이 가능해졌고, 개인 홈페이지 만들기에서 만든 홈페이지를 다른 사람과 교류하기 위해 bbs프로그램을 계정에 설치해서 게시판 용도로 활용했었다. 이 때는 CGI가 개인 홈페이지 게시판 프로그램에 가장 널리 활용되었다. PHP는 개발 시기가 살짝 늦었고, PHP기반 게시판을 구동하려면 [[MySQL]]서버가 필요해서 유료로 서비스를 사용하기 때문에, 무료였던 CGI가 초창기의 주류였다. '/cgi-bin/'은 무료 게시판 프로그램을 돌릴 때 쓰던 디렉토리 지정 방식이었다.
+
==원리==
 +
<center>
 +
{|border=0
 +
|align=center|[[파일:CGI.png]]<br>
 +
|}</center>
  
==원리==
+
그림과 같이 클라이언트가 문서를 요청하면 서버는 CGI프로그램에 필요한 인수를 전달하며 실행시킨다. 실행된 결과로 문서가 동적으로 생성되고, 이 문서는 서버를 거쳐서 클라이언트에게 넘겨진다. CGI 프로그램을 지정하는 방법은 URL에서 CGI 프로그램과 전달할 인수를 지정하거나, 폼 문에서 CGI 프로그램과 전달할 인수를 지정하고 이후 사용자가 입력하는 방법이 있다. 또한, 인수를 CGI프로그램으로 전달하는 방식은 [[GET]] 방식과 [[POST]] 방식이 있다. GET 방식은 모든 인수를 환경 변수들을 통해서 전달하게 되며, POST 방식은 환경 변수와 표준 입력을 통해서 인수를 전달하게 된다. URL에서 지정하는 방법은 GET 방식을 이용하며, 폼 문에서 지정하는 방법은 GET과 POST 방식 두 가지 모두를 이용한다.<ref>이택경, 〈[http://www.www-kr.org/ws3/content/A4/ 고급 CGI 프로그래밍]〉, 《다음커뮤니케이션》</ref>
  
 
==장단점==
 
==장단점==
 
===장점===
 
===장점===
* 매우 단순하고 다른 [[서버 사이드]](server-side) 프로그래밍 언어에 비해 작업이 훨씬 쉽게 수행할 수 있다. 서버 사이드(server-side)란 네트워크의 한 방식인 클라이언트-서버 구조의 서버쪽에서 행해지는 처리를 말한다.
+
* 매우 단순하고 다른 [[서버 사이드]](server-side) 프로그래밍 언어보다 작업이 훨씬 쉽게 수행할 수 있다. 서버 사이드(server-side)란 네트워크의 한 방식인 클라이언트-서버 구조의 서버쪽에서 행해지는 처리를 말한다.
 
* [[언어]], 플랫폼이 독립적이다.
 
* [[언어]], 플랫폼이 독립적이다.
* 재 사용할 수 있는 CGI코드 [[라이브러리]]가 풍부하다.
+
* 재사용할 수 있는 CGI코드 [[라이브러리]]가 풍부하다.
 
* CGI가 웹 서버에서 실행될 때 안전하다.
 
* CGI가 웹 서버에서 실행될 때 안전하다.
* CGI코드를 수행하는데 특정 라이브러리가 필요하지 않기 때문에 매우 가볍다.
+
* CGI코드를 수행하는 데 특정 라이브러리가 필요하지 않기 때문에 매우 가볍다.
  
 
===단점===
 
===단점===
* 요청이 올 때마다 [[DB]] connection(연결)을 새로 열어야 해서 속도가 느리다.
+
* 요청이 올 때마다 [[데이터베이스]](DB) 연결(connection)을 새로 열어야 해서 속도가 느리다.
 
* [[HTTP]] 요청마다 새로운 [[프로세스]]를 만들기 때문에 서버 메모리를 많이 잡아먹는다.
 
* [[HTTP]] 요청마다 새로운 [[프로세스]]를 만들기 때문에 서버 메모리를 많이 잡아먹는다.
 
* 페이지 로드 사이에 데이터가 [[메모리]]에 캐시될 수 없다.
 
* 페이지 로드 사이에 데이터가 [[메모리]]에 캐시될 수 없다.
* [[스크립트]] 언어에서는 보통 코드를 실행할 때마다 코드를 매번 해석해야 한다.<ref>bruteforce,〈[https://live-everyday.tistory.com/197 Common Gateway Interface(CGI)란 무엇인가]〉,《티스토리》,2020-08-18</ref>
+
* [[스크립트]] 언어에서는 보통 코드를 실행할 때마다 코드를 매번 해석해야 한다.<ref>bruteforce, 〈[https://live-everyday.tistory.com/197 Common Gateway Interface(CGI)란 무엇인가]〉, 《티스토리》, 2020-08-18</ref>
 
 
  
 
{{각주}}
 
{{각주}}
  
 
==참고자료==
 
==참고자료==
* 〈[https://ko.wikipedia.org/wiki/%EA%B3%B5%EC%9A%A9_%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4 공용 게이트웨이 인터페이스]〉,《나무위키》
+
* 〈[https://ko.wikipedia.org/wiki/%EA%B3%B5%EC%9A%A9_%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4 공용 게이트웨이 인터페이스]〉, 《위키백과》
* bruteforce,〈[https://live-everyday.tistory.com/197 Common Gateway Interface(CGI)란 무엇인가]〉,《티스토리》,2020-08-18
+
* bruteforce, 〈[https://live-everyday.tistory.com/197 Common Gateway Interface(CGI)란 무엇인가]〉, 《티스토리》, 2020-08-18
 +
* 〈[https://namu.wiki/w/Common%20Gateway%20Interface Common Gateway Interface]〉, 《나무위키》
 +
* 이택경, 〈[http://www.www-kr.org/ws3/content/A4/ 고급 CGI 프로그래밍]〉, 《다음커뮤니케이션》
  
 
==같이 보기==
 
==같이 보기==
40번째 줄: 48번째 줄:
 
* [[PHP]]
 
* [[PHP]]
  
{{프로그래밍|토막글}}
+
{{시스템 연계|검토 필요}}

2021년 9월 27일 (월) 13:31 기준 최신판

CGI(Common GateWay Interface)는 웹 서버 상에서 사용자 프로그램을 동작시키기 위한 조합이다. 존재하는 많은 웹 서버 프로그램은 CGI의 기능을 이용할 수 있다. 씨지아이라고 읽는다.

개요[편집]

CGI는 'Common GateWay Interface'의 줄임말로 말 그대로 해석하면 외부 프로그램과 브라우저 사이의 일반적인 입출력 방법을 말한다. 즉, 웹 브라우저와 외부 프로그램의 상호 간의 정보를 주고받는 역할을 하는 프로그램이다. 웹 서버 프로그램의 기능 주체는 미리 준비된 정보를 클라이언트(이용자)의 요구 응답해 보내는 것이기 때문에 서버 프로그램 그룹에서는 정보를 그 장소에서 동적으로 생성하고 클라이언트에 송신하려는 조합을 작성하는 것이 불가능했다. 서버 프로그램에서 다른 프로그램을 불러내고, 그 처리 결과를 클라이언트에 송신하는 방법이 고안되었는데, 이를 실현하기 위한 서버 프로그램과 외부 프로그램과의 연계를 정한 것이 CGI다.[1]

역사[편집]

1993년 NCSA팀은 www-talk 메일링 리스트의 명령줄 실행 파일을 호출하는 사양을 작성하였다. 하지만 NCSA는 더 이상 이 사양을 호스팅(hosting)하지 않고 있다. 기타 웹 서버 개발자들이 이를 수용하여, 그 이후로 웹 서버의 표준으로 자리 잡고 있다. 켄 코어(Ken Coar)가 주도하는 워크 그룹이 1997년 11월 시작되어 CGI의 NCSA 정의가 공식적으로 확립되었다. 이를 통해 RFC 3875 사양이 탄생되었으며 이는 CGI 버전 1.1을 기술한다.[1]

구조[편집]

보통 웹 브라우저 안에서나 HTML의 폼(form)을 통해 요청이 웹 서버로 전달되면, 웹 서버는 요청에 들어 있는 주소가 CGI프로그램에 대응되는지 확인한다. 대응되면 그 프로그램을 실행해서 환경 변수와 표준 입력의 형태로 요청을 전달한다. 웹 서버는 CGI 프로그램이 표준 출력으로 돌려보낸 내용을 그대로 응답으로 돌려준다. 좀 오래된 사이트에서 종종 '/CGI-bin/'으로 시작하는 주소를 볼 수 있는데, 웹 서버가 해당 디렉터리에 들어 있는 프로그램을 모두 다 CGI 프로그램으로 인식하게 되어 있는 경우이다. 요즘은 보안 문제 때문에 막무가내로 이런 식으로 하는 경우는 흔치 않고 웹 서버에서 설정할 수 있도록 해 놓는다. 2000년대 전후로 대한민국에도 인터넷 익스플로러(internet explorer)를 통해 웹 브라우저로 접속이 가능해졌고, 개인 홈페이지 만들기에서 만든 홈페이지를 다른 사람과 교류하기 위해 BBS프로그램을 계정에 설치해서 게시판 용도로 활용했었다. 이때는 CGI가 개인 홈페이지 게시판 프로그램에 가장 널리 활용되었다. PHP는 개발 시기가 살짝 늦었고, PHP 기반 게시판을 구동하려면 마이에스큐엘(MySQL) 서버가 필요해서 유료로 서비스를 사용하기 때문에, 무료였던 CGI가 초창기의 주류였다. '/CGI-bin/'은 무료 게시판 프로그램을 돌릴 때 쓰던 디렉터리 지정 방식이었다. 처음에는 CGI프로그램은 C언어 같은 컴파일되는 언어를 이용해서 만들어졌으나, 유지 보수가 불편하다는 단점이 있었다. 그런데 웹 서버가 흔히 동작하는 유닉스(UNIX) 환경에서는 스크립트 언어를 마치 보통의 실행 파일처럼 실행하는 기능이 있기 때문에, CGI프로그램 또한 이러한 스크립트 언어를 통해 컴파일 없이 동작하는 방법으로 넘어가게 되었다. (Perl)이 사실은 딱히 웹 환경을 위해 만들어진 언어가 아님에도 한동안 인기를 끌었다. 이유는 당시 (Perl)이 CGI 라이브러리가 있는 얼마 안 되는 스크립트 언어였기 때문이다. [2]

원리[편집]

CGI.png

그림과 같이 클라이언트가 문서를 요청하면 서버는 CGI프로그램에 필요한 인수를 전달하며 실행시킨다. 실행된 결과로 문서가 동적으로 생성되고, 이 문서는 서버를 거쳐서 클라이언트에게 넘겨진다. CGI 프로그램을 지정하는 방법은 URL에서 CGI 프로그램과 전달할 인수를 지정하거나, 폼 문에서 CGI 프로그램과 전달할 인수를 지정하고 이후 사용자가 입력하는 방법이 있다. 또한, 인수를 CGI프로그램으로 전달하는 방식은 GET 방식과 POST 방식이 있다. GET 방식은 모든 인수를 환경 변수들을 통해서 전달하게 되며, POST 방식은 환경 변수와 표준 입력을 통해서 인수를 전달하게 된다. URL에서 지정하는 방법은 GET 방식을 이용하며, 폼 문에서 지정하는 방법은 GET과 POST 방식 두 가지 모두를 이용한다.[3]

장단점[편집]

장점[편집]

  • 매우 단순하고 다른 서버 사이드(server-side) 프로그래밍 언어보다 작업이 훨씬 쉽게 수행할 수 있다. 서버 사이드(server-side)란 네트워크의 한 방식인 클라이언트-서버 구조의 서버쪽에서 행해지는 처리를 말한다.
  • 언어, 플랫폼이 독립적이다.
  • 재사용할 수 있는 CGI코드 라이브러리가 풍부하다.
  • CGI가 웹 서버에서 실행될 때 안전하다.
  • CGI코드를 수행하는 데 특정 라이브러리가 필요하지 않기 때문에 매우 가볍다.

단점[편집]

  • 요청이 올 때마다 데이터베이스(DB) 연결(connection)을 새로 열어야 해서 속도가 느리다.
  • HTTP 요청마다 새로운 프로세스를 만들기 때문에 서버 메모리를 많이 잡아먹는다.
  • 페이지 로드 사이에 데이터가 메모리에 캐시될 수 없다.
  • 스크립트 언어에서는 보통 코드를 실행할 때마다 코드를 매번 해석해야 한다.[4]

각주[편집]

  1. 1.0 1.1 공용 게이트웨이 인터페이스〉, 《위키백과》
  2. Common Gateway Interface〉, 《나무위키》
  3. 이택경, 〈고급 CGI 프로그래밍〉, 《다음커뮤니케이션》
  4. bruteforce, 〈Common Gateway Interface(CGI)란 무엇인가〉, 《티스토리》, 2020-08-18

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 CGI 문서는 데이터에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.