본문 바로가기

Common Gateway Interface/Perl

[옛 강좌] 01. Perlstart - 펄의 시작

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 이 게시물은 지금은 폐쇄되어 접속되지 않는 Kim Young Soo(http://hours.interpia98.net/~unisoo/)님의 웹 사이트에 2000년경 게시된 내용을 바탕으로 오늘날 웹 환경에 맞게 내용을 추가하였습니다.

Perlstart - 펄의 시작

Description

이 글은 CGI나 Perl을 처음 접하는 분들을 위한 글입니다. 처음 시작하시는 분들은 강좌나 함수, 소스를 받으시기 전에 읽어보시기 바랍니다. 보완될 점, 잘못된 내용이 있으면 연락주시기 바랍니다. 제가 알고 있는 한도 내에서 말씀드리겠습니다.


CGI - Common Gateway Interface

 CGI란 웹 서버의 기능을 확장하기 위해 웹 서버와 다른 프로그램들 간의 인터페이스 규약을 말합니다.

 우리가 흔히 보는 웹 페이지들은 HTML로 되어있고, 정적인 페이지입니다. 또한 웹 서버란 것도, 사용자가 자료를 요청하면, 그 요청한 자료를 전달해 주는 역할밖에 하지 못합니다.

 그래서 보다 다양한 처리를 하기 위한 확장성을 위해 CGI라는 표준 인터페이스 규약이 나왔고, 웹 서버가 처리하지 못하는 기능들은 별도의 프로그램을 붙여 새로운 기능을 하는 웹 서버로의 변신이 가능하게 되었습니다.

 그럼 이 CGI와 서버, 사용자 간의 작동이 어떤 식으로 이루어지는 보겠습니다.

사용자(user) ==== Web Server ==== CGI program ==== DataBase

 위의 모습이 간단한 구조죠.

  1. 사용자는 자기가 원하는 정보를 서버에 요청을 하게 됩니다.

  2. 이 때 서버는 사용자가 보내온 요청을 받아서, 일반 HTML인지 CGI프로그램인지를 판단, CGI 프로그램일 경우, 별도의 프로세스를 생성, CGI 프로그램을 실행시킵니다.

    웹 서버는 사용자로부터 받은 정보를 CGI 프로그램에 전달하게 됩니다.

  3. CGI 프로그램은 웹 서버로 부터 받은 정보를 가지고, 프로그램을 수행합니다. 이 때 적절한 데이터를 추출하고, 정보들을 웹 서버로 전달합니다.

  4. 그러면 웹 서버는 CGI 프로그램으로부터 받은 정보들을 다시 사용자에게 보내게 됩니다.

  5. 최종적으로 사용자는 본인이 요구한 정보를 브라우저를 통해 다시 받게 됩니다.

 우리는 간단히 마우스를 누르거나 또는 폼에 어떤 정보를 입력해서 정보를 보내기만 하면, 모든 처리는 위와 같은 과정을 거친후 다시 우리에게 보여집니다.

 이 글을 읽는 분들은 당연, 위의 과정에서 CGI를 프로그램하고자 하는 분들일 테지요...^^

 하지만 이 CGI 프로그램과 사용자간의 중간에는 웹 서버가 있고, 이 서버에서 CGI와 연결을 해 주지 않으면 CGI 프로그램은 실행되지 않습니다.

 많은 서비스 업체들이 보안을 이유로 사용자들에게는 지원해주질 않죠.

 자 그럼.... 이런 프로그램을 하기 위해서 준비해야 되는 사항을 말씀드리겠습니다.

준비(ready....)

 위에서 보시다시피..... 프로그래밍을 하기 위해선 본인이 직접 사용자도 돼 봐야 하고, 또 서버도 있어야 되고, CGI 프로그램을 위한 도구도 있어야 하겠죠.

  1. 사용자가 된다면..... 브라우저는 다 가지고 계시죠? (-.-;; 말하나 마나....)

  2. Web Server

  3. 이 서버가 있어야 되죠. 그래야 CGI와 연결을 해주니깐.... 그렇다고 서버가 하나만 존재하는 건 아니죠.

    어떤 걸 쓰느냐는 본인의 취향이지만..... 저는 Apache Web Server(자료실에 가시면 있습니다. 윈도용입니다.)를 쓰고 있습니다.

    현재 가장 많이 사용하는 서버가 이 Aapache Server죠. 이걸 선택하신 분은 이 홈의 자료실에 가셔서 다운 받으신후, 요 아래 아파치 팁 강좌를 참고하셔서, 서버 구축을 하시면 됩니다. 참고루.... 요기 자료실에 있는건 윈도용(95, 98, NT)입니다.

    유닉스 계열의 운영체제를 쓰시는 분이시라면, www.apache.org에 가시면 각 플랫폼에 맞는 서버 프로그램을 다운받으실 수 있습니다.

    사용하는 방법은 윈도용이나 유닉스 용이나 같습니다. 설치 빼구여.....^^;

    또 NT를 쓰시는 분이시라면 IIS가 있죠. 하지만 저 개인적으로는.... IIS 보단 아파치가 훠~얼~씬 낫죠..... 아파치 서버외의 다른 서버들은 각각의 참고문헌을 보시며, 구축하시면 됩니다.

  4. 그럼...

  5. 서버도 준비가 됐구여..... 이젠 CGI를 프로그램할 도구만 있으면 되네여...

    이 CGI는 어떤 프로그래밍 언어로도 가능합니다. C/C++, VB, VC++, Perl... 이 외에도 유닉스에 있는 각종 쉘 스크립트와 스크립트 언어로 사용 가능합니다.(자바 스크립트는 아닙니당~~~~)

    이 중에서 이 홈은 Perl로 합니다. 이유는.... C/C++ 같이 컴파일 과정이 필요없습니다. 그냥 짜놓구, 브라우저에서 바로 실행시켜 볼 수 있죠. 에러나면 잠깐 고치구, 또 보구..

    하지만 컴파일언어(C/C++ 등)는 에러가 나면 코드 수정하고, 다시 컴파일 하구....

    그리구 무엇보다, perl은 처음 만들어질때 문자의 처리를 뛰어나게 했다는 점입니다. (Larry wall이 자기 일을 좀더 편하게 할려구 한데서 시작한거니깐여...-.-) 웹 상에서는 주로 문자 데이터를 많이 다루죠.

    뭐... 이런 저런 이유로 해서 perl은 인터넷에서 가장 인기있는 언어가 되었습니다. 물론 여러분들도 펄을 배우고 싶으셔서 이곳으로 오셨겠지만여....

    하지만 지금의 Perl은 CGI프로그램 뿐만 아니라, 하나의 언어로 발전 하였습니다. 웹 프로그램, 데이터 베이스 프로그램, 네트워크 프로그램등... 현재 유닉스에선 필수로 설치되는 언어죠.

    우리 나라 정보통신부에서도 C와 같은 레벨의 언어로 인정 받았습니다.

    우리는 프로그래밍 도구로 Perl을 선택하였습니다.

 이제... 위의 과정중 1,2는 사용법이 그리 어렵진 않죠.... 중요한건 세번째.... 그럼 프로그래밍을 위한 준비과정을 봐여....

덧붙임 1: 우분투에서 Apache 및 Perl 설정하기

Apache 설치

 터미널에서 Apache 관련 패키지를 설치하는 명령어를 입력합니다.

 $ sudo apt-get install apache2 

 설치 여부를 확인하는 메시지에서 [Y] 키를 눌러 설치를 시작합니다.

 웹 브라우저를 열고 http://localhost에 접속하여 아래와 같은 화면이 뜨면 아파치가 정상적으로 설치된 것입니다.

Perl 설치

 우분투는 기본적으로 Perl이 설치되어 있으므로 따로 설치할 필요가 없습니다. 터미널에서 perl 설치 명령을 실행하여 이미 설치되었음을 확인합니다.

 $ sudo apt-get install perl 
Perl 해석을 위한 Apache 확장 기능 설치

 Apache가 Perl 소스를 Perl 언어로서 해석하기 위해서는 확장 기능을 설치해야 합니다. 터미널에서 다음 명령을 실행하여 libapache2-mod-perl2를 설치합니다.

 $ sudo apt-get install libapache2-mod-perl2 
Apache에서 가상 디렉토리 설정

 위의 과정에 따라 Apache2와 libapache2-mod-perl2를 설치하였다면 우분투 리눅스의 경우 기본적으로 perl 파일을 웹에 출판하기 위한 경로로 /usr/lib/cgi-bin 디렉터리가 제공됩니다. 여기에서는 이를 그대로 이용하겠습니다. 아래 명령을 입력하여 /usr/lib/cgi-bin 디렉터리가 있음을 확인합니다.

ls는 특정 디렉터리에 포함된 파일 목록을 보는 것이고 옵션인 -l은 각 파일에 대한 자세한 정보(권한, 소유자, 디스크 할당 크기 등)를 보도록 지정합니다. grep 명령은 ls 명령의 수행 결과 중 cgi-bin의 단어를 갖는 결과만 찾아 강조해서 보여줄 것을 지정합니다.

$ ls -l /usr/lib | grep cgi-bin

 이 디렉터리가 Apache를 통해 웹에서 접근 가능하도록 설정을 수정합니다. vi 또는 사용 가능한 텍스트 에디터로 /etc/apache2/sites-available/000-default.conf를 엽니다.

$ sudo vi /etc/apache2/apache2.conf

 대략 165번 줄 전후로 <Directory로 시작하는 설정들이 나타납니다.

 이 부분에 아래의 내용을 추가합니다.

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory /usr/lib/cgi-bin/>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
AddHandler cgi-script .cgi .pl
</Directory>

 ScriptAlias를 통해 /usr/www/cgi-bin이라는 로컬 경로를 서버의 /cgi-bin/이라 지정합니다. 즉 http://localhost/cgi-bin을 접속하면 로컬의 /usr/www/cgi-bin을 읽게 됩니다.

 /etc/apache2/mods-enabled/ 경로에는 현재 apache에서 사용되고 있는 각종 확장 기능들이 들어 있습니다. 이들 확장 모듈 중 cgi와 관련한 기능이 활성화 되어 있는지를 확인해봅니다.

$ ls -l /etc/apache2/mods-enabled/ | grep cgi

 아래와 같이 아무 파일도 나타나지 않는다면 cgi와 관련된 확장 모듈이 등록되어있지 않은 상태이므로 /etc/apache2/mods-available로부터 cgi 관련 확장 모듈의 심볼 링크를 이 경로에 삽입하겠습니다.

 먼저 /etc/apache2/mods-available 경로에 cgi 모듈이 있는지 확인합니다.

$ ls -l /etc/apache2/mods-available/ | grep cgi

 cgid.conf와 cgid.load 파일에 대한 심볼링크를 /etc/apache2/mods-enabled에 추가합니다.

$ sudo ln -s /etc/apache2/mods-available/cgid.load /etc/apache2/mods-enabled/
$ sudo ln -s /etc/apache2/mods-available/cgid.conf /etc/apache2/mods-enabled/

 mods-enabled에 CGI에 대한 심볼 링크가 추가되었음을 확인합니다.

$ ls -l /etc/apache2/mods-enabled/ | grep cgi

 Apache이 설정파일을 다시 읽도록 명령하여 perl 관련 모듈을 로드합니다.

$ sudo service apache2 reload

아래 명령 중 하나를 입력하여 Apache 자체를 재시작할 수도 있습니다.

$ sudo service apache2 restart
$ sudo /etc/init.d/apache2 restart
시험하기

 Apache와 Perl의 구성 및 설정은 모두 끝났습니다. vi 등의 텍스트 편집기로 간단한 perl 소스를 작성해봅니다. 작성한 파일을 /usr/lib/cgi-bin/test.pl로 저장합니다.

$ sudo vi /usr/lib/cgi-bin/test.pl
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<!DOCTYPE html>\n";
print "<html>\n";
print "\t<head>\n";
print "\t\t<meta charset=\"utf-8\" />\n";
print "\t</head>\n";
print "\t<body>\n";
print "\t\t<p>Perl Test</p>\n";
print "\t</body>\n";
print "</html>\n";
							

 

 브라우저를 열고 http://localhost/cgi-bin/test.pl을 접속합니다. 아래와 같이 뜨면 제대로 설정된 것입니다. 앞으로의 강좌를 계속 진행 가능합니다.

 403 오류가 뜨는 것은 test.pl에 실행권한이 없기 때문입니다. 터미널에서 chmod로 test.pl에 실행 권한을 줍니다.

$ sudo chmod +x /usr/lib/cgi-bin/test.pl

Perl Programming 준비

 이 펄은 무료입니다. http://www.perl.com/ 에 가시면 구할수 있죠. 윈도 사용자라면 이곳의 자료실이나, http://www.activestate.com/ 에 가시면 윈도용 펄을 무료로 다운 받으실 수 있습니다.

 그럼 설치 하시구여....(윈도용펄은 이곳 팁강좌란에 있습니다. 참고하세여~~)

Perl...

 설치가 다 되었으니, 이제 프로그램을 만들면 됩니다. 하지만 펄은, (아직까지 제가 본것에 의하면) TC나 VC처럼 에디터와 실행 등.. 통합 환경이 없습니다.

 펄을 프로그램 하기 위해선 간단한 에디터만 있으면 됩니다. (물론 펄 설치는 당연)

 이 곳에 코드를 씁니다. (이 부분 부터는 이 곳 CGI 강좌 카운터 만들기부터 설명이 됩니다.)

 실행을 위해선 웹 브라우저에서 확인도 되지만, 일반 도스 창(쉘)에서도 할수 있습니다. 위에서 말씀 드렸듯이, 펄은 웹 프로그래밍 만을 위한 언어가 아닙니다.

 잠깐!: 펄이 설치가 된후 perl.exe가 path에 포함되었는지 확인하세요. 그래야 어디서든지 펄의 실행이 가능하져... 물론 설치할 때 물어 봅니다.

 펄이 설치가 되면 bin, lib, html등의 디렉토리가 있죠 (윈도 기준).

  • bin
  • - 실행 파일들이 있습니다. 이 중 펄의 실행 파일은 perl.exe

  • lib
  • - 각종 라이브러리, 모듈들이 있습니다.

  • html
  • - 상당히 많은 양의 문서가 있습니다. faq, 모듈 설명 등.

 현재의 펄 버전을 보실려면 perl -v, 더 자세한 정보를 원하면 perl -V 하시면 됩니다.

 옵션 중 많이 쓰이는 옵션이 c,w,T 죠...

 perl -cw file.cgi, perl -T file.cgi 이런 식으로 많이 쓰이는데... 이건 간단한 디버깅시 유용합니다.

  • c
  • - 펄 문법적인 오류를 잡아 줍니다.

  • w
  • - 한 번 밖에 쓰이지 않은 변수를 잡아 줍니다. (생각보다 좋습니다. 변수명이 아슬아슬하게 달라도 잡을 수 있어여.... ^^)

  • T
  • - 한 줄씩 실행하면서 에러 부분에서 멈춥니다.

 위 세 개의 옵션만으로도 어지간한 에러는 처리할 수 있을 겁니다.

 문법적인 오류도 없고, 잘못 쓴 변수도 없고, 실행시켜도 이상이 없을 때..... 웹에서만 에러가 날 때... 뜨아!! (제일 싫어하는 500에러~~~~~ +--), 아니면 하얀 화면만 나올 때, 환장하져.... ㅠ.ㅠ

 쫌 무씩한 방법이지만... 프로그램시 파일을 열때 등 어떤 시스템에서의 작업이 필요한 곳은 꼭 에러 처리를 해 주시고, ( .... || die print "$!";) 중간 중간에 print문을 사용해서 변수들이 제대로 넘어오고 전달되는지 살펴보면서 에러나는 부분을 찾아야져.... ㅠ.ㅠ

 디버깅에 대한 얘기는 다음에 자세히 다루도록 하겠습니다.


Notes

 여기까지 읽으시느라 수고 많으셨습니다. 질문사항이나 하시다가 잘 안되시면 멜 주시거나, 게시판에 남겨주세여~~

 그럼 건투를 빕니다. 좋은 프로그래밍 하세여~~~~ ^o^


이 문서는 Perl 패키지내의 pod2html를 이용하여 만들었습니다. - Kim Young Soo