오늘의 나보다 성장한 내일의 나를 위해…













:pushpin: CGI



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

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

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



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


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


:pushpin: CGI의 한계


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



CGI요청할 때마다 프로세스를 생성하고 프로세스가 가동하면서 시스템 자원을 소비하게 된다.

또한, 동시에 많은 요청이 발생하면 프로세스가 생성되면서 서버에 부하가 발생하게 된다.


:pushpin: FastCGI(Fast Common Gateway Interface)


CGI 부하의 문제로 서버는 비효율적으로 실행되고 있었다. 이러한 해결책으로 CGI를 진화시킨 기술로 FastCGI가 나오게 되었다.



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


:pushpin: CGI 장점


  • 언어, 플랫폼 독립적이다(스펙만 준수하면 된다).
  • 매우 단순하고 다른 server-side 프로그래밍 언어에 비해 advanced task를 훨씬 쉽게 수행할 수 있다.
  • 재사용할 수 있는 CGI 코드 라이브러리가 풍부하다.
  • CGI가 웹 서버에서 실행될 때 안전하다.
  • CGI 코드를 수행하는데 특정 라이브러리가 필요하지 않기 때문에 매우 가볍다.


:pushpin: CGI 단점


  • 느리다(요청이 올 때마다 DB connection을 새로 열어야 한다).
  • HTTP 요청마다 새로운 프로세스를 만들기 때문에 서버 메모리를 많이 잡아먹는다.(servlet은 요청마다 스레드를 만든다.)
  • 페이지 로드 사이에 데이터가 메모리에 캐시될 수 없다.

:pushpin: 정리


CGI인터페이스인데 웹 서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말한다.


YoungKyonYou

Integration of Knowledge