PHP
PHP 시작하기
[시작하기 전에]

이 글은 "Kimho의 PHP5 웹프로그래밍" 책의 일부입니다.
책의 전체 내용은 구글 플레이 도서에서도 찾아보실 수 있습니다.
오디오 강좌는 이 곳 뿐만 아니라 팟캐스트를 통해서도 들으실 수 있습니다.


[오디오 강좌 듣기]


1. PHP 시작하기

이번 장은 PHP를 배우기에 앞서 PHP에 대해 소개하는 장이다. 

먼저 PHP가 어떻게 시작되어 지금까지 왔는지 PHP의 역사에 대해 알아 볼 것이다. 

그리고 PHP가 다른 언어들보다 더 좋은 이유에 대해서 설명할 것이다. 

그리고 나서 PHP의 실행구조와 PHP를 설치하는 방법을 알아볼 것이다.

이번 장에서 다루게 될 내용들은 다음과 같다.

  • PHP의 역사
  • PHP가 더 좋은 이유
  • PHP의 실행구조
  • PHP 설치하기
  • PHP 시작하기


PHP의 역사

오늘날 가장 강력한 언어중의 하나로서 자리잡은 PHP는 어떻게 발전하여왔을까? 

현재 PHP는 버전 5.0까지 출시 되어있으며, 구 버전의 PHP는 PHP 박물관 사이트인 http://museum.php.net/ 에서 찾아볼 수 잇다. 

여기서는 PHP의 등장과 그 발전과정을 알아보고자 한다.

[잠깐]
이 책을 쓰는 시점에는 PHP 최신 버전은 5였다. 현재는 PHP7 버전까지 출시되어있다.
참고로 PHP6 버전은 출시되지 않았다.


PHP 1.0

위대한 발명품들이 알고 보면 매우 간단한 아이디어에서 시작되듯이, PHP 역시 Rasmus Lerdorf라는 사람의 재미있는 아이디어로부터 비롯되었다. 

그는 자신의 홈페이지에 올려놓은 온라인 이력서의 접속자를 추적하기 위해 단순한 Perl 스크립트들을 만들어 두었다. 

그리고 이 스크립트들을 ‘Personal Home Page Tools 1.0’이라고 이름을 지었다. 

인터넷의 공유 정신을 지지했던 그는 1995년 그 PHP 1.0의 소스를 세상에 공개 하였다.

[잠깐]
참고로 다음은 Rasmus Lerdorf가 PHP 1.0을 뉴스그룹에 발표하면서 게재한 원문이다. 당시에 이 글을 게재하면서 지금처럼 PHP가 방대하게 쓰이게 될 것이라고 예상은 했었을까?
Announcing the Personal Home Page Tools (PHP Tools) version 1.0.
These tools are a set of small tight cgi binaries written in C.
They perform a number of functions including:
. Logging accesses to your pages in your own private log files
. Real-time viewing of log information
. Providing a nice interface to this log information
. Displaying last access information right on your pages
. Full daily and total access counters
. Banning access to users based on their domain
. Password protecting pages based on users' domains
. Tracking accesses ** based on users' e-mail addresses **
. Tracking referring URL's - HTTP_REFERER support
. Performing server-side includes without needing server support for it
. Ability to not log accesses from certain domains (ie. your own)
. Easily create and display forms
. Ability to use form information in following documents
Here is what you don't need to use these tools:
. You do not need root access - install in your ~/public_html dir
. You do not need server-side includes enabled in your server
. You do not need access to Perl or Tcl or any other script interpreter
. You do not need access to the httpd log files
The only requirement for these tools to work is that you have
the ability to execute your own cgi programs. Ask your system
administrator if you are not sure what this means.
The tools also allow you to implement a guestbook or any other
form that needs to write information and display it to users
later in about 2 minutes.
The tools are in the public domain distributed under the GNU
Public License. Yes, that means they are free!
For a complete demonstration of these tools, point your browser
at: http://www.io.org/~rasmus
--
Rasmus Lerdorf
[email protected]
http://www.io.org/~rasmus


PHP 2.0

PHP 1.0은 매우 인기를 끌게 되었고 사람들은 더 많은 기능을 요구하기 시작했다. 

이후 Rasmus는 HTML 형식의 데이터를 해석할 수 있는 별도의 패키지인 FI (Forms Interpreter)를 개발하였고 그것을 PHP와 결합시켜 PHP2 버전인 PHP/FI (Personal Home Page / Forms Interpreter) 2.0 을 공개하게 되었다. 

PHP/FI 2.0은 1997년 중반까지 약 50,000개의 웹사이트에서 사용하는 것으로 추정된다. 

사실 이 때까지만 해도 PHP/FI 2.0은 몇몇 사람의 공헌이 있었지만 대체적으로 Rasmus 한 사람의 프로젝트였다.


PHP 3.0

그러던 중 1997년, PHP는 결정적인 변환의 계기를 맞이하게 된다. 

이스라엘의 두 대학생인 Andi Gutmans 와 Zeev Suraski은 대학에서 온라인 장바구니 프로젝트를 진행하던 도중 우연히 PHP의 많은 버그들을 발견하였다. 

버그의 원인을 찾기 위해 PHP의 내부 소스 코드를 살펴보던 그들은 PHP가 일반적인 언어들과는 색다른 디자인으로 구성되어있는 것을 알게 되었다. 

그리고 그러한 독특함 때문에 많은 버그를 만들 수 밖에 없다는 사실을 깨달았다.

그리하여 몇 달에 걸친 고생 끝에 PHP의 내부 소스 코드를 재 작성하게 되었다. 

그들은 내부 소스 코드의 재 작성 사실을 PHP의 최초 개발자인 Rasmus에게 알려주면서 PHP/FI 2.0의 기존 방식을 포기하고 새로운 언어로서 PHP를 함께 개발할 것을 부탁하였다.

Rasmus가 이에 동의하였고, 이로 인해 오늘날 PHP Group이라 불리는 PHP의 코어 개발자들이 탄생하게 되었다. 

이 때의 PHP Group의 개발자들이란 앞서 나온 Andi Gutmans, Rasmus Lerdorf 그리고 Zeev Suraski를 비롯하여 다른 3명의 개발자인 Stig Bakken, Shane Caraveo 그리고 Jim Winstead 였다. 

이렇게 해서 팀이 결성된 지 7달 후인 1998년 6월, 알파와 베타 테스트를 거쳐 드디어 PHP 3.0이 탄생하였다. 

이 PHP 3.0이 오늘날의 PHP와 가장 가까운 모습을 갖춘 첫번째 작품인 것이다.

PHP 3.0은 이전 버전보다 훨씬 파워풀하고 확장적이기 때문에 PHP/FI 라는 이름이 지니는 제한적인 의미를 제거하고 이때부터 PHP를 PHP : Hypertext Preprocessor의 재귀적 약어로 명명하였다. 

즉, 여러분이 오늘날 말하고 있는 PHP는 PHP : Hypertext Preprocessor의 약어인 것이다.

[잠깐]
재귀적 약어란 무엇인가?
PHP는 ‘PHP : Hypertext Preprocessor’의 약어이다. 특이하게도 약어 안에 PHP라는 단어가 들어있어서 혼란스러울 수도 있다. 이와 같은 형식의 약어를 재귀적 약어(recursive acronym)라고 하는데, 오픈 소스를 의미하는 GNU도 이러한 방식을 사용하여 ‘GNU is Not Unix’의 약어로 사용되고 있다.


PHP 4.0

PHP3 버전의 훌륭함이 알려지기 시작하자 매우 많은 개발자들이 PHP3을 사용하게 되었다. 

그 수는 점점 증가하였고, 개발자들은 PHP3 기반에서 점점 더 복잡한 소스 코드를 만들기 시작하였다. 

그러나 애초에 PHP는 복잡한 소스 코드를 돌리기 위해 만들어진 것이 아니었다. 

따라서 소스가 복잡해질수록 그 실행 퍼포먼스는 줄어들 수 밖에 없었다. 

이에 PHP 3.0 버전이 출시된 지 얼마되지 않아 Zeev와 Andi는 PHP를 복잡한 환경에서도 뛰어난 퍼포먼스를 낼 수 있는 프레임워크를 개발하기로 하였다.


그리하여 1999년 1월 4일, Zeev와 Andi는 약속했던 대로 PHP 스크립트의 퍼포먼스를 극적으로 향상시킬 수 있는 새로운 프레임워크를 탄생시키게 되었다. 

그리고 이 새로운 프레임워크를 Zend 엔진 - Zeev와 Andi의 이름을 합성함 - 이라고 명명하게 되었다. 

그 후 2000년 5월, 이 Zend 엔진을 기반으로 하여 수행되는 PHP 4.0 버전을 공식적으로 출시하게 되었다.


Zend 엔진을 기반으로 한 PHP 4.0은 성능 면에서 비약적인 발전을 이룩한 것이었다. 

개발자들은 기존의 PHP3을 PHP 4.0 버전으로 업그레이드하여 설치하는 것만으로 PHP 스크립트의 실행속도를 상당히 향상시킬 수 있었다.

게다가 PHP 4.0의 또 다른 특징적인 향상은 상당히 개선된 모듈화에 있었다. 

따라서 PHP 4.0 은 필요할 때만 동적으로 모듈을 적재시킬 수 있는 기능을 갖추게 되었다.

또 하나의 개선점은 웹 서버 인터페이스의 향상이었다. 

기존 버전의 PHP는 아파치, 표준 CGI, fhttpd 등 세 가지의 웹 서버 인터페이스만을 지원했으나, PHP4에서는 MS사의 IIS를 위한 ISAPI와 넷스케이프 서버를 위한 NSAPI도 지원하게 되었다. 

즉, PHP 4.0은 기존 버전의 PHP에 비해 성능과 모듈화 면에서뿐만 아니라 이식성 측면에서도 많은 발전을 이룩한 것이었다.


PHP 5.0

이전 버전의 성공에도 불구하고 PHP3과 PHP4의 단점들을 제거하고 최고의 웹 스크립트 언어로서의 자리를 차지하기 위해 PHP5가 탄생하였다.

PHP5의 가장 두드러진 변화는 객체 지향 문법을 완벽하게 지원한다는 것이다. 

PHP3과 PHP4에서도 객체 지향 문법은 약간 있었으나 단지 클래스를 만들고 상속을 받는다는 기능 외에는 아무 것도 없었고 매우 미숙하였다. 

그럼에도 불구하고 이미 PHP4에서 객체 지향 프로그래밍이 활발하게 이루어지고 있었다. 

따라서 PHP5에서 객체 지향 문법을 제대로 지원해야 하는 것은 필수 불가결한 일이었을 것이다. 

이에 PHP5에서 객체 핸들이 다시 작성되었다.

이 책에서는 PHP5에서의 객체 지향 문법에 대해 [6장 클래스와 객체]에서 자세히 다루고 있다.


PHP5의 또 다른 변화는 XML 기능의 강화이다. 

PHP4에서의 XML은 표준이 제대로 지원되지 않았고 메모리를 많이 사용하여 성능이 그리 좋지 못했다. 

그러나 PHP5에서는 모든 XML 확장이 libxml2 XML 툴킷으로 재 작성하여 표준을 통합하였다. 

그리고 PHP에서 XML을 보다 쉽고 강력하게 사용할 수 있는 SimpleXML이라는 확장을 추가하였고 SOAP의 지원을 기본으로 포함시켰다. 

XML과 SOAP을 사용하는 웹 서비스에 대한 내용은 [16장 XML]과 [17장 웹 서비스]에서 자세히 다루고 있다.


그리고 PHP5에서는 MySQL 4.1 이상 버전에 맞춘 새로운 MySQL 확장을 지원하기 시작하였다. 

새로운 MySQL 확장은 MySQLi(MySQL Improved)라고 불린다. 

MySQLi는 기존 MySQL 확장의 기능들을 기본적으로 지원할 뿐만 아니라 객체 지향 인터페이스도 사용할 수 있게 되었다. 

그리고 Prepared Statement와 트랜잭션 제어 등 훨씬 다양하고 강력한 기능들이 추가되었다.

또한 SQLite라는 임베디드 SQL 라이브러리를 지원하기 시작하였다. 

SQLite는 SQL 서버를 필요로 하지 않는 데이터베이스이다. 

따라서 규모가 크지 않는 데이터베이스 환경에서 사용하기에 적합하다.

이 책에서는 MySQLi와 SQLite에 대해 [11장 데이터베이스]에서 자세하게 다루고 있다.

이밖에 Tidy 확장을 지원하여 HTML 문서를 표준에 맞게 관리할 수 있다.

또한 PHP5에서는 새로운 메모리 관리자를 가지고 있기 때문에 멀티 쓰레드 환경에 적합하고 메모리를 보다 효율적으로 관리하게 되었다.


PHP가 더 좋은 이유

PHP와 같은 성격의 언어로 C와 Perl을 비롯하여 Microsoft사에서 제공하는 ASP와 자바 진영의 JSP와 같은 것들이 있다. 

이들 역시 PHP처럼 강력한 기능을 가진 언어임에 틀림없다. 그럼에도 불구하고 여러분은 반드시 PHP를 배워야 하고 사용할 줄 알아야 할 것이다. 

왜냐하면 PHP는 여타의 언어들보다 훨씬 더 좋기 때문이다. 어떤 이유에서 일까?


먼저, PHP는 무료이다. 

PHP는 PHP의 홈페이지인 http://www.php.net 에서 무료로 다운로드 받을 수 있다. 

반면에 MS사의 ASP와 같은 경우, ASP를 사용하는 것 자체는 무료이지만 ASP는 IIS라는 유료 웹 서버 기반에서만 돌아가기 때문에 무료라고 할 수가 없다.

물론 PHP에서도 유지,보수나 디버깅과 관련해서는 돈을 지불해야만 할 수 있는 것들이 있다 – 주로 Zend라는 회사를 통해 구입한다. 

그러나 이것들은 PHP를 사용하기 위해 꼭 필요한 것은 아니며 좀 더 고급의 기술을 사용하고자 할 때만 구입하여 사용하는 것들이다. 

반면에 ASP에서는 상대적으로 기본적인 기술들에 대해서도 별도 컴포넌트의 구입을 요구하곤 한다 - 예를 들면 그래픽을 다루는 컴포넌트 같은 것들이다.


PHP는 플랫폼에 독립적이다. 

따라서 윈도우 환경이든 유닉스 환경이든 상관없이 거의 모든 플랫폼에서 동작할 수 있다. 

PHP는 아파치 웹 서버를 지원하며, 이외에도 IIS등과 같은 오늘날 대부분의 웹 서버와 함께 동작할 수 있다. 

따라서 PHP는 운영체제와 웹 서버를 선택하는 것으로부터 자유롭다. 

반면에 ASP의 경우 반드시 윈도우 환경에서만 적절하게 실행할 수 있다.

PHP의 내부 소스 코드는 수정이 가능하다. 

PHP의 내부는 C로 코딩 되어 있고 매우 잘 짜여진 인터페이스를 제공하고 있다. 

이 내부 코드가 공개되어있기 때문에 개발자는 필요에 따라 코드를 변경할 수 있다. 

이는 고급 개발자에게는 보다 막강한 기능과 기회를 선사하는 것이다.

그렇다고 초보 수준의 개발자에게는 도움이 되지 않는다는 얘기는 아닐 것이다. 

비록 아직은 내부 소스를 수정할 능력이 되지 않지만 그것이 공개되어있다는 사실 자체만으로도 마음만 먹으면 자신의 의지에 따라 PHP엔진을 보다 막강하게 만들 수 있다는 심리적인 자신감을 줄 수는 있을 것이다.


PHP는 웹 개발에 적합하다. C나 Perl 그리고 Java와 같은 언어도 웹 환경에서 사용할 수 있다. 

그러나 그것들은 본래 웹을 목적으로 사용되는 언어가 아니기 때문에 웹 환경에서 사용하기에는 개발이 복잡하며 성능이 떨어질 수 있다. 

그러나 PHP는 애초에 웹을 목적으로 개발된 언어이기 때문에 웹 환경에서 쉽고 빠르게 개발할 수 있으며 훨씬 뛰어난 성능을 낼 수 있다.


PHP는 그것을 사용하면서 발생하는 애로 사항들을 무료로 해결할 수 있다. 

무료로 해결할 수 있다는 말은 모든 발생 가능한 문제들을 웹에서 쉽게 찾을 수 있다는 의미이다. 

전 세계의 수많은 개발자들의 질문과 답변 그리고 팁과 강좌들이 인터넷상에 무수히 많이 퍼져있다. 

따라서 여러분은 PHP와 관련한 문제들을 인터넷상에서 쉽게 찾아 해결할 수 있다. 

특히 공식 홈페이지인 http://www.php.net에서는 PHP를 다운로드 받을 수 있을 뿐만 아니라 PHP 매뉴얼과 각종 관련 정보들을 접할 수 있다.


PHP는 대중적이며 널리 퍼져있다. 

오늘날 수많은 컨텐츠 제공 업체들이 PHP를 사용하고 있다. 

따라서 PHP로 개발하던 개발자는 다른 회사로 옮기더라도 계속해서 PHP로 개발할 수 있는 환경을 갖출 수 있다.

PHP는 다른 언어를 했던 사람들도 배우기 쉽다. 

PHP는 기본적으로 C와 Perl에서 영감을 받은 언어이기 때문에 그 형태가 C나 Perl과 매우 흡사하다. 

또한 PHP의 객체 지향 문법은 Java와 매우 유사하기 때문에 Java 언어를 사용했던 개발자들 또한 쉽게 PHP를 접할 수 있다.


PHP의 실행구조

PHP가 웹 서버를 통해 사용자의 브라우저 화면에 결과를 보여주는 실행 과정을 알아보자.


먼저 브라우저는 웹 페이지에 대한 사용자의 요청을 URL 주소로 찾은 웹 서버로 보낸다. 

사용자가 요청한 파일이 HTML 파일이면, 웹 서버는 해당 HTML 파일을 찾아 그 내용을 브라우저로 보내준다. 

그러면 브라우저는 웹 서버로부터 받은 HTML 태그와 자바스크립트 등을 해석하여 그 결과를 사용자에게 보여주게 된다.

만약 사용자가 요청한 파일이 PHP 파일이면, 웹 서버는 먼저 PHP 엔진을 통해 해당 파일의 PHP 스크립트를 실행한다. 

그러면 그 실행 결과가 HTML 파일이 되고 이 HTML 파일을 사용자의 브라우저로 보내게 된다. 

그러면 앞서와 마찬가지로 브라우저에서는 웹 서버로부터 받은 HTML 파일을 해석하여 그 결과를 사용자에게 보여주게 된다.

웹 서버측의 PHP 엔진에서 스크립트를 실행할 때, 확장 기능이 필요하면 확장 모듈에서 제공하는 기능을 사용하여 스크립트를 실행한다. 

확장 모듈은 데이터베이스와 연동하기도 하고 시스템의 각종 라이브러리를 가져와 사용하기도 한다.

이 과정을 나타낸 것이 [그림 1-1]과 같다.


[그림 1-1] PHP 엔진의 실행 구조


PHP 설치하기


[잠깐]
OS 버전이 올라가고 설치를 위한 다양한 유틸리티들이 제공되면서 설치 방법이 예전보다 많이 간단해지고 있다.
이 책에서는 리눅스 OS 버전에 상관없이 컴파일하여 설치하는 방법을 소개하고 있으나 컴파일 설치는 초심자가 보기에는 다소 어려울 수 있다. 
따라서 자신의 OS 환경 등에 맞게 인터넷에서 설치 방법을 찾아 설치하는 것이 더 간단하고 또한 권장하는 바이다.


PHP 시작하기

PHP는 어떻게 생겼는가

PHP는 HTML 파일에 태그 형태로 존재한다. 

HTML 태그는 <로 시작해서 >로 끝나는데 PHP 태그는 이와 구별되게 물음표를 붙여 로 끝나거나 혹은 로 끝난다. 다음 [예제 1-1]은 현재 날짜를 출력하는 PHP 파일이다.


[예제 1-1] 현재 날짜를 보여주는 PHP 파일

<html>
<head>
<title>현재 날짜</title>
</head>
<body>
현재 날짜 : <?php echo date("Y-m-d"); ?>
</body>
</html>


태그로 둘러싸인 부분은 서버 쪽의 PHP 파서에 의해 실행되어 현재 날짜를 넘겨줄 것이다. 

그 실행 결과가 HTML 형태로 브라우저에 전송되고 브라우저 화면에는 [그림 1-13]과 같이 현재 날짜가 출력된다.


[그림 1-13] 날짜가 출력된 결과 화면

그런데 PHP에서도 HTML에서와 마찬가지로 공백, 탭 키 그리고 엔터 키는 한 칸의 공백으로 인식된다. 

따라서 다음 [예제 1-2]의 실행 결과는 [예제 1-1]의 실행 결과와 같다. 


[예제 1-2] PHP 태그를 사용하는 다른 방식

<html>
<head>
<title>현재 날짜</title>
</head>
<body>
현재 날짜 :
<?php
echo date(“Y-m-d”);
?>
</body>
</html>

[예제 1-2]는 PHP 태그에 보다 많은 코드가 삽입될 때 사용하면 보기에 좀 더 수월하다.


PHP 스크립트 작성 도구

PHP 프로그램을 어떤 툴을 사용하여 개발할 지는 여러분의 자유이다. 

리눅스 환경이라면 vi 편집기를 사용할 수 있고, 윈도우 환경이라면 메모장을 사용하여 PHP 스크립트를 만들 수 있다. 

혹은 Edit Plus나 Ultra Edit같은 편집 툴을 사용해도 좋다.

 필자는 vi나 메모장보다는 막강한 기능을 가지고 있는 툴을 사용하여 PHP 프로그램을 개발할 것을 권장하는 바이다. 

특히 PHP5의 다양한 객체 지향 기능을 사용하려면 툴을 이용하는 것이 편리하다.

필자가 현재 사용하고 있는 개발 툴은 이클립스(Eclipse)이다. (최근엔 이클립스보다는 Sublime Text를 추천한다. 아래 [잠깐] 코너를 참고하기 바란다)

이클립스는 개발 통합 관리 툴로서 세계적으로 많이 사용되고 있는 일종의 플랫폼이다. 

원래 이클립스는 Java 개발을 주 목적으로 탄생하였지만 수많은 플러그 인이 지원되고 있기 때문에 다른 언어의 개발 툴로서도 많이 사용되고 있다. 

기본적으로 History 기능이나 CVS 등 다양하고 강력한 기능들을 제공하고 있을 뿐만 아니라 무료로 사용할 수 있기 때문에 필자가 강력히 추천하는 개발 툴이기도 하다. 

필자는 현재 이클립스에 PHP 플러그 인을 설치하여 사용하고 있다.

이클립스의 사용 방법에 대해서는 [21장 이클립스]에서 자세히 설명하고 있으므로 참고하기 바란다.


[잠깐]
이 책을 처음 쓸 시점에는 이클립스가 꽤 강력한 개발 툴이었다. 그러나 최근에는 가벼우면서 기능이 강력한 에디터들이 많이 나오고 있다.
근래에 가벼운 에디터로 필자가 추천하는 툴은 Sublime Text라는 툴이니 참고하기 바란다.
http://www.sublimetext.com/


댓글 0