본문 바로가기

Web Development/PHP

[PHP] 입문,PHP란,PHP의 동작원리

입문개요

인터넷이 보급될초기에는 Perl언어와 C언어를 가지고 웹사이트를 제작하였습니다.

하지만 Perl언어와 C언어의 문제점은 효율성이 없으며 개발이 엄청(-0-) 힘들었습니다.

Perl언어와 C언어의 가장 문제점은 처리방식입니다. 클라이언트가 한명씩 접속시 하나의 프로세서를 생성합니다.
접속하는 수가 많으면 많아질수록 과부하가 심하게 걸리게 되어 서버가 자주 다운됩니다.
(웹회사의 서버가 다운되면 손해가 막심합니다.^^)

 

그래서 위의 문제점을 보완하고 좀더 빠르게 서비스하기 위해서 다양한 웹언어들이 나왔습니다.

마이크로소프트의 ASP, SUN사의 JSP, ZEND사의 PHP가 대표적인 웹언어입니다.

위의 3가지 언어들은 클라이언트가 한명씩 접속시 먼저 하나의 프로세서를 만든후
그안에 하나의 쓰레드를 만들어 응답을 해줍니다. 쓰레드 단위로 업무를 처리를 서버에 부담을 덜 주게 됩니다.

 

무엇인가를 만드려면 방법과 준비물이 필요합니다.

웹사이트를 만들기 위해서는 보통 준비물(EditTool,GraphicTool)과 방법(개발방법)이 필요합니다.

PHP는 개발방법에 포함되며 AliveFTP는 준비물입니다.

 

PHP모듈이 C언어로 개발되어 문법이 C와 비슷하고 실행속도 또한 빠르다.

 

PHP는 초기에 한개인에 의해 개발되어 오픈소스화되어 유명해진 웹언어입니다.

먼저 C언어의 문법을 따라해 문법이 쉬우며 무료라서 사용하는데 돈이 들지 않으며
원도우,LINUX,UNIX등 여러 OS를 지원하여 플랫폼에 독립적입니다.

그리고 무료 OS인 LINUX에서 좀더 빠르게 돌아가면서 무료 RDBMS인 MYSQL와 궁합이 잘맞아

APM(APACHE+PHP+MYSQL)이라는 수식어를 가지고 다닙니다.

위의 3가지(APACHE+PHP+MYSQL) 프로그램은 모두 사용하는데 돈이 들지 않습니다.

 

PHP는 웹모듈입니다. 이말은 혼자서 동작하지 않는다는 애기입니다.

웹서버라는놈과 합체해야만 동작을 한다는 애기입니다.

보통 PHP는 APACHE라는 웹서버프로그램과 연동(합체)하여 동작합니다.

수행처리는 사용자가 문서를 요구할때 APACHE는 HTML,HTM문서를 처리하고 PHP는 PHP문서를 처리합니다.
웹업무를 나누어서 처리한다는 뜻입니다.
아무래도 혼자하는것보다 나누어서 하니 부하(힘)도 덜걸리고 결과 속도도 빠를겁니다.

 

PHP는 초기에는 기업들이 개인적으로 만들어졌다는 인식과 무료라는 인식때문에 보안에 허술하거나 느리다고 생각해서
사용을 많이 안했으나 지금에 와서는 국외로는 야후 국내로는 네이버,매일경제 같은 규모가 큰 사이트들도 사용을 하는추세이며 앞으로도 꾸준히 수요가 예측되는 웹언어입니다.

 

PHP는 Php Hypertext Preprocessor의 약자입니다. 기억하세요.

PHP란?

 

PHP (공식적 PHP Hypertext Preprocessor) 는 Server - side HTML-embedded 스크립트 언어입니다.
즉, PHP는 서버에서 실행되며 HTML을 포함하는 스크립트 언어라는 말입니다.
HTML을 포함하고 있기 때문에 HTML 내용을 PHP 확장자 (.php )로 저장하여도
아무 지장없이 사용할 수 있습니다.

 

이미지설명:HTML과 PHP언어를 혼합하여 작성한 PHP파일

 

위처럼 보통 HTML 태그 사이에 PHP 소스를 넣습니다.

PHP 소스는 무조건 시작인 <?php 과 끝인 ?> 을 이용하여 HTML과 PHP를 구분합니다.
1 ~ 5 줄까지 HTML 코드로 처리하다가 PHP 시작태그를 만나면 PHP 모드로 돌입합니다.
다시 PHP의 끝 태그를 만나면 HTML 모드로 7 ~ 8 줄까지 HTML로 인식하게 됩니다.

 

※ 서버 사이드 스크립트와 클라이언트 사이드 스크립트의 차이

해당 언어가 서버에서 실행되면 ServerSideScript 이며
클라이언트에서 실행되면 ClientSideScript 이다. php,asp,jsp는 SSS이며 html과 js,css는 CSS이다.

 

PHP로 무엇을 할수 있어요?

 

PHP는 가장 기초적으로 게시판이나 방명록같은 다이나믹(동적)한 웹페이지를 만들 수 있습니다.
무엇보다도 PHP의 가장 두드러진 특징이라고 말할 수 있는 것은 매우 다양한 DBMS를 지원하고
(
Oracle , MySQL , MssqlServer 등 ) 또한 DBMS을 이용한 웹페이지를 만드는 작업이 놀랄 만큼이나 쉽다는 것입니다.

쇼핑몰이나 커뮤니티,블로그등이 다 위의 여러 DBMS을 이용하여 만들수 있는 산출물입니다.

 

PHP의 간결한 역사?

 

1994 by Rasmus Lerdorf (mailto:rasmus@php.net)

( 정말 간결하죠? 그래두 핵심적인 부분이라우~ 1994년에 Rasmus 라는 사람이 맹글었3)

 

리플달기

PHP로 연결할수 있는 DBMS을 찾아서 리플달아주3!(찾을수 있을만큼)

집에서 사용하는 웹 브라우저는 HTML언어밖에 모른다?

 

웹브라우저는 HTML언어로 작성한 문서만 해석하여 사용자에게 보여줍니다.

하지만 요즘은 자바스크립트나 CSS언어로 해석을 합니다.

바꿔서 말씀드리면 웹 브라우저는 HTML밖에 알아 듣지 못한다는 소리입니다.
그래서 우리가 만들 사이트를 사용자가 웹브라우저로 보게하려면 반드시 HTML언어로 작성하여 합니다.

 

HTML을 울려 버린 CGI의 등장

 

인터넷 초창기에는 대부분의 홈페이지가 모두 HTML(SGML)로 만들어져 있었습니다.

HTML로 홈페이지를 만들어 보셨겠지만
HTML은 일방향적이고 수정하기 전에는 절대 변하지 않는 특성을 가지고 있습니다.
정적인 페이지는 개발영역에 한계가 있었고
그래서 사람들은 동적인 페이지를 만들 그무언가가 필요했습니다.

이러한 단점(정적인 페이지) 때문에 사람들은 HTML 말고 다른 무언가가 필요함을 느꼈습니다.

그래서 생겨난 것이 바로 CGI (Common Gateway Interface)입니다. 짜짠~~ -0-

 

CGI의 구조

CGI는 위와 같은 구조를 가지는데.( HTML은 1과 4의 과정만 있음,여기서 서방님 노크!)
보시는 바와 같이 HTML 보다 한단계 더 처리를 함으로써 계산과 처리 기능이 추가되었습니다.
이로인해 우리는 정적인 변화 없는 웹 페이지에서 변화가 자유롭고 방문자와 홈페이지 제작자간에
서로 상호작용이 가능한 웹 페이지를 만들 수 있게 된 것입니다.
그러나 여기서 주의해야 할 점은 3번에서 보듯이 CGI로 처리된 값은 HTML로 전송되어 집니다.
웹 브라우저는 HTML밖에 모르니 HTML로 바꿔서 보여줘야 하는 것입니다.

 

PHP의 구조

 

PHP도 CGI와 비슷합니다.

먼저 어떤 고객이 http://ysaraha.ttongfly.net/index.php을 브라우저에 치면
index.php을 요청하게 됩니다.

그러면
http://ysaraha.ttongfly.net가 가리키는 해당 서버의 웹서버는
해당 파일을 서버에서 찾은후에 확장자를 검사합니다.

html이나 htm이면 해당 파일을 그대로 사용자의 웹브라우저로 보내주고 그게 아니라
php,php3,inc가 확장자라면 해당 파일을
웹서버에 장착되어 있는 php엔진에 보내주고
php엔진은 php소스를 해석하여 html코드로 다시 재작성된 파일을 웹서버에게 보내줍니다.

그러면 웹서버는 그파일을 다시 사용자에게 보내주어 웹브라우저로 보게 됩니다.

정리)

1)사용자 ysaraha.ttongfly.net/index.php 을 브라우저 주소 치고 엔터

2)ysaraha.ttongfly.net가 가리키는 서버에게 index.php파일 요청

3)서버는 index.php을 찾아본후 있으면 확장자 체크

4)확장자가 html,htm이면 그대로 다시 사용자의 웹브라우저에 전송

5)확장자가 php,php3,inc이면 php엔진에게 전달후 html코드로 해석된 파일을 웹서버에게 전달

6)웹서버는 받은 html파일을 사용자의 웹브라우저에 전송

7)사용자는 웹브라우저로 인터넷 서핑함

 

그러면 CGI와 PHP는 어떤 관계인가?

 

PHP는 완전한 CGI라고 말할수는 없지만 완전히 CGI가 아니라고 보기도 그렇습니다.

그냥 PHP가 CGI라는 비중은 20%만 마음속에 담아두세요.

 

※CGI와 PHP동작원리

CGI는 보통 웹서버와 분리되어 있는 프로그램으로
일반적으로 웹서버로 요청이 들어오면 CGI 프로그램을 실행하여 하나의 프로세스를 생성하고
그 처리 결과를 웹서버로 전송한 후 프로세스가 종료되는 형식입니다.
100개의 요청이 들어오면 CGI 프로세스가 100개가 생성이 되며 100개가 소멸이 됩니다.

PHP는 CGI와 달리 아파치 웹서버에 모듈로 장착되어 있습니다.(웹서버와 가까이 붙어 있음)
따라서 매회 실행시마다 프로세스가 생성되는 CGI와 달리
하나의 프로세스에 여러개의 쓰레드를 생성하여처리가 가능합니다.

프로세스, 쓰레드?

프로세스는 각각 별도로 시스템 자원을 소비합니다.

1개의 프로세스가 메모리 1메가바이트를 소비한다면
100개의 경우 100메가 바이트의 메모리를 소비하게 됩니다.
그러나 쓰레드는 쓰레드간에 시스템자원의 공유가 가능합니다.

100개라고해서 100메가 바이트를 소비하는 것이 아니라
그보다 훨씬 적은양의 메모리를 소비하게 되며 서버에 무리도 덜주어
더많은 클라이언트의 요청을 소화해낼수 있다.

그래서 프로세스방식인 CGI 보다 쓰레드방식인 PHP가 성능이 우수합니다.

 

PHP엔진이 해석하고 HTML파일로 준다는것이 어떤 것일까?

 

<따라하기>

1. 다음 소스를 php파일로 저장한다.

<?
    echo "첫번째 프로그램";
    echo "아싸~";
    echo "날짜 : " . date("Y년m월d일 h시i분s초");
?>

2. 그후에 해당 php파일을 브라우저에서 열람후 웨브라우저로 화면 확인

3. 2~3초후에 다시 해당 php파일을 브라우저에서 열람후 웨브라우저로 화면 확인

4. 웹브라우저의 메뉴에서 보기/소스로 해당 화면의 html소스 보기

 

※ 위의 PHP로 날짜 표시 부분은 자바스크립트로도 가능합니다.
그러나 약간의 차이가 있는데 PHP 는 서버 컴퓨터측 시계를 기준으로 하고
자바스크립트는 사용자의 컴퓨터 시계를 기준으로 합니다

 

여기서 알게 된점은 무엇인가요?

1)php는 서버에서 실행되고 html은 클라이언트에서 실행된다.

2)정적인 페이지가 아니라 동적인 페이지로 나온다.

 

만약 PHP가 없었다면..

 

홈페이지에 날짜 표시 기능을 달기 위해서는
매일 매일 홈페이지에 들러서 제일 먼저 오늘의 날짜를 고쳐야 하는 수고가 생깁니다.
생각만해도 끔찍하죠? 물론 게시판 같은 것은 꿈도 못 꿉니다.

 

수고하셨습니다. 시간날때마다 복습합시다.^^