2009. 3. 17. 18:28
728x90
HTML 밖에 모르는 웹 브라우저 ?
웹 브라우저는 HTML밖에 모릅니다. HTML이 브라우저가 쓰는 언어라는 것이지요. (자바스크립트와 같은 약간의 외국어도 합니다.^^;;) 그래서 우리가 홈페이지를 만들려면 모든 문서를 HTML로 작성해야만 합니다.
HTML을 울려 버린 CGI의 등장
인터넷 초창기에는 대부분의 홈페이지가 모두 HTML(SGML)로 만들어져 있었습니다. (선택의 여지가 없었죠)
HTML로 홈페이지를 만들어 보신 분은 아시겠지만 HTML은 일방향적이고 수정하기 전에는 절대 변하지 않는 특성을 가지고 있습니다. 이러한 단점 때문에 사람들은 HTML 말고 다른 무언가가 필요함을 느꼈습니다. 그래서 생겨난 것이 바로 CGI (Common Gateway Interface)입니다.
CGI의 구조
CGI는 위와 같은 구조를 가지는데.. ( HTML은 1과 4의 과정만 있음 ) 보시는 바와 같이 HTML 보다 한단계 더 처리를 함으로써 계산과 처리 기능이 추가되었습니다. 이로 인해 우리는 정적인 웹 페이지에서 변화가 자유롭고 방문자와 홈페이지간에
서로 상호작용이 가능한 웹 페이지를 만들 수 있게 된 것입니다. 그러나 여기서 주의해야 할 점은 3번에서 보듯이 CGI로 처리된 값은 HTML로 전송됩니다. 웹 브라우저가 HTML밖에 모르니 HTML로 결과를 보여줘야 하는 것입니다. 그러니 PHP를 하려면 당연히 HTML을 알고 있어야겠죠?
그러면 CGI와 PHP는 어떤 관계인가?
PHP는 약간 다르긴 하지만 일종의 CGI라고 볼 수 있습니다. 그래서 PHP도 저 위의 그림과 비슷한 구조를 가집니다.
HTML에 없는 계산 , 처리과정이란 도대체 어떤 것일까?
굉장히 많겠지만 지난시간에 테스트를 위해 만든 소스를 다시 이용해 보죠..
이 소스는 2003년 4월 4일날 아래와 같은 결과였습니다.
그러나 똑같은 소스를 4월 5일에 똑같이 실행시켰는데.. 아래와 같은 결과가 나오네요..
이와같이 PHP는 사람이 바꾸지 않아도 알아서 처리하여 표시해 주는 것입니다. 여기에는 date 라는 날짜를 표시해주는 함수와 echo 라는 텍스트를 뿌려주는 함수 둘이 사용되었습니다. 위에서 말했듯이 우리는 결과를 HTML로 돌려주어야 한다고 했습니다.
위의 결과에 대해 소스보기를 하면...
첫번째 프로그램아싸~날짜 : 2003-04-05
이렇게 출력되어집니다. 위의 PHP코드는 일련의 처리과정을 거쳐 PHP 코드를 모두 지워 버리고 단지 HTML 코드만을 전송한 것이지요.
만약 PHP가 없었다면....
홈페이지에 날짜 표시 기능을 달기 위해서는 매일 매일 홈페이지에 들러서 제일 먼저 오늘의 날짜를 고쳐야 하는 수고를 했을 것입니다. 물론 게시판 같은 것은 꿈도 못 꾸었겠죠..
이제부터 고민해야 할 것...
이제부터는 PHP 함수등을 배워가면서 어떻게 그 결과를 HTML로 뿌려줄 수 있느냐를 고민하는 것
그것밖에 남지 않았군요..
웹 브라우저는 HTML밖에 모릅니다. HTML이 브라우저가 쓰는 언어라는 것이지요. (자바스크립트와 같은 약간의 외국어도 합니다.^^;;) 그래서 우리가 홈페이지를 만들려면 모든 문서를 HTML로 작성해야만 합니다.
HTML을 울려 버린 CGI의 등장
인터넷 초창기에는 대부분의 홈페이지가 모두 HTML(SGML)로 만들어져 있었습니다. (선택의 여지가 없었죠)
HTML로 홈페이지를 만들어 보신 분은 아시겠지만 HTML은 일방향적이고 수정하기 전에는 절대 변하지 않는 특성을 가지고 있습니다. 이러한 단점 때문에 사람들은 HTML 말고 다른 무언가가 필요함을 느꼈습니다. 그래서 생겨난 것이 바로 CGI (Common Gateway Interface)입니다.
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가 성능이 우수합니다.
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 는 서버 컴퓨터측 시계를 기준으로 하고
자바스크립트는 사용자의 컴퓨터 시계를 기준으로 합니다.
이제부터 고민해야 할 것...
이제부터는 PHP 함수등을 배워가면서 어떻게 그 결과를 HTML로 뿌려줄 수 있느냐를 고민하는 것
그것밖에 남지 않았군요..
728x90