Web Programming >> PHP Programming
|
[목차] |
제1장 PHP의 소개 및 설치하기
1. PHP의 소개 1.1. PHP란 무엇인가
? 1. 서버에서 해석되는
스크립트 언어입니다. 우리가 일반적으로 많이 사용하고 있는 HTML이나 자바 스크립트 같은 언어 들은 클라이언트 즉, 웹 브라우저에서
해석되는 스크립트 언어입니다. 그래서 우리는 이런 언어로만 작성된 홈페이지라면 언제든지 소스를 그대로 볼 수 있습니다.(다들 알겠지만
브라우저마다 소스보기 옵션이 있습니다.) PHP(HyperText Preprocessor)는 이런 클라이언트(웹 브라우저)에서 해석되는 언어가 아닙니다.
PHP를 한마디로 말하면 서버에서 해석되는 스크립트 언어입니다. 이와 같은 종류의 언어로는 마이크로 소프트의 ASP(Active Server
Page)와 같은 것이 있는데 역시 서버에서 해석되는 스크립트 언어입니다. 이런 서버용 언어는 C나 Perl등으로 만들었던 CGI 프로그램과
마찬가지로 서버에서 해석되고 그 결과 만을 HTML 형태로 만들어서 클라이언트로 보내주기 때문에 클라이언트(웹 브라우저)에서는 내부 소스코드를
볼 수가 없습니다. 이것은 보안 상으로도 상당히 중요한 장점을 가진 것입니다. 이러한 클라이언트와 서버용 스크립트의 차이점을 좀더 확실히 알아보기 위해서 각각의 코드들이 해석되는 과정을
그림으로 나타내어 보았습니다. 이것은 HTML이나 Javascript같은 언어들이 해석되는 과정을 보여주고 있는 것인데, 우선 클라이언트는
웹서버에 접속해서 사용자가 입력한 특정 URL을 요청합니다.(서비스 요청) 이때 웹서버는 요청받은 URL을 찾아서 어떤 언어로 만들어 졌는지
확인합니다. 만일 HTML이나 자바스크립트같은 언어로 만들어져 있다면 서버에서 해석하지 않고 그대로 클라이언트(웹브라우저)로 보냅니다.
웹브라우저에서는 전달 받은 페이지를 자체 해석 엔진을 통해 해석해서 사용자 화면에 보여 줍니다.
이것은 PHP와 같은 서버용 스크립트가 해석되는 과정을 보여주고 있는데, 우선 클라이언트는 웹서버에 접속을 해서
사용자가 입력한 특정 URL을 요청합니다.(서비스 요청) 이때 웹서버는 요청받은 URL을 찾아서 어떤 언어로 만들어졌는지 확인한다. 만일 PHP
언어로 만들어져 있다면 서버에서 가지고 있는 PHP 해석 엔진으로 보낸다. 해석 엔진에서는 해당 코드를 해석해서 결과를 웹서버로 보내게 되고 웹
서버는 전달 받은 결과를 그대로 클라이언트(웹브라우저)로 전달해 준다. 이러한 두가지 종류의 스크립트 언어는 서로 보완적인 관계를 가지면서 웹 사이트를 구성하는 경우가 많은며 PHP는
주로 기능적인 면에 중점을 두고 작성이 된다. 2. 데이터베이스 연결이
쉽습니다. 우리가 인터넷을 통해서 웹사이트를 구축하고자 할 때 상업적이건 비 상업적이건 데이터베이스의 연결은 거의 필수적인
것이 되었습니다. PHP가 나오기 전에는 데이터베이스의 연동을 위해서 C나 Perl과 같은 언어를 통해서 CGI 프로그래밍을 하였습니다. 하지만
이러한 프로그래밍을 해본 사람이라면 느꼈겠지만 여간 까다로운 것이 아니며 상당한 시간과 노력을 필요로 했다. 특히 다른 종류의 데이터베이스를
서로 연결한다고 했을 때는 기존의 CGI 방식은 고도의 테크닉을 필요로 했습니다. 하지만 PHP에서는 데이터 베이스의 연결이 너무도 쉽게 되어 있습니다. 어떠한 초보자라 할지라도 쉽게 데이터
베이스에 연결해서 데이터 관리를 할 수 있도록 인터페이스가 너무도 깔끔합니다. 실제 PHP에서 지원하는 데이터 베이스의 예는 다음과
같습니다. Oracle, Sybase, mSQL, MySQL, Solid, ODBC, PostgreSQL, Adabas D,
FilePro, Velocis, Infomix, dBase, Unix dbm 예에서 보면 알겠지만 우리가 사용하는 거의 모든 데이터베이스가 포함되어 있습니다. 그리고 PHP의 버전이
올라가면서 더 많은 데이터베이스의 연결도 가능해지고 있습니다. PHP와 데이터베이스의 연결구조를 데이터베이스로 나타내면 아래 그림과 같은데 로컬
서버에 있는 데이터 베이스 뿐만 아니라 원격지에서도 직접 접근이 가능합니다. 3. UNIX와 Windows
환경 모두에서 사용 가능합니다. PHP 언어는 유닉스 환경과 윈도우 환경에서 동작하는 대부분의 웹서버를 지원합니다. 유닉스 환경에서는 아파치 웹
서버에 모듈 형식으로 붙을 수도 있고 CGI처럼 동작할 수도 있습니다. 윈도우 환경에서 IIS(Internet Information
Server)나 PWS(Personal Web Server)와 같은 웹서버에 CGI 방식이나 멀티스레딩(Multi-Threading)방식으로
동작할 수 있습니다. 좀더 정확한 이해를 위해서 멀티플랫폼 지원을 그림으로 나타내면 아래 그림과 같습니다. 이런한 다중 환경을 지원할 뿐만 아니라 코드 상으로도 크게 다르지 않은 일관성이 유지되고 있다는 점에서 개발자와
서비스 제공자의 만족을 한층 더 높이고 있습니다. 실제 아파치 서버에 동작 하도록 만든 PHP 코드를 윈도우의 IIS로 포팅한다고 했을 때
새롭게 코드를 작성하는 것이 아니라 대부분의 이전 코드를 재 활용할 수 있으며 달아지는 데이터베이스 인터페이스 부분만 바꾸어 주면
됩니다. 4. 코드 작성이 쉽고
간단합니다. PHP 언어는 다른 스크립트 언어처럼 사용하기 쉬우면서 기존의 C나 Perl로 작성하던 CGI 프로그램들을 똑같이
구현할 수 있습니다. 문법이나 구조를 보면 Perl언어와 C 언어를 섞어 놓은 모양을 이루고 있습니다. 기존의 언어 사용자들이 좀 더 친숙하게
사용하기 위해서 언어를 이렇게 구성하지 않았나 생각합니다. PHP 언어의 생김새를 보기 위해서 다음에 데모 코드를 작성해 보았습니다. 코드 작성에 대한 문법 사항과 구조에
대해서는 나중에 자세히 다룰 것입니다. 여기서는 그저 맛보기로만 봐주길 바랍니다. <? PHP /* 이것은 카운터 프로그램입니다. 사용자의 접속 수를 카운터하고 화면으로 보여주는 기능을 합니다. */ $DataFile = "counter.data"; if(file_exists($DataFile)) { $fp = fopen($DataFile, 'r'); $buffer=fread($fp, filesize($DataFile)); fclose($fp); $count = intval($buffer); } else { $count = 0; } $count = $count + 1; $fp=fopen($DataFile, 'w'); fwrite($fp, $count); fclose($fp); echo "당신은 $count 번째 방문한 손님입니다. "; ?> // PHP의 끝을 표시 1.2. PHP의 탄생
배경 PHP는 1994년 가을 Rasmus Lerdorf라는 한 개인에 의해서 처음 만들어 졌습니다. 처음 비 공개
판은 그의 홈페이지에 들어와서 자신의 이력서를 검색하는 사용자를 체크하는 데 사용되었고, 외부에 사용된 것은 1995년 초부터 사용되어
Personal Home Page Tools라고 알려지게 되었습니다. 이것은 몇 개의 특별한 매크로를 사용할 수 있는 단순한 파서(명령해석) 엔지과 방명록이나 카운터같이 홈페이지의
뒤에서 공통적으로 사용할 수 있는 몇 개의 간단한 유틸리티로 구성되었습니다. 이 파서가 1995년 중반에 재작성되어 PHP/FI Version
2라고 명명되었습니다. FI는 Rasmus가 작성한 HTML형식의 데이터를 해석할 수 있는 별도의 패키지였습니다. 그는 이두가지를 합치고
mSQL을 지원하도록 하여 PHP/FI를 탄생시켰습니다. PHP/FI는 빠른 속도로 발전하였고, 많은 사람 들이 이에
공헌하였습니다. 정확한 통계는 없지만 1996년 후반 PHP/FI는 전세계적으로 최소한 15,000개 이상의 웹사이트에서 사용되는
것으로 추정되었고, 1997년 중반에 그 수는 50,000개로 늘어났습니다. 1997년 중반 PHP는 또단른 중요한 변화를 가져왔습니다.
이때부터 PHP는 Rasmus의 개인이 아닌 팀에 의해 개발되게 되었습니다. 새파서는 Zeev Suraski와 Adni Gutmans에 의해 재
작성되었고, PHP Version 3(PHP3)라는 이름으로 나타났습니다. 많은 PHP/FI의 기능들이 옮겨왔고, 그외에도 많은 기능 들이 새로
작성되었습니다. 1998년 중반에는 PHP/FI나 PHP3는 C2의 StrongHold 웹서버나 레드햇 리눅스와 같은 여러
상업적인 제품과 함께 제공되었으며, 전세계적으로 최소한 150,000개의 웹사이트에서 사용하게 되었습니다. 이 수는 인터넷에서 넷스케이프의
flagship Enterprise server의 사용 수보다 많을 것입니다. 현재 만들어지고 있는 차기 버전은 'Zend'라는 이름의 PHP version 4로써 이전 버전 보다 훨씬 더
빠른 인터프리터(명령어 해석기)를 가지고 있으며 현재 지원하고 있는 웹서버이외의 서버에 대해서도 실행될 수 있도록 제작되고
있습니다. 위의 내용은 현재의 PHP3 형태를 만든 An야 Gutmans가 소개한 글을 참조하였습니다. 1.3. PHP로 무엇을 할 수 있는
가 ? 우리가 알고 있는 대부분의 웹 에플리케이션들은 PHP를 이용해 구현이 가능합니다. 간단하게는 접속자의 수를 체크해
주는 카운터 기능에서부터 웹 BBS, 웹 메일 서버, 대형 사이버 쇼핑몰에 이르기 까지 그 응용 분야는 무궁무진하다고 할 수 있습니다. 특히나
PHP의 빠른 수행속도와 다양한 데이터베이스 지원, 멀티 플랫폼의 지원 등은 상업적인 웹서버를 구축하는데 있어서도 손색이 없습니다.
1.4. PHP는 얼마인가
? PHP를 어디서 얼마 주고 살 수 있는지 궁금해하는 사람들도 있을 것입니다. 하지만 PHP는 공짜입니다.
상업적으로 사용하건, 비상업적으로 사용하건 무조건 공짜입니다. 이러한 사실은 윈도우 계열(비 유닉스 계열)의 프로그램만 사용하는 사람들에게는
너무도 낯선 사실일 것입니다. 혹자는 "혹시 이렇게 공짜로 배포해 놓고 나중에 버전업하면서 돈 받아 먹는 거 아냐 ? 나 그런 것 많이 봤는데
..." 이렇게 생각할 지도 모르겠습니다. 필자도 그런 것을 많이 봤습니다. 회사가 존재하는 이유는 결국 이윤 추구이며 이를 위해 양의 얼굴이 되었다가 또 늑대의 얼굴이 되었다가 하는 것은
하나의 마케팅 전략입니다. 살아납기 위한 이러한 행동들을 인정 못하는 것은 아닙니다. 하지만 세상에는 진정한 정보 공유와 순수한 개발 목적을
위해서 프로그램을 만드는 해커들과 그 정신(GNU 정신)을 추종하는 많은 사용자들이 있습니다. 대표적인 예를 들자면 '리눅스'가 있습니다.
헬싱키의 한 대학생에 의해서 처음 만들어 졌지만 이것이 세상에 공개되고 수많은 해커들의 손을 거치면서 지금의 뛰어난 성능을 가진 '리눅스'가
되었습니다. PHP는 이러한 돈으로는 살 수 없는 위대한 정신으로 만들어졌습니다. 어떠한 상업적 프로그램보다도 뛰어나다고
생각합니다. 1.5. CGI와 PHP의 차이는
무엇인가 ? 사실 "CGI와 PHP의 차이는 무엇인가 ?"라는 질문은 조금 모순이 됩니다. 왜냐하면 PHP와 CGI는 서로
상대적인 개념이 아니기 때문입니다. 하지만 이렇게 제목을 정한 이유는 필자가 이러한 질문을 많이 받았기 때문이고 또 CGI 방식과 PHP 동작
방식은 상당히 많은 관련성을 가지고 있기 때문입니다. 우선 CGI가 무엇인지 그리고 동작 원리가 어떠한 방식인지를 먼저 알아보고 PHP의 동작원리를 알아 보겠습니다.
그리고 마지막으로 PHP로 작성된 프로그램과 기존의 언어로 작성된 CGI프로그램의 동작 차이를 비교해 보겠습니다. 1. CGI의 동작
원리 CGI라는 것은 Common Gate Interface의 약자로서 웹서버(아파치, IIS 등등)와 외부
프로그램간의 연결을 위한 인터페이스입니다. 여기서 말하는 외부 프로그램을 우리는 흔히 'CGI 프로그램'이라고 하고 지금까지 이러한 CGI
프로그램은 주로 C나 C++, Java, Perl, Tcl/Tk 같은 언어들로 만들어왔습니다. 일반적으로 CGI를 구현한 형태는 웹서버가 클라이언트(웹브라우저)로 FORM 문을 보내고 사용자가 어떤 입력을
하면(서비스 요청) 그 입력 값들은 웹 서버로 보내지게 됩니다. 웹서버에서는 CGI프로그램을 실행시키면서 사용장로부터 전달받은 값을 넘겨
줍니다. 이렇게 값을 전달받은 CGI 프로그램은 일정한 내부 수행을 하고 결과를 웹서버로 보내게 되고 웹서버는 그결과를
클라이언트(웹브라우저)로 보내면서 하나의 작업이 끝나게 되는 것입니다. 이러한 CGI 사용 방식을 그림으로 나타내면 다음과
같습니다. 2. PHP의
동작원리 PHP도 이러한 CGI 방식으로 동작할 수 있지만 아파치 서버에서 사용될 때는 주로 PHP 해석 엔진이 아파치
모듈의 형태로 붙어서 동작하게 됩니다. 이 방식이 훨씬 많은 이점을 가질 수 있습니다. 이러한 동작 방식을 그림으로 나타내면 다음과
같습니다. PHP는 이러한 웹서버 모듈로 동작하면서 데이터 베이스를 직접적으로 접근할 수 있으며 다른 외부의 프로그램도
실행시킬 수 있습니다. 여기서 모듈로 동작한다는 말은 웹 서버가 실행될 때 PHP해석엔진 자체가 같이 실행되면서 메모리로 로드된다는 말입니다.
이러한 모듈 방식은 다중 사용자가 접속했을 때 CGI 방식에 비해서 빠른 실행 속도와 함께 서버의 부하를 줄일 수 있습니다.
3. PHP와 CGI 프로그램
동작의 차이점 여기서 CGI 프로그램은 가장 대표적인 형태라고 할 수 있는 C언어로 작성된 CGI 프로그램을 예로 해서 PHP
프로그램과 비교해 보겠습니다. ● 컴파일러 VS, 인터프리터 C로 만들어진 프로그램 코드는 C 컴파일러에 의해서 컴파일되고 결과는 바이너리로 구성된 CGI 실행 파일이
됩니다. 하지만 PHP는 인터프리터 언어이기 때문에 컴파일 과정 같은 것이 필요없습니다. 코딩된 텍스트 파일 자체가 CGI 프로그램이 되는
것입니다. ● 프로그램의 실행 C로 만든 CGI 프로그램의 경우에는 이미 바이너리로 구성되어 있기 때문에 바로 메모리로 로드되어서 실행됩니다.
하지만 PHP프로그램은 PHP인터프리터에 의해서 해석이 되면서 실행이 됩니다. ● 실행 속도 실행속도는 주어진 조건과 프로그램의 종류에 따라서 다르기 때문에 일률적으로 어느 쪽이 빠르다고 말 할 수는 없습니다. 하지만 다중 사용자들이 접속했을 때는 일반적으로 PHP가 더 빠른 속도를 냅니다. 그 이유은 다음과 같습니다. CGI 프로그램을 사용할 경우는 사용자 수가 증가하면 증가할수록 해당 프로세스가 똑같이 증가하며 각 프로세스는
자신의 파일을 메모리로 올리게 됩니다. 이렇게 많은 데이터는 한 번에 메모리로 올릴 수 없고 서로 순서를 지켜서 올렸다 내렸다 하기 때문에 실행
속도가 급속도로 떨어지게 되며 서버자체에도 많은 부하를 주게 됩니다. 하지만 PHP의 경우에는 사용자 수가 증가하더라도 인터프리터 해주는 엔진
프로세스는 하나이며, 코드자체도 텍스트로 이루어진 작은 크기의 파일들이기 때문에 실행 속도가 크게 떨어지지 않으며 서버에도 부하를 덜 주게
됩니다. ● Client Side Script와 의 혼용 여기서 말하는 Client Side Script(CSS)라는 것은 HTML이나 Javascript같은
클라이언트(웹브라우저)에서 해석되는 언어를 말합니다. CGI의 경우에는 C 코드 내부에서만 이러한 CSS를 사용할 수 있는 반면에, PHP의
경우에는 내부 코드에 CSS를 사용할 수 있을 뿐 아니라, 반대로 CSS로 만들어진 코드 내부에 삽입해서(embedding) 사용할 수도
있습니다. 1.6. ASP와 PHP의 차이는
무엇인가 ? 많은 사람들이 ASP와 PHP의 차이가 뭐냐고 질문을 많이 합니다. 물론 두가지 언어를 모두 사용해 본사람이라면 정호가하게 알겠지만 한가지만 사용해 본 사람이나 둘다 사용해 보지 않은 사람들에게 는 아주 궁금한 사항이 될 수 있습니다. 사실 이 두 개의 언어는 근본적으로 같은 기능을 하는 언어이면서도 서로 다른 점도 많이 가지고 있습니다. 여기서는
세세한 문법적 차이점을 따지기 이전에 포괄적인 관점에서 두언어의 공통점과 차이점을 분석해 보겠습니다. 1.
공통점 서버용 스크립트 언어입니다.(Server Side Script Language) 즉, 이러한 언어로 만들어진
코드는 서버에서 해석(인터프리트)되고 그결과만이 클라이언트(웹브라우저)로 전송됩니다. 객체지향적 언어입니다. 흔히들 스크립트 언어하면 HTML이나 자바 스크립트 수준 정도의 언어로 생각하기 쉬운데
여기 두 언어는 거의 일반적인 언어들 수준의 기능을 합니다. 특히 객체(Class)를 직접 생성해서 사용할 수 있는 점에서 객체지향적
언어입니다. 2.
차이점 ● 플랫폼(platform)의 지원 ASP는 기본적으로 윈도우 플랫폼만을 지원하며, PHP는 윈도우 플랫폼과 유닉스 플랫폼 모두를
지원합니다. ● 웹서버의 지원 ASP는 윈도우 환경에서 동작하는 IIS(Internet Information Server)나
PWS(Personal Web Server)를 지원하며, PHP는 유닉스 환경의 아파치 서버나 윈도우 환경의 IIS, PWS 모두를
지원합니다. ● 사용하는 언어 ASP는 주로 비주얼 베이직 스크립트나 자바스크립트 언어를 이용해서 프로그램 작성이 가능하며, PHP는 자체의
언어(C와 Perl 언어를 짬뽕한 듯한 언어)를 이용해서 코드를 작성합니다. ● 데이터 베이스 연결 ASP는 OLE DB를 기반으로 ADO 컴포넌트를 이용해서 데이터베이스에 연결하며, PHP는 윈도우에서 사용하는
ODBC에 의한 연결 뿐만 아니라 유닉스 환경에서 사용하는 주요 데이터베이스들을 직접 연결하는 DB 함수들을 지원합니다. ● 객체의 정의 ASP 언어 자체는 모두 객체화 되어 있으며 개발자는 미리 정의된 객체를 불러서 사용하기만 하면 됩니다. 하지만
PHP는 자체적으로 지원하는 객체는 없고 단지 개발자가 직접 코드내에서 정의해서 사용해야 합니다. 물론 ASP에서도 개발자가 직접 객체를 정의할
수 있지만 ASP 코드내에서 정의할 수 있는 것이 아니라. VB나 C++ 같은 언어를 이용해서 외부에서 정의하고 DLL형태로 만들어서 불러오는
방식으로 사용해야 합니다.
|
[목차] |