"CGI"의 두 판 사이의 차이
(→원리) |
(→원리) |
||
13번째 줄: | 13번째 줄: | ||
==원리== | ==원리== | ||
[[파일:CGI.png]] | [[파일:CGI.png]] | ||
+ | |||
+ | 그림과 같이 클라이언트가 문서를 요청하면 서버는 CGI프로그램에 필요한 인수들을 전달하며 실행시킨다 실행된 결과로 문서가 동적으로 생성되고, 이문서는 서버를 거쳐서 클라이언트에게 넘겨진다. | ||
==장단점== | ==장단점== |
2021년 7월 9일 (금) 14:11 판
CGI(Common GateWay Interface)는 웹 서버 상에서 사용자 프로그램을 동작시키기 위한 조합이다. 존재하는 많은 웹 서버 프로그램은 CGI의 기능을 이용할 수 있다. 씨지아이라고 읽는다.
개요
CGI는 Common GateWay Interface의 줄인말로 말 그대로 해석하면 외부 프로그램과 브라우저 사이의 일반적인 입출력 방법을 말한다. 즉, 웹 브라우저와 외부 프로그램의 상호간의 정보를 주고 받는 역할을 하는 프로그램이다. 웹 서버 프로그램의 기능의 주체는 미리 준비된 정보를 클라이언트(이용자)의 요구의 응답해 보내는 것이기 때문에 서버 프로그램 그룹에서는 정보를 그 장소에서 동적으로 생성하고 클라이언트에 송신하려는 조합을 작성하는 것이 불가능했다. 서버 프로그램에서 다른 프로그램을 불러내고, 그 처리 결과를 클라이언트에 송신하는 방법이 고안되었는데, 이를 실현하기 위한 서버 프로그램과 외부 프로그램과의 연계를 정한 것이 CGI다.[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프로그램에 필요한 인수들을 전달하며 실행시킨다 실행된 결과로 문서가 동적으로 생성되고, 이문서는 서버를 거쳐서 클라이언트에게 넘겨진다.
장단점
장점
- 매우 단순하고 다른 서버 사이드(server-side) 프로그래밍 언어에 비해 작업이 훨씬 쉽게 수행할 수 있다. 서버 사이드(server-side)란 네트워크의 한 방식인 클라이언트-서버 구조의 서버쪽에서 행해지는 처리를 말한다.
- 언어, 플랫폼이 독립적이다.
- 재 사용할 수 있는 CGI코드 라이브러리가 풍부하다.
- CGI가 웹 서버에서 실행될 때 안전하다.
- CGI코드를 수행하는데 특정 라이브러리가 필요하지 않기 때문에 매우 가볍다.
단점
- 요청이 올 때마다 DB connection(연결)을 새로 열어야 해서 속도가 느리다.
- HTTP 요청마다 새로운 프로세스를 만들기 때문에 서버 메모리를 많이 잡아먹는다.
- 페이지 로드 사이에 데이터가 메모리에 캐시될 수 없다.
- 스크립트 언어에서는 보통 코드를 실행할 때마다 코드를 매번 해석해야 한다.[3]
각주
- ↑ 〈공용 게이트웨이 인터페이스〉,《나무위키》
- ↑ 〈Common Gateway Interface〉,《나무위키》
- ↑ bruteforce,〈Common Gateway Interface(CGI)란 무엇인가〉,《티스토리》,2020-08-18
참고자료
- 〈공용 게이트웨이 인터페이스〉,《나무위키》
- bruteforce,〈Common Gateway Interface(CGI)란 무엇인가〉,《티스토리》,2020-08-18
- 〈Common Gateway Interface〉,《나무위키》
같이 보기