이제 Perl 로 CGI 프로그래밍을 하기 위한 준비를 해보자.
우선 Perl 로 웹프로그래밍을 하게 해주는 모듈이 필요하다.
사실 Perl 로 CGI 모듈을 사용하지 않아도 CGI 프로그래밍은 가능하다.
(print로 HTML 구문을 찍어내는 것뿐이니)
하지만 이건 C로 코딩하는것과 뭐가 다른가
perl CGI 프로그래밍을 좀 더 편하게 하기위한 모듈 4개를 설치해본다.
Windows 에서 펄 모듈을 설치하는법을 간략하게 소개한다.
먼저 cmd 창을 관리자 권한으로 실행한다.
그후 cpan 을 입력한다.
cpan> notest force install PSGI
cpan> notest force install Plack
cpan> notest force install CGI::Emulate::PSGI
cpan> notest force install Plack::App::CGIBin
이렇게 4개의 모듈들이 필요하다.
Plack 은 Perl CGI 스크립트를 간단하게 실행해보기위해 필요하다.
Apache도 가능하지만 . 하지만 개발후 간단간단하게 결과를 보기위해서는
가벼운 Plack 서버가 좋다. (더군다나 Windows 환경)
==Windows서버 + Apache + Perl 은 있으면 안되는 조합이다.==
설치도중 NOT-OK라는 글자가 보이면 설치가 실패한것이다.
예상원인으로는 아래와 같다.
1.cpan 안에서 설치한것이아닌 , cmd상에서 cpan notest.....등으로 설치하였다.
2.notest force 옵션을 붙여주지 않았다. Windows에서는 linux처럼 잘 설치가안된다.
위 두가지 옵션을 주어, 의존성 검사등을 다 제거하고 설치해야한다.
3.충돌이 일어났다.(ppm으로 설치를 해본다)
3-1.ppm, cpan 모두 설치가 안된다.(답없다. OS를 새로 깔고 설치해야한다.)
모두 설치가 완료되었다면, Eclipse를 켜서 perl CGI 프로그래밍을 위한 준비를 시작하자.
프로젝트는 CGI프로젝트만드는법과 동일하다.
그후 app.psgi라는 파일을 만든다.
이 파일은 Apache로 돌릴경우는 상관없지만 , Plack으로 돌릴때 필요한 파일이다.
이 파일에 Perl CGI의 시작점을 넣는다.
여기에 다음의 소스를 넣는다.
#!/Strawberry/perl/bin/perl.exe
# app.psgi
use strict;
use warnings;
use CGI::Emulate::PSGI;
use Plack::Builder;
my $index = CGI::Emulate::PSGI->handler(
sub {
do "index.pl";
CGI::initialize_globals() if defined &CGI::initialize_globals;
}
);
그리고 index.pl 파일을 만들어 아래의 소스를 넣는다.
#!/Strawberry/perl/bin/perl.exe
use strict;
use warnings;
use CGI;
my $q = new CGI;
print $q->header();
print <<EOF
<html>
<head>
<title>Perl CGI</title>
</head>
<body>
<h1>Hello, Perl CGI in Plack!!</h1>
</body>
</html>
EOF
;
여기서는 Perl의 첫째줄에 경로를 적지 않아도된다. 하지만 Apache에서 Perl CGI를 실행하려면 경로를 반드시 적어야 한다.
그후 cmd 창을 켠다. eclipse 의 현재 프로젝트가 있는 곳으로 이동한다.
그후 plackup을 실행한다. ( plackup은 기본적으로 5000포트를 사용하며, app.psgi를 기본으로 인식한다)

그리고 웹에서 loaclhost:5000 으로 이동하면 다음과 같은 화면을 볼 수 있다.

이전 블로그 글을 옮기는것이니 Apache에 대한것도 기술하겠다.
그럼이제 Apache 서버를 설치하자. Apache가 뭔지 잘 몰라도 그냥 해라
http://www.apachelounge.com/download/

위 사이트에서 자신의 환경에 맞는 릴리즈를 다운받는다.
그후 압축을 풀고, 압축을 푼 폴더의 Apache24 폴더를 통채로
C:\ 에 옮긴다.

위와 같이 옮겼으면
C:\Apache24\conf 로 이동하여 httpd.conf 를 메모장을 이용하여 연다.
그리고 다음의 내용을 수정한다.
ServerRoot "c:/Apache24"
Listen 80
ServerAdmin springnode@gmail.com (자신의 이메일 주소)
ServerName http://localhost (#이 주석인데 주석을 지워준다)
DocumentRoot "c:/Apache24/htdocs"
Options Indexes FollowSymLinks MultiViews ExecCGI
(모든 디렉토리에서 CGI를 허용한다)
Options None 부분을 찾아 Options ExecCGI 로 바꿔준다.
AddHandler cgi-script .cgi .pl
(#이 주석인데 주석을 지워준다, .pl파일을 CGI로 인식한다.)
그리고 시스템->고급 시스템 설정->환경변수 의
시스템변수의 path에 C:\Apache24\bin 을 추가해준다.

그후 cmd를 ==관리자권한== 으로 켠다.
httpd.exe -k install
명령을 실행한다.
만일 VCRUNTIME140.dll 이 없다고하면
(visual studio 2015로 개발했나보다)
http://www.microsoft.com/en-us/download/details.aspx?id=48145
위 사이트에서 Visual C++ Redistributable for Visual Studio 2015 를 설치해준다.
64비트여도 x86을 설치해야한다. 즉 둘다 설치하란 소리다.
그럼 위 명령어가 잘 실행 될것이다.
그럼 이제
httpd.exe -k start
명령을 실행한다.
그후 http://localhost/ 에 접속한다.

위와같은 화면이 뜨면 Apache24 설치에 성공한것이다.
위는 C:\Apache24\htdocs\index.html이 실행된 모습이다.
우리는 CGI를 허용했으니 이제 index.pl 파일을 실행해보자.
먼저 index.html 은 기본적으로 localhost 등과같은 경로를 주면 자동으로 실행되는 화일이다. C언어에서 main 함수라고나 할까
여튼 우리는 index.html 이 아닌 index.pl을 실행해야하므로 이 index.html을 아래와 같이 바꾸자
<html>
<head>
<script type="text/javascript">
location.replace("index.pl");
location.href("index.pl");
history.go(-1);
location.reload();
</script>
<head>
<body>
</body>
</html>
그후 같은 경로의 index.pl을 넣자
#!/Strawberry/perl/bin/perl.exe
use strict;
use warnings;
use CGI;
my $q = new CGI;
print $q->header();
print <<EOF
<html>
<head>
<title>Perl CGI</title>
</head>
<body>
<h1>Hello, Perl in Apache !!</h1>
</body>
</html>
EOF
그럼 이제 인터넷에서 localhost를 쳐보자

이제 우리는 CGI 프로그래밍을 할 준비가 모두 되었다.
자 이제 한글이 깨지는걸 볼 수 있다 ㅋㅋㅋㅋㅋㅋ
한글 깨짐 해결 방법은 먼저 index.pl 의 인코딩을 UTF-8로 하고
print $q->header(-charset => "UTF-8");
위와 같이 헤더에 charset을 명시해준다.
웹의 기본인코딩은 UTF-8 이다!!
그리고 웹에서 보면 잘 보인다. 혹여나 이클립스 콘솔에서 한글이 깨진다면
Run Configurations 에 들어가서 common -> Encoding 을 UTF-8 로 바꾸면 된다.