이전 장에서 우리는 CGI 프로그램에 대한 일반적인 논의를 마쳤습니다. 여기서는 이전 내용을 요약하여 간단한 데모 프로그램을 제공합니다.
이 프로그램을 사용하려면 OmniHTTPD의 최신 베타 버전인 Windows 95/NT용 OmniHTTPD 2.0b1(베타 1)이 필요합니다. 없으시면 여기(oh20b1.zip)에서 다운로드 받으실 수 있습니다.
OmniHTTPD를 설치하는 방법은 첫 번째 강의와 동일하므로 여기서는 다루지 않겠습니다. 여기서는 이 버전의 몇 가지 설정 문제에 대해 이야기하겠습니다.
OmniHTTPD 속성 설정 대화 상자를 열고 웹 서버 전역 설정 버튼을 사용한 다음 외부 페이지로 이동하여 .cgi 설정을 삭제합니다. 삭제하지 않으면 확장자가 cgi인 CGI 프로그램은 Perl 프로그램으로 처리됩니다. Perl 언어로 된 CGI 프로그램의 확장자는 .pl이고, 컴파일된 CGI 프로그램의 확장자는 .cgi입니다. 설정을 이렇게 수정해야 합니다.
이번 OmniHTTPD 버전에서는 SSI(서버측 포함) 명령에 대한 지원이 이전 버전에 비해 크게 향상되었으며, include 및 exec와 같은 명령도 지원됩니다. 데모 프로그램에서는 이러한 명령을 사용했습니다.
(ex8.zip)을 다운로드하면 index.shtml, makelog.cpp 및 makelog.exe의 세 가지 파일이 포함됩니다. index.shtml은 SSI 명령이 포함된 스크립트입니다. c:httpdhtdocs 디렉토리에 복사하세요. makelog.exe는 CGI 프로그램입니다. makelog.cpp는 makelog의 소스 파일입니다. exe, 컴파일을 수정하려면 VC와 같은 32비트 컴파일러를 사용해야 하며, 그렇지 않으면 사용할 수 없습니다.
또한 OmniHTTPD의 설정을 수정해야 합니다. 기본 가상 설정을 선택하고 서버 페이지에서 기본 인덱스를 index.shtml로 변경합니다. 이런 방식으로 브라우저에 http://localhost를 입력하면 OmniHTTPD가 자동으로 index.shtml을 로드합니다.
다른 웹 문서를 생성하고 파일 이름 index.html로 c:httpdhtdocs 디렉토리에 저장합니다. 브라우저를 사용하여 localhost에 액세스할 때 index.shtml은 먼저 makelog.exe를 호출하여 사용자의 액세스 정보를 저장한 다음 index.html을 호출하여 이를 브라우저에 표시합니다. 사용자의 액세스 정보는 c:httpdcgi-bin 디렉터리의 userlog 파일에 저장됩니다.
이 예에서는 CGI 사양의 기본 환경 변수와 SSI 기술을 사용합니다.
4. 데이터베이스
CGI 애플리케이션 중에서 데이터베이스 애플리케이션은 CGI 프로그램의 강력한 기능을 가장 잘 반영합니다. 인터넷에는 수많은 데이터베이스가 있으며, 이러한 데이터베이스를 WEB 애플리케이션으로 활용하려는 수요(기업이든 사용자이든)도 증가하고 있습니다. WEB 자체가 거대한 데이터베이스라고 할 수 있습니다. 이러한 거대한 데이터 컬렉션을 어떻게 효과적으로 구성하고 이를 WEB에 게시할 것인가는 CGI와 데이터베이스 시스템이 공동으로 해결하는 주제입니다.
CGI 및 데이터베이스 응용 프로그램을 분류하려는 경우 다양한 관점에서 다양한 분류 방법이 있습니다. 예를 들어 데이터베이스의 크기에 따라 CGI 처리 내용에 따라 텍스트 데이터베이스, 로컬 데이터베이스(Microsoft Access 등), 데이터베이스 서버(MS SQL Server, Informix 등)로 구분할 수 있습니다. 프론트엔드 데이터베이스 CGI 프로그램(사용자가 웹 브라우저를 사용하는)과 백엔드 데이터베이스 CGI 프로그램(데이터베이스와 상호 작용하는 CGI 프로그램) 등으로 나눌 수 있습니다. 데이터베이스 크기 선택은 일반적으로 완료하려는 작업의 데이터 양과 비용에 따라 달라집니다. CGI 프로그램을 프로그래밍할 때 프런트엔드와 백엔드를 분리할지 아니면 결합할지 여부는 일반적으로 데이터 처리의 복잡성에 따라 달라집니다.
일반적으로 데이터 세트가 몇 메가바이트 이내이고 데이터 레코드 간에 복잡한 관계가 없는 경우 텍스트 파일로 데이터베이스를 구축하도록 선택할 수 있습니다. 그러면 비용이 최소화되고 텍스트 파일용 데이터베이스가 제공됩니다. 관리 시스템(DBMS, 즉 데이터베이스 관리 시스템)에는 다음이 없습니다. 데이터에 오류가 발생하면 복구를 위해 텍스트 파일을 텍스트 편집기로 전송할 수 있으며, 데이터베이스 시스템에 오류가 발생하면 데이터베이스 전문가, 그렇지 않으면 수리가 어려울 것입니다.
데이터 수집량이 매우 크거나 데이터 레코드 간에 복잡한 관계가 있는 경우 데이터베이스 시스템을 사용하는 것이 가장 좋습니다. 수십 메가바이트의 데이터베이스를 구현하기 위해 텍스트 파일을 사용하면 고급 RISC 서버를 압도하게 됩니다. 데이터 간의 복잡한 관계를 처리하기 위해 CGI 프로그램을 사용하면 필연적으로 CGI 프로그램의 복잡성이 증가하고 너무 많은 서버 리소스를 차지하게 됩니다. 반면에 데이터베이스 시스템의 기능을 사용하면 CGI 프로그램 설계의 어려움을 단순화할 수 있습니다. 개발 효율성을 향상시킵니다.
데이터베이스 시스템을 선택할 때 다음 측면 중에서 선택해야 합니다. 1. 운영 체제 플랫폼: 가장 친숙한 데이터베이스 시스템을 선택해야 하며, 가장 친숙한 운영 체제 플랫폼도 선택해야 합니다. 이렇게 하면 실수를 피할 수 있습니다. 2. 가격: 작업을 완료할 수 있는 다양한 데이터베이스 시스템 중에서 가장 저렴한 것을 선택해야 합니다. 여기서는 UNIX 또는 Linux 플랫폼에서 실행되어야 하는 MiniSQL이라는 무료 데이터베이스 시스템에 대해 말씀드릴 수 있습니다. Windows 플랫폼을 위한 무료 데이터베이스 시스템이 있습니다. 혹시 아시는 분 계시면 알려주시면 향후 강좌에서 알려드리겠습니다.
본 강좌에서는 델파이를 이용한 CGI 프로그램 개발에 대해 다루며, 델파이는 인터베이스 서버 데이터베이스 시스템을 제공하므로 여기서는 주로 데이터베이스 시스템을 이용한 CGI 프로그램 개발에 대해 이야기하겠습니다. 동시에 데이터베이스 시스템은 코딩 작업을 많이 줄여주기 때문에 프런트엔드 CGI와 백엔드 CGI를 하나로 결합하여 사용자 입력 처리와 데이터베이스 작업을 하나의 CGI 프로그램으로 완료했습니다. 그러나 다른 시스템 플랫폼에서는 이 방법이 사용되지 않을 수 있습니다. 독자는 이전 논의를 기반으로 스스로 결정을 내려야 합니다.
여기서는 여러 가지 CGI와 OmniHTTPD에서의 사용상의 차이점을 설명하고 싶습니다.
표준 CGI: 표준 CGI는 /cgi-bin/에 의해 설정된 디렉토리에 배치되어야 하며 OmniHTTPD가 실행 중일 때 언제든지 수정할 수 있습니다.
Win CGI: Windows 시스템에 적용되는 CGI는 반드시 /cgi-win/에 설정된 디렉터리에 위치해야 합니다. 이 CGI는 환경 변수나 표준 입력을 사용하는 대신 INI 파일을 사용하여 클라이언트 브라우저에서 요청을 얻습니다. 우리는 일반적으로 이런 종류의 CGI를 사용하지 않습니다.
ISAPI: Microsoft에서 제안한 동적 링크 라이브러리를 사용하는 CGI 사양입니다.
NSAPI: Netscape에서 제안한 동적 링크 라이브러리를 사용하는 CGI 사양입니다.
이러한 CGI 사양에는 각각 고유한 특성이 있습니다. 표준 CGI는 실행 가능한 프로그램이나 Perl과 같은 스크립팅 언어를 사용하여 작성할 수 있지만 비효율적이며 많은 리소스를 차지합니다. 각 CGI 요청에는 CGI 프로그램의 인스턴스가 있습니다. 서버에서 실행 중입니다. Win CGI에는 Stardand CGI와 동일한 기능이 있습니다. ISAPI와 NSAPI는 효율성이 높고 메모리에 상주하며 CGI 요청이 아무리 많아도 서버에서는 인스턴스가 하나만 실행됩니다. 이 인스턴스에 해당하는 데이터 세트만 다르지만 이런 종류의 CGI는 쉽지 않습니다. 업데이트는 웹 서버에 있어야 하므로 소프트웨어를 닫을 때만 사용할 수 있습니다.
다음 강의에서는 화이트페이지에 대한 시연 프로그램을 소개해 드리겠습니다. 화이트페이지는 이메일 주소 목록으로, 웹 브라우저를 통해 사용자가 이 목록을 조회, 편집, 추가, 삭제할 수 있습니다. 이번 강의에서 제가 진행한 데모 프로그램은 질의 연산뿐이고, 그 외의 연산은 이후 강좌에서 설명하겠습니다.
이 데모 프로그램은 Borland Interbase Server 데이터베이스를 기반으로 구축되었으며 Delphi에서 개발되었습니다. 개발 중에는 디버깅이 더 쉽기 때문에 표준 CGI를 선택했습니다.
우리 프로그램은 쉽게 디버깅할 수 있는 Stardand CGI를 사용하여 작성되었습니다. 디버깅이 성공한 후 Delphi에서는 단 하나의 명령문만으로 쉽게 ISAPI/NSAPI로 변경할 수 있습니다(어때요, Delphi는 매우 좋습니다!).