13.2.CGI
13.2.1.CGI의 의미
CGI는 네티즌과 서버를 연결하는 중간 다리 역할을 합니다.
프로그램 설치에 앞서 CGI에 대해서 잠깐 알아봅시다. CGI(Common Gateway Interface)는 웹으로 접속하는 사용자와 서버를 연결해 주는 관문 역할을 합니다. 쉽게 말하자면 사용자가 서버에 어떤 일을 요청할 때 서버에 전달해주고 서버에서 작업한 내용을 사용자에게 전달해주는 일을 합니다. CGI는 이미 만든 문서를 읽기만 하는 정적인 HTML 문서에 비해 훨씬 동적인 환경을 제공합니다.
가장 많이 볼 수 있는 CGI 프로그램은 게시판과 방명록입니다. 사용자들이 글을 써서 보내면 이 자료를 서버에 기록해야 하는데 이때 사용자가 보낸 글을 서버에 전달하고 서버의 수행 결과를 사용자에게 보여주는 프로그램이 게시판 CGI 프로그램입니다.
CGI는 다양한 언어로 제작되며 게시판, 방명록이 CGI로 동작합니다.
CGI 프로그램은 다양한 언어를 이용해 제작됩니다. 가장 많이 사용하는 언어로는 C, C++, Perl, Tcl/TK, JAVA, PHP, ASP, Visual Basic, 델파이 등이 있습니다. 초창기에는 C를 많이 이용했고 최근에는 펄을 사용하다가 요즘은 PHP 와 ASP 가 많이 사용되고 있습니다. 단 이들 언어로 만든 CGI는 웹호스팅 업체에서 지원해주어야 사용이 가능합니다.
대개의 웹호스팅 업체는 CGI를 지원해주는데 특정 디렉토리에서만 CGI가 실행되도록 지정하는 경우가 있습니다. 이런 경우에는 지정한 디렉토리 안에만 CGI 프로그램을 설치해야 합니다. 반면 특별하게 디렉토리를 지정하지 않을 경우에는 index.html 문서를 올리는 디렉토리나 서브 디렉토리 안에서 어느 곳에나 설치해 사용할 수 있습니다.
CGI 프로그램의 확장자는 정해진 것이 없지만 보통은 *.cgi를 많이 사용합니다. PHP로 만든 만든 CGI는 *.php를 사용합니다.
13.2.2.CGI의 오류와 원인
CGI 오류는 대부분 퍼미션 설정이 잘못 되어 발생합니다.
CGI 프로그램을 설치하기는 쉽지 않습니다. 웹호스팅 업체별로 CGI를 지원하는 방식이 조금씩 달라 CGI를 설치하고 난 뒤에 실행을 시키면 오류가 발생하는 경우를 종종 볼 수 있습니다.
예를 들어 게시판 프로그램을 설치했는데 실행이 안된다면 몇 가지 점검을 해봐야 합니다. 몇 가지 점검을 해봐도 오류가 발생한다면 웹호스팅 업체에서 퍼미션을 잘못 설정한 상태로 봐야 하므로 호스팅 업체에 전화를 걸어 문의해야 합니다.
1. 프로그램 실행 중 Mathod Not Allowed 라는 메시지가 나오는 경우
확장자가 틀리면 나타날 수 있습니다. CGI 프로그램의 확장자가 맞게 된 것인지 확인해보기 바랍니다. CGI의 확장자는 정해진 것이 없지만 CGI를 작성한 도구에 맞는 것으로 정해야 합니다. 따라서 cgi, pl, php 등의 확장자를 가져야 서버에서 cgi 프로그램으로 인식하고 cgi 로 동작합니다. 확장자가 제대로 설정되었는지 확인해보기 바랍니다.
2. CGI가 실행되지 않을 때
CGI의 경우 특정 디렉토리에서만 실행되도록 설정한 호스팅 업체가 많습니다. 해당 디렉토리에 맞게 설치를 한 것인지 확인하기 바랍니다. 예를 들어 cgi-bin 디렉토리에서만 실행되도록 조건을 다는 웹호스팅 업체도 있습니다.
특정 디렉토리가 아니라 아무 디렉토리나 만들어 실행할 수 있다 하더라도 index.html 문서의 하위 디렉토리에 만들어 실행해야 합니다. 따라서 홈디렉토리 밑에 디렉토리를 만들어 설치했다면 실행되지 않을 가능성이 높습니다.
3. 실행 도중 오류가 발생하거나 실행 오류 안내문이 나타날 때
CGI를 실행하려면 읽기 외에도 쓰기나 실행 권한이 필요한 경우가 대부분입니다. 그런데 퍼미션을 읽기 권한한 준 상태라면 오류가 발생합니다. 이럴 때는 chmod 755나 chmod 777 명령을 이용해 cgi 프로그램에 맞게 파일의 퍼미션을 고쳐주어야 합니다.
4. 404 Not Found 라는 안내문이 나오는 경우
html 문서에서 cgi 경로를 잘못 지정한 경우입니다. HTML 문서의 cgi 경로를 확인해보기 바랍니다.
5.Internal Server Error (500)가 발생한 경우
cgi 파일 자체에 문제가 있는 경우입니다. cgi 프로그램이 제대로 만들어진 것인지 확인해봅니다.
6. Forbidden Error 가 발생한 경우
파일의 권한이 읽을 수 없게 설정된 것입니다. 따라서 0으로 설정된 권한을 1이나 3, 5, 7로 설정해주어야 합니다. chmod 755와 같이 명령을 내려서 퍼미션을 고칩니다.
13.2.3.방명록, 게시판 등 CGI 프로그램 설치 방법
방명록과 게시판 회사에서 제공하는 기능을 이용합니다.
홈페이지를 처음 만들 경우 자신이 만든 문서를 올리는 것만으로는 허전합니다. 그래서 사용자들이 글을 남길 수 있도록 게시판과 방명록을 설치합니다. 또 몇 명이 방문했나 확인할 수 있는 카운터를 설치하기도 합니다. 네티즌과의 활발한 교류를 원하는 이들은 채팅 프로그램을 설치하기도 하고 회원 가입 신청서를 받기도 합니다. 이들 프로그램 역시 CGI를 이용해 만든 것입니다.
게시판이나 카운터를 자신의 홈페이지에 만들 수 있는 방법은 크게 다섯 가지로 구분할 수 있습니다.
[프로그램을 홈페이지에서 사용하는 방법]
(1) 직접 프로그램을 짜는 것입니다. 물론 이것은 어지간한 중급자에게도 어려운 일입니다.
(2) 두 번째 방법은 직접 짜지는 못하니까 남들이 짜놓은 소스 파일을 가져다가 컴파일해 사용하는 방법입니다. 역시 초보자에게는 너무 어려운 일입니다.
(3) 무료 게시판 서비스를 제공하는 회사의 게시판 메뉴를 자신의 홈페이지에 연결시키는 일입니다. 이것은 게시판 제공 회사에의 링크만 연결시키면 됩니다.
(4) 홈페이지 제공 업체나 웹호스팅 업체에서 만들어놓은 게시판을 연결시켜 사용하는 방법입니다. 이 방법이 가능하다면 가장 쉽게 게시판을 만들 수 있습니다. 대부분의 사용자가 이 방법을 이용해 게시판을 사용하고 있습니다.
(5) 게시판 프로그램을 구한 다음에 자신의 홈페이지에 설치하는 방법입니다. 이 역시 초보자가 하기에는 쉽지 않습니다. 이번 장부터 설명하려는 내용이 바로 자신이 직접 프로그램을 홈페이지 설치하는 방법입니다.
웹호스팅 업체에서 게시판, 방명록, 카운터, 채팅방 프로그램을 제공합니다.
웹호스팅 서비스를 사용하게 되면 호스팅 업체에서 게시판, 방명록, 카운터와 같이 가장 많이 사용하는 프로그램을 제공합니다. 따라서 웹호스팅 업체에서 서비스하는 프로그램을 이용하는 것이 가장 쉽습니다.
일단 웹호스팅 업체의 서비스를 이용하는 것으로 호스팅 서비스를 시작하는 것이 좋습니다. 그러다가 어느 정도 홈페이지 운영에 자신감이 생기면 공개용 프로그램을 구해서 직접 설치하게 됩니다.
웹호스팅 업체의 프로그램보다 직접 설치하는 것이 좋습니다.
웹호스팅 업체의 서비스를 이용하는 것보다는 자신이 직접 프로그램을 설치해 사용하는 것이 여러 모로 좋습니다. 자신이 직접 프로그램을 설치할 때 얻는 장점은 두 가지입니다.
1. 원하는 기능을 가진 게시판을 설치할 수 있습니다.
웹호스팅 업체에서 제공하는 프로그램을 호스팅 업체에서 자체적으로 개발한 것이 많습니다. 기본적인 기능은 대부분 훌륭하지만 자신이 꼭 필요로 하는 기능이 없는 경우가 많습니다. 그래서 조금 아쉬운 부분이 있습니다. 이럴 때는 자신이 원하는 기능을 가진 프로그램을 구해서 직접 설치해 사용하는 것이 좋습니다.
예를 들어 어떤 웹호스팅 업체는 wwwbaord나 ttboard를 제공하는데 이들 게시판이 마음에 들지 않을 수 있습니다. 이들 게시판보다 제로보드 게시판이 더 마음에 든다면 제로보드를 설치하는 것이 좋습니다.
2. 자료의 호환성이 좋습니다.
웹호스팅 업체에서 제공하는 프로그램은 호스팅 업체의 운영체제나 서버에 맞게 개조된 것입니다. 그래서 호스팅 업체의 게시판 프로그램을 이용할 때는 편하게 이용할 수 있지만 다른 호스팅 업체로 홈페이지를 옮길 때 자료를 옮기지 못하는 비호환성이 발생합니다. 일단 웹호스팅 업체의 게시판 프로그램이 상용일 경우 다른 호스팅 업체로 가져가서 설치할 수 없습니다. 또 무료로 제공하는 프로그램이라 하더라도 다른 호스팅 업체의 공간에 설치했을 때 특성을 타는 수가 많습니다.
때문에 나중에 자료 이전할 것을 고려한다면 범용성이 있는 게시판 프로그램을 사용하는 것이 좋습니다.