본문 바로가기

* DevSecOps/Operations

PHP는 어떻게 돌아가는가?



HTML 밖에 모르는 웹 브라우저 ?


웹 브라우저는 HTML밖에 모릅니다. HTML이 브라우저가 쓰는 언어라는 것이지요. (자바스크립트와 같은 약간의 외국어도 합니다.^^;;) 그래서 우리가 홈페이지를 만들려면 모든 문서를 HTML로 작성해야만 합니다.


HTML을 울려 버린 CGI의 등장

인터넷 초창기에는 대부분의 홈페이지가 모두 HTML(SGML)로 만들어져 있었습니다. (선택의 여지가 없었죠)
HTML로 홈페이지를 만들어 보신 분은 아시겠지만 HTML은 일방향적이고 수정하기 전에는 절대 변하지 않는 특성을 가지고 있습니다. 이러한 단점 때문에 사람들은 HTML 말고 다른 무언가가 필요함을 느꼈습니다. 그래서 생겨난 것이 바로 CGI (Common Gateway Interface)입니다.

CGI란?
CGI
[씨지 아이]는 웹서버에 있어 사용자의 요구를응용프로그램에 전달하고 그 결과를 사용자에게 되돌려주기 위한 표준적인 방법이다. 사용자가 하이퍼링크를 클릭 하거나 웹사이트의 주소를 입력함으로써 웹 페이지를 요청하면, 서버는 요청된 페이지를 보내준다. 그러나, 사용자가 웹페이지의 양식에 내용을 기재하여 보냈을 때, 그것은 보통 응용프로그램에 의해 처리될 필요가 있다. 웹 서버는 림없이 언제나 그 양식 정보를 조그만 응용프로그램에 전달하는데, 이 프로그램은 데이터를 처리하고 필요에 따라 확인 메시지를 보내주기도 한다. 이렇게 서버와 응용 프로그램간에 데이터를 주고받기 위한 방법이나 규약들을 CGI라고 부른다. 이것은 웹의 HTTP 프로토콜의 일부이다. 
CGI 프로그램 작성에 가장 보편적으로 사용되는 언어로는 C,C++,Java,Perl 등이 있다.
CGI 프로그램의 대안으로서 마이크로소프트의 ASP가 있는데, 이것은 웹 페이지 내에 끼워 넣어진 일종의 스크립트로서 그 페이지가 보내지기 전에 서버에서 실행된다.  


CGI의 구조



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

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

PHP는 약간 다르긴 하지만 일종의 CGI라고 볼 수 있습니다. 그래서 PHP도 저 위의 그림과 비슷한 구조를 가집니다.

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


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

프로세스, 쓰레드?? 뭐가다르냐구요? 프로세스는 각각 별도로 시스템 자원을 소비합니다. 1개의 프로세스가 메모리 1메가바이트를 소비한다면 100개의 경우 100메가 바이트의 메모리를 소비하게 됩니다. 그러나 쓰레드는 쓰레드간에 시스템자원의 공유가 가능하므로 100개라고해서 100메가 바이트를 소비하는 것이 아니라 그보다 훨씬 적은양의 메모리를 소비하게 됩니다.
그래서 프로세스방식인 CGI 보다 쓰레드방식인 PHP가 성능이 우수합니다.


HTML에 없는 계산 , 처리과정이란 도대체 어떤 것일까?

굉장히 많겠지만 지난시간에 테스트를 위해 만든 소스를 다시 이용해 보죠..

<? 
    echo "첫번째 프로그램"
    echo "아싸~"
    echo "날짜 : " date("Y-m-d"); 
?>

이 소스는 2003년 4월 4일날 아래와 같은 결과였습니다.



그러나 똑같은 소스를 4월 5일에 똑같이 실행시켰는데.. 아래와 같은 결과가 나오네요..



이와같이 PHP는 사람이 바꾸지 않아도 알아서 처리하여 표시해 주는 것입니다. 여기에는 date 라는 날짜를 표시해주는 함수와 echo 라는 텍스트를 뿌려주는 함수 둘이 사용되었습니다. 위에서 말했듯이 우리는 결과를 HTML로 돌려주어야 한다고 했습니다.
위의 결과에 대해 소스보기를 하면...

첫번째 프로그램아싸~날짜 : 2003-04-05

이렇게 출력되어집니다. 위의 PHP코드는 일련의 처리과정을 거쳐 PHP 코드를 모두 지워 버리고 단지 HTML 코드만을 전송한 것이지요.

만약 PHP가 없었다면....

홈페이지에 날짜 표시 기능을 달기 위해서는 매일 매일 홈페이지에 들러서 제일 먼저 오늘의 날짜를 고쳐야 하는 수고를 했을 것입니다. 물론 게시판 같은 것은 꿈도 못 꾸었겠죠..

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


이제부터 고민해야 할 것...


이제부터는 PHP 함수등을 배워가면서 어떻게 그 결과를 HTML로 뿌려줄 수 있느냐를 고민하는 것
그것밖에 남지 않았군요..


성공적인 웹 프로그래밍 - PHP와 MySQL로라 톰슨(Laura Thomson),루크 웰링(Luke Welling)

상세보기

 

 

출처 : 초보를 위한 PHP 강좌 / 뇌를 자극하는 PHP 프로그래밍 /다우니와함께하는 PHP 따라잡기

'* DevSecOps > Operations' 카테고리의 다른 글

APM(apache,php,mysql) 프로그램과 Notepad++ 프로그램  (0) 2012.09.01
PHP란?  (0) 2011.11.23