[perl] Plack 서버

이제 PerlCGI 프로그래밍을 하기 위한 준비를 해보자.

우선 Perl 로 웹프로그래밍을 하게 해주는 모듈이 필요하다.

사실 PerlCGI 모듈을 사용하지 않아도 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개의 모듈들이 필요하다.

PlackPerl 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 로 바꾸면 된다.