I am Pengrammer :)

Languages/PHP

[스크랩] PHP란, PHP의 동작원리

펭구 2016. 6. 3. 02:05

Celestia님의 블로그에서 퍼온 글입니다.

이 글을 보고 PHP의 동작원리에 대해서 이해하는 데에 많은 도움이 되었습니다.

문제가 될 시 삭제 조치 하도록 하겠습니다. 

좋은 글을 써주신 Celestia님 감사합니다.


작성자 : Celestia

원문 : http://webstyledesign.tistory.com/entry/PHP-%EA%B0%95%EC%A2%8C-%EC%9E%85%EB%AC%B8PHP%EB%9E%80PHP%EC%9D%98-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC



PHP란, PHP의 동작원리



입문개요


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

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

Perl언어와 C언어의 가장 문제점은 처리방식입니다. 클라이언트가 한 명씩 접속 시 하나의 프로세서를 생성합니다.

접속하는 수가 많으면 많아질수록 과부하가 심하게 걸리게 되어 서버가 자주 다운됩니다.


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

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

위의 3가지 언어들은 클라이언트가 한 명씩 접속 시 먼저  하나의 프로세서를 만든 후,

그 안에 하나의 쓰레드를 만들어 응답을 해줍니다. 쓰레드 단위로 업무를 처리를 서버에 부담을 덜 주게 됩니다.


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

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

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(공식적으로 PHP Hypertext Preprocessor)는 Server-side HTML-embedded 스크립트 언어입니다.

즉, PHP는 서버에서 실행되며 HTML을 포함하는 스크립트 언어라는 말입니다.

HTML을 포함하고 있기 때문에 HTML 내용을 PHP 확장자(.php)로 저장하여도

아무 지장없이 사용할 수 있습니다.



[그림1] 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를 이용하여 만들 수 있는 산출물입니다.



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


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

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

바꿔서 말씀드리면 웹 브라우저는 HTML밖에 알아 듣지 못한다는 소리입니다.

그래서 우리가 만들 사이트를 사용자가 웹브라우저로 보게하려면 반드시 HTML언어로 작성하여야 합니다.



CGI의 등장


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

HTML로 홈페이지를 마들어 보셨겠지만

HTML은 일방향적이고 수정하기 전에는 절대 변하지 않는 특성을 가지고 있습니다.

정적인 페이지는 개발영역에 한계가 있었고

그래서 사람들은 동적인 페이지를 만들 그 무언가가 필요했습니다.

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

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



CGI의 구조


CGI는 HTML보다 한 단계 더 처리를 함으로써 계산과 처리 기능이 추가되었습니다.

이로 인해 우리는 정적인 변화 없는 웹 페이지에서 변화가 자유롭고 방문자와 홈페이지 제작자 간에

서로 상호작용이 가능한 웹 페이지를 만들 수 있게 된 것입니다.

그러나 여기서 주의해야 할 점은 3번에서 보듯이 CGI로 처리된 값은 HTML로 전송되어 집니다.

웹 브라우저는 HTML밖에 모르니 HTML로 바꿔서 보여줘야 하는 것입니다.



PHP의 구조


PHP도 CGI와 비슷합니다.

먼저 어떤 고객이 http://www.naver.com/index.php을 브라우저에 치면 index.php를 요청하게 됩니다.

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

html이나 htm이면 해당 파일을 그대로 사용자의 웹 브라우저로 보내주고 그게 아니라 

php, php3, inc가 확장자라면 해당 파일을 웹서버에 장착되어 있는 php엔진에 보내주고

php엔진은 php소스를 해석하여 html코드로 다시 재작성된 파일을 웹서버에 보내줍니다.

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



CGI와 PHP동작원리


CGI는 보통 웹서버와 분리되어 있는 프로그램으로 

일반적으로 웹서버로 요청이 들어오면 CGI 프로그램을 실행하여 하나의 프로세스를 생성하고 

그 처리 결과를 웹서버로 전송한 후 프로세스가 종료되는 형식입니다.

100개의 요청이 들어오면 CGI 프로세스가 100개 생성이 되며 100개가 소멸이 됩니다.


PHP는 CGI와 달리 아파치 웹서버에 모듈로 장착되어 있습니다.(웹서버와 가까이 붙어 있음)

따라서 매 회 실행 시 마다 프로세스가 생성되는 CGI와 달리

하나의 프로세스에 여러 개의 쓰레드를 생성하여 처리가 가능합니다.



프로세스, 쓰레드?


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

1개의 프로세스가 메모리 1MB를 소비한다면

100개의 경우 100MB의 메모리를 소비하게 됩니다.

그러나 쓰레드는 쓰레드 간에 시스템 자원의 공유가 가능합니다.

100개라고 해서 100MB를 소비하는 것이 아니라

그 보다 훨씬 적은 양의 메모리를 소비하게 되며 서버에 무리도 덜 주어

더 많은 클라이언트의 요청을 소화해낼 수 있다.

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



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


<따라하기>

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


<?

echo "첫 번째 프로그램";

echo "아싸~";

echo "날짜 : " . date("Y년 m월 d일 h시i분s초");

?>


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

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

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


여기서 알게 된 점은?


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

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



만약 php가 없었다면...

홈페이지에 날짜 표시 기능을 달기 위해서는 

매일 매일 홈페이지에 들러서 제일 먼저 오늘의 날짜를 고쳐야 하는 수고가 생깁니다.

생각만해도 끔찍하죠? 물론 게시판 같은 것은 꿈도 못 꿉니다.