PHP 개요

By | 2010년 9월 5일

인터넷 하면 생각나는 것이 바로 WWW(World Wide Web) 이다. 특히 인터넷의 속도가 빨라지면서 과거 문자 중심의 서비스를 넘어 그림, 동영상, 사운드 등과 같은 하이퍼 텍스트 서비스를 WWW를 통하여 제공하고 있다. 그러나 기존의 HTML을 기반으로 한 정적인 서비스는 사용자의 다양한 요구에 많은 한계를 보였으며 이러한 한계를 극복하고 동적인 서비스를 제공하기 위해 웹프로그래밍 기법이 개발되었다. PHP는 다양한 웹프로그래밍 개발 환경 중의 하나다. 이제부터 웹프로그램과 PHP의 기본 개념에 대해서 살펴보겠다.


웹프로그램이란
HTML을 이용해 홈페이지를 제작해본 사람은 대부분 자신의 홈페이지를 만들 때 방문 횟수를 나타내는 카운터 또는 게시판, 방명록과 같은 기능을 사용한 경험이 있을 것이다. 그러나 이런 기능들 예를 들면 방문 횟수를 표시하는 카운터는 인터넷 사용자가 홈페이지에 접속을 하면 그 값이 자동으로 증가되어 출력때문에 기존 HTML을 이용하여 만들 수는 없다. 즉 HTML은 정적인 홈페이지를 만들기에 적합하지만 동적인 홈페이지를 만들기에는 적합하지 않다. 그러므로 이러한 문제를 해결하기 위해 웹프로그래밍 개념이 등장 하였다.
과거 웹프로그램은 CGI 규약을 따라 작성했다. CGI란 Common Gateway Interface의 약자로 웹서버와 일반 프로그램 사이의 통신을 위한 인터페이스 규약을 말한다. 이 규약을 통해 웹서버는 일반 프로그램을 실행시킬 수 있으며 그 출력을 웹 서버를 통해 인터넷 사용자에게 전달할 수 있다. 이 규약을 따른다면 어떠한 프로그래밍 언어를 사용해도 웹프로그램을 작성 가능하하게 해 준다. 그러므로 C, C++ 등과 같은 일반적인 프로그래밍 언어에서부터 Perl 이나 Shell Script 언어까지 표준 입출력 기능을 제공한다면 관계없이 웹 프로그램을 작성할 수 있다. 그러나 일반 프로그램과는 달리 웹프로그램이 실행된 결과가 웹브라우저를 통해 보여지므로 그 결과가 웹브라우저가 인식할 수 있는 HTML 형식으로 출력이 되도록 작성해야 한다.

그러면 실제로 HTML 및 기타 다른 언어를 사용하여 구구단을 출력하는 프로그램을 작성해 보겠다. 우선 출력되는 결과는 다음 그림과 같다. 

exam1-1.html”]

■ HTML을 이용한 구구단
[그림 1-1]을 HTML을 이용하여 작성하면 다음과 같다. 참고로 이 글에서는 HTML 및 각 프로그래밍 언어의 문법에 대해서는 다루지 않고 나중에 HTML의 기본적인 태그들만 다루도록 하겠다. 
<!– exam1-1.html –>
<center>
<u>구구단</u>
<p>
</p>
<table border=”1″>
    <tbody><tr>
        <td>2*1=2</td>
        <td>2*2=4</td>
        <td>2*3=6</td>
        <td>2*4=8</td>
        <td>2*5=10</td>
        <td>2*6=12</td>
        <td>2*7=14</td>
        <td>2*8=16</td>
        <td>2*9=18</td>
    </tr>
    <tr>
        <td>3*1=3</td>
        <td>3*2=6</td>
        <td>3*3=9</td>
        <td>3*4=12</td>
        <td>3*5=15</td>
        <td>3*6=18</td>
        <td>3*7=21</td>
        <td>3*8=24</td>
        <td>3*9=27</td>
    </tr>
    <tr>
        <td>4*1=4</td>
        <td>4*2=8</td>
        <td>4*3=12</td>
        <td>4*4=16</td>
        <td>4*5=20</td>
        <td>4*6=24</td>
        <td>4*7=28</td>
        <td>4*8=32</td>
        <td>4*9=36</td>
    </tr>
    <tr>
        <td>5*1=5</td>
        <td>5*2=10</td>
        <td>5*3=15</td>
        <td>5*4=20</td>
        <td>5*5=25</td>
        <td>5*6=30</td>
        <td>5*7=35</td>
        <td>5*8=40</td>
        <td>5*9=45</td>
    </tr>
    <tr>
        <td>6*1=6</td>
        <td>6*2=12</td>
        <td>6*3=18</td>
        <td>6*4=24</td>
        <td>6*5=30</td>
        <td>6*6=36</td>
        <td>6*7=42</td>
        <td>6*8=48</td>
        <td>6*9=54</td>
    </tr>
    <tr>
        <td>7*1=7</td>
        <td>7*2=14</td>
        <td>7*3=21</td>
        <td>7*4=28</td>
        <td>7*5=35</td>
        <td>7*6=42</td>
        <td>7*7=49</td>
        <td>7*8=56</td>
        <td>7*9=63</td>
    </tr>
    <tr>
        <td>8*1=8</td>
        <td>8*2=16</td>
        <td>8*3=24</td>
        <td>8*4=32</td>
        <td>8*5=40</td>
        <td>8*6=48</td>
        <td>8*7=56</td>
        <td>8*8=64</td>
        <td>8*9=72</td>
    </tr>
    <tr>
        <td>9*1=9</td>
        <td>9*2=18</td>
        <td>9*3=27</td>
        <td>9*4=36</td>
        <td>9*5=45</td>
        <td>9*6=54</td>
        <td>9*7=63</td>
        <td>9*8=72</td>
        <td>9*9=81</td>
    </tr>
</tbody></table>
</center>
 [프로그램 1-1] exam1-1.html 
자 여기서 잠깐. 위 프로그램을 수정하여 1000×1000 개의 곱셈표를 만들려면 어떨까? 못 만들 것을 없지만 대단한 수고를 해야 할 것이다. 하지만 웹프로그램을 이용하여 만든다면 쉽게 확장할 수 있다.

■ C언어를 이용한 구구단
그러면 HTML이 아닌 일반적인 프로그래밍 언어를 이용하여 위의 결과와 같은 구구단 프로그램을 작성해 보자. 앞서 언급한 것과 같이 결과가 웹브라우저를 통해 보여지므로 어떠한 프로그래밍 언어를 사용한다고 해도 위의 mux.html과 같은 형태의 출력 결과가 나오도록 프로그래밍 하면 된다. 아래 프로그램은 C언어를 이용하여 작성한 프로그램이다. 
/* exam1-2.c */
#include <stdio.h>
main()
{
    int i, j;
    printf(“Content-type: text/html\n\n”);
    printf(“\n”);
    printf(“\n”);
    printf(“\n”);
    printf(“\n”);
    printf(“\n”);
    printf(“</stdio.h></div>
<div><stdio.h><center>\n”);
    printf(” <u>구구단</u>\n”);
    printf(” <p>\n”);
    printf(” </p>
\n”);
    for(i = 2; i <= 9; i ++) {
        printf(” \n”);
        for(j = 1; j <= 9; j ++) {
            printf(” \n”,i, j, i*j);
        }
        printf(” \n”);
    }
    printf(” <table border=”1″>
<tbody><tr>
<td>%d*%d=%d</td>
</tr>
</tbody></table>
\n”);
    printf(” </center>\n”);
    printf(“\n”);
    printf(“\n”);
}&nbsp;</stdio.h></div>
<div><stdio.h><br />
</stdio.h></div>
<div><stdio.h>&nbsp;
[프로그램 1-2] exam1-2.c
C언어를 아는 독자들은 위 프로그램의 결과가 첫번째 라인의 Content-type: text/html 부분을 제외한 나머지 실행 결과는 exam1-1.html과 동일함을 알 수 있다. 이 프로그램을 컴파일한 후 실행 파일을 웹서버 설정에 맞도록 적절히 연결하여 실행하면 바로 [그림 1-1]과 같은 결과를 볼 수 있다.
위 프로그램에서 Content-type: text/html 부분은 http 접속시 웹서버가 브라우저에게 지금부터 전송하는 내용이 텍스트로 된 HTML 데이터라는 것을 알려주는 것으로 흔히 헤더정보라 불리는 정보의 일부분이다. 만약 이 부분이 없다면 브라우저는 지금 전달받는 데이터가 HTML을 위한 내용인지, 이미지를 위한 내용인지 또는 사운드를 위한 내용인지 알 수 없을 것이다. 헤더 정보는 웹서버의 종류, 현재 브자우저로 보내지는 데이터의 형식(텍스트, 이미지, 사운드 등), 만들어진 날짜 등과 같은 정보를 포함하기도 한다.
우리가 웹브라우저에서 HTML 또는 소스 보기 메뉴로는 HTML 내용만 볼 수 있을뿐 헤더정보를 확인할 수 없지만 실제로는 HTML 전에 필요한 헤더 정보를 보낸 후에 HTML 내용을 보낸다. 모든 헤더정보를 확인할 수는 없지만 브라우저의 페이지 속성 메뉴를 클릭하면 형식, 프로토콜, 만든날짜와 같은 몇몇 헤더정보의 내용은 확인할 수도 있다. 그러므로 PHP, ASP, JSP 등과 같은 웹프로그래밍 전용 개발도구(언어)가 아닌 일반 프로그래밍 언어를 이용하여 웹프로그램을 작성할 때는 반드시 헤더정보 Content-type: text/html를 가장 먼저 출력해야 한다. 이때 주의할 사항은 이 헤더정보를 보낸 후 반드시 두개의 개행문자(\n) 즉 하나의 빈 줄을 삽입해야 한다. 
위 프로그램에서 짙은 회색 부분으로 된 두 개의 9를 1000으로 바꾼다면 1000×1000 곱셈표를 얻을 수 있다.
■ Perl을 이용한 구구단
다음은 CGI 프로그램 개발을 위해 많이 사용되었던 Perl을 이용하여 구구단을 작성해 보자. Perl 역시 헤더정보를 먼저 출력한 후 한 줄을 띄고 HTML 부분을 출력하도록 프로그램을 작성하면 된다. 
#!/usr/bin/perl
#exam1-3.pl
print “Content-type: text/html\n\n”;
print “\n”;
print “\n”;
print “\n”;
print “\n”;
print “\n”;
print ” <center>\n”;
print ” <u>구구단</u>\n”;
print ” <p>\n”;
print ” </p>
\n”;
$i = 2;
while ($i <= 9) {
    print ” \n”;
    $j = 1;
    $m = $i * $j;
    while ($j <= 9) {
        print ” \n”;
        $j ++;
    }
    print ” \n”;
    $i ++;
}
print ” <table border=”1″>
<tbody><tr>
<td>$i*$j=$m</td>
</tr>
</tbody></table>
\n”;
print ” </center>\n”;
print “\n”;
print “\n”;
 
[프로그램 1-3] exam1-3.pl
이 때 Perl과 같은 스크립트 언어는 프로그램의 첫 줄에 Perl 스크립트 엔진(Perl 프로그램)의 위치를 주석 처리하여 알려줘야 한다. 이처럼 웹프로그래밍을 위한 몇가지 규칙을 잘 따른다면 기타 다른 일반 프로그래밍 언어로도 위와 같은 구구단을 작성할 수 있다. 그러면 위 프로그램의 어느 부분을 바꿔야 1000×1000 곱셈표를 얻을 수 있을까? 각자 생각해 보자.
PHP
앞서 살펴본 바와 같이 일반 프로그래밍 언어를 이용하여 웹프로그램을 개발할 때 헤더정보를 포함해야 하는 등의 많은 번거로움과 어려움이 존재한다. 따라서 많은 웹프로그램 개발자들에게 비교적 쉽고 편리한 도구(언어)가 요구되었으며 그 결과 다양한 웹프로그램 전문 개발 도구들이 등장 하였다. PHP는 그 중 하나로 많은 웹프로그램 개발자들이 이용하고 있다. 그러면 PHP에 대한 전반적인 개요에 대해 간단히 살펴 보자.
■ PHP 개요
우리가 홈페이지를 만들 때 일반적으로 사용하는 HTML과 자바스크립트와 같은 언어는 넷스케이프와 같은 웹 브라우저에 의해 해석되고 실행되는 스크립트 언어이다. 반면 PHP는 서버에서 해석되는 server-side HTML-embedded scripting language 이다. 이 의미는 HTML 내부에 PHP 프로그램이 위치하여 웹 서버가 프로그램 부분을 해석 실행한다는 의미이다. 이와 같은 종류의 언어로는 마이크로소프트의 ASP(Active Server Page)와 같은 것이 있다. 그러나 ASP가 Windows/NT에서만 동작하는 반면 PHP는 Windows/NT는 물론 UNIX, Linux와 같은 다양한 OS에서 동작한다. 그러므로 최소한의 개발비용으로 여러 환경에서 수행되는 웹프로그램을 작성할 수 있다. 또한 PHP는 인터넷만 사용 가능하다면 무료로 다운로드 받을 수 있기 때문에 상업적 목적 또는 비상업적 목적 어떠한 경우에도 PHP를 구입하는데 전혀 비용이 소요되지 않는다. PHP의 또 다른 특징으로는 다양한 데이터베이스와 연동이 가능하다는 것을 들 수 있다. 현재 PHP가 지원하는 대표적인 데이터베이스로는 Oracle, Sybase, mysql, MySQL, Solid, ODBC, PostgreSQL, Adabas D, FilePro, Velocis, Informix, dBase, Unix dbm, MSSQL 등이 있다. 여기서는 이들 데이터베이스 중 mysql과의 연동에 대해서 살펴보도록 하겠다. 그러나 다른 데이터베이스들도 그 개념이 유사하므로 큰 어려움 없이 사용이 가능할 것이다.
■ PHP의 역사
PHP는 Rasmns Lerdorf 라는 사람이 자신의 홈페이지에 개인적인 용도를 위해 처음 만들어진 것으로 첫 비 공개판은 그의 홈페이지에 사용되었고, 외부에 사용된 것은 1995년 초부터 사용되어 Personal Home Page Tools라고 불리게 되었다. 이것은 몇 개의 특별한 매크로를 사용할 수 있는 단순한 파서(명령 해석기) 엔진과 방명록이나 카운터 같이 홈페이지의 뒤에서 공통적으로 사용할 수 있는 몇 개의 간단한 유틸리티로 구성되었다. 이 파서는 1995년 중반에 재 작성되어 PHP/FI Version 2라고 명명되었다. FI는 Rasmus가 작성한, html 형식의 데이터를 해석할 수 있는 별도의 패키지를 의미한다. 그는 이 두 가지를 합치고 mysql을 지원하도록 하여 PHP/FI를 탄생시켰다. PHP/FI는 빠른 속도로 발전하였고, 많은 사람들이 이에 공헌하였으며, 정확한 통계는 없지만 1996년 후반 PHP/FI는 전세계적으로 최소한 15,000개 이상의 웹사이트에서 사용되는 것으로 추정되었고, 1997년 중반에 그 수는 50,000으로 늘어났다. 1997년 중반 PHP는 또 다른 중요한 변화를 가져오게 되었다. 이때부터 PHP는 Rasmus의 개인이 아닌 팀에 의해 개발되고 있으며, 새 파서는 Zeev Suraski와 Andi Gutmans가 재 작성되었고, PHP Version 3라는 이름으로 탄생 하였다. 그러나 PHP 스크립트가 복잡해지면 수행 속도가 급격히 떨어지는 등 몇몇 문제점이 나타나기 시작하자 이러한 문제점을 보완하기 위해 PHP의 핵심인 스크립트 번역 부분이 ZEND라는 이름으로 새롭게 재 작성되어 PHP 4로 불리기 시작한 후 현재 PHP 5 까지 발전하였다.
■ PHP를 이용한 구구단
그러면 과연 PHP를 이용해서는 구구단 프로그램을 어떻게 작성할까? PHP는 웹프로그램 개발을 위한 전용 도구(언어)이므로 일반 프로그래밍 언어에 비해 비교적 쉽게 웹프로그램을 개발할 수 있다. 또한 일반적인 헤더정보를 자동으로 처리하므로 특수한 경우를 제외하고는 신경 쓸 일이 없다. 아래 프로그램은 PHP로 작성된 구구단 이다.
<!– exam1-4.php –>
<HTML>
<HEAD>
<TITLE>구구단</TITLE>
</HEAD>
<BODY>
<CENTER>
<U>구구단</U>
<P>
<TABLE BORDER=”1″>
<?php
for($i = 2; $i <= 9; $i ++) { 
    print ” <TR>\n”;
    for($j = 1; $j <= 9; $j ++) {
        print ” <TD>$i*$j=”.$i*$j.”</TD>\n”;
    }
    print ” </TR>\n”;
}
?>
</TABLE>
</CENTER>
</BODY>
</HTML>
[프로그램 1-4] exam1-4.php
PHP는 앞서 언급한 바와 같이 server-side HTML-embedded scripting language 이다. 즉 HTML 코드 내부에 PHP 프로그램 부분이 삽입되어 있는 형태를 취한다. 그러면 이제부터 PHP의 자세한 내용을 살펴보도록 하자.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.