PHP 와 서버의 작동 원리
PHP는 Server-side HTML-Embedded 스크립트 언어입니다. 즉, PHP 는 서버에서 실행되며 HTML을 포함하는 스크립트 언어입니다.
따라서 php 안에서 html을 사용할 수 있고 <?php ?>을 이용하여 HTML과 PHP를 구분하여 사용합니다.
PHP는 HTML, CSS, JAVASCRIPT 와 다르게 WAS 서버를 거쳐서 바꿔서 보여집니다.
즉, PHP 엔진(Web Container)은 php 소스를 해석하여 html코드를 다시 재작성하여 웹서버로 보내줍니다. 그러면 웹서버는 그 파일을 다시 사용자에게 보내주게 됩니다.
CGI란
CGI 는 정적인 페이지만 보던 클라이언트들에게 동적인 페이지를 보여주기 위해 생겨났고 CGI (Common Gateway Interface) 는 웹서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말합니다.
CGI는 특정 URL로 들어오면 외부 프로그램과 연결하여 해당 프로그램이 그 요청을 처리하게 연결해주는 역할을 맡고 있고, 들어온 요청을 연결해주기만 할뿐, 웹 서버가 외부 프로그램을 직접 실행합니다.
100개 요청이 들어오면 CGI 프로세스가 100개 생성이 되며 100개가 소멸이 됩니다.
정리하자면 웹 서버에서 어플리케이션을 작동시키기 위한 인터페이스입니다.
요청 → 웹서버(아파치, nginx 등) → (웹서버가 직접 실행)프로그램(Perl,…)
WAS와의 차이점
기존에는 웹서버가 있고 클라이언트에서 외부 프로그램이 필요한 리퀘스트가 들어오면 CGI를 통해 외부 프로그램을 실행시켜 리퀘스트에 응답하도록 했지만, 요즘에는 웹서버에 인터프리터를 내장함으로써 프로세스를 FORK 하여 외부 프로그램을 실행시키지 않고 내부에서 다처리하는게 WAS 입니다.
웹서버가 동적으로 가능하면 WAS 입니다. 즉, Web Server + CGI (실제로는 Web Container) 가 WAS (Web Application Server)입니다.
요청 → 웹서버 → 웹 어플리케이션 서버(톰캣, JBoss) → (웹어플리케이션 서버가 실행) 프로그램
PHP 구조
클라이언트가 index로 요청을 하게되었을 때 웹서버는 해당 파일을 서버에서 찾은 후 확장자를 검사합니다.
html이면 웹브라우저로 바로 보내주고, 아니라면 웹 서버에 장착되어 있는 php엔진에 보내주게 됩니다.
php엔진이 해석하여 html 코드로 다시 재작성하여 웹서버로 보내주게되고 그러면 웹서버는 그파일을 다시 사용자에게 보내주어 웹 브라우저로 보게 됩니다.
CGI는 요청이 들어오면 프로세스가 생성되었다가 소멸되는 형식입니다.
반면 PHP는 CGI와 달리 아파치 웹서버에 모듈로 장착되어 있습니다.
따라서 매 회 실행시 쓰레드로 생성하여 처리됩니다.
따라서 PHP가 CGI에 비해 처리성능이 우수합니다.
Leave a comment