오늘의 나보다 성장한 내일의 나를 위해…
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가 나오게 되었다.
FastCGI는 기존 CGI처럼 요청마다 프로세스를 생성하는 것이 아닌 1개의 큰 프로세스에 생성해서 여러 요청을 처리하게 된다. 1개의 프로세스만으로 처리하여 여러 프로세스를 생성해서 실행하는 부하를 해결하게 된다.
CGI 장점
- 언어, 플랫폼 독립적이다(스펙만 준수하면 된다).
- 매우 단순하고 다른 server-side 프로그래밍 언어에 비해 advanced task를 훨씬 쉽게 수행할 수 있다.
- 재사용할 수 있는 CGI 코드 라이브러리가 풍부하다.
- CGI가 웹 서버에서 실행될 때 안전하다.
- CGI 코드를 수행하는데 특정 라이브러리가 필요하지 않기 때문에 매우 가볍다.
CGI 단점
- 느리다(요청이 올 때마다 DB connection을 새로 열어야 한다).
- HTTP 요청마다 새로운 프로세스를 만들기 때문에 서버 메모리를 많이 잡아먹는다.(servlet은 요청마다 스레드를 만든다.)
- 페이지 로드 사이에 데이터가 메모리에 캐시될 수 없다.
정리
CGI는 인터페이스인데 웹 서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말한다.