CGI와 FastCGI 알아보기




    이번 포스팅에서는 CGI에 대해서 알아보도록 하겠습니다.






     CGI는 무엇인가?




    초창기 웹사이트는 웹브라우저와 웹서버만으로도 충분했습니다 그 당시 웹서버는 정적인 데이터와 이미지 파일만 처리하였기 때문에 PHP, Python 등등이 필요 없었습니다


    하지만 인터넷서비스가 점점더 거대해지고 많은 역할들을 수행하게 시작되어 정적인 데이터로 서비스를 하는것만으로는 한계를 부딪치게 되었습니다


    요즘 웹사이트를 본다면 HTML 문서로만 되어있는 서버는 사이트를 운영할 수 없습니다 HTML 파일관리, 데이터 고속처리, 사용자가 입력한 데이터 저장 등등 이러한 정적인 HTML 파일을 처리하는 웹서버만으로는 불가능하였고 그래서 등장하게 된 것이 CGI 입니다




    이 CGI는 사용자가 요청한 정보가 정적인 HTML 파일이 아니라 PHP, Python 에서 요청이 오게되면 웹서버는 자신이 처리할 수 없다는 사실을 알고 PHP 인터프리터에게 의뢰를 해서 개발자가 작성한 PHP 스크립터를 읽고 처리하여 그 결과를 웹서버에게 돌려주게 되고 웹서버는 그것을 다시 브라우저에게 돌려주게 됩니다


    이러한 웹서버(Nginx, Apache)와 PHP, Python 사이에 존재하여 규격화된 약속으로 서로 데이터를 전송하여 처리하는 것이 CGI 이며, 웹서버(Nginx, Apache)와 PHP, Python 웹 프로그래밍 언어와 연동이 가능하게 됩니다








     CGI 의 한계



    이제 점점 더 서비스가 거대해지면서 CGI에도 한계에 봉착하게 됩니다



    CGI는 요청할 때마다 프로세스를 생성하고 프로세스가 가동하면서 시스템 자원을 소비하게 됩니다 또한 동시에 많은 요청이 발생하면 프로세스가 생성되면서 서버에 부하가 발생하게 됩니다.





     FastCGI(Fast Common Gateway Interface)



    CGI의 부하의 문제로 서버에서는 비효율적 이였습니다 이러한 해결책으로 CGI를 진화시킨 기술로 FastCGI 입니다 20년 넘는 기간 동안 표준이 되었고 대부분의 웹서버(Nginx, IIS, Apache)가  FastCGI 기능을 제공합니다




    FastCGI는 기존 CGI 처럼 요청마다 프로세스를 생성하는 것이 아닌 1개의 큰 프로세스에 생성해서 여러 요청을 처리하게 됩니다  1개의 프로세스로만 처리하여 프로세스를 생성되면서 생기는 부하를 해결하게 됩니다





    또한, 웹서버와 PHP를 FastCGI로 소켓 통신하여 뒷단에 PHP 서버를 구축하여 분리할 수 있습니다 이것을 WAS(Web Application Server) 라고 합니다

    Posted by 서버이야기