CGI 와 FastCGI
CGI(Common Gateway Interface) 란?
정적(Static) 데이터 처리만 가능한 WEB 서버를 동적으로 처리하기 위해 사용자 요청에 따라 실행 가능한 외부 프로그램을 호출하고 처리 결과를 돌려줄 수 있는 인터페이스다. CGI 를 통해 입/출력이 가능하도록 만들어진 프로그램을 CGI 프로그램이라고 부르며, CGI 프로그램은 실행 가능한 바이너리 파일 이외에 셔뱅(shebang)을 포함하는 실행 권한이 부여 된 Script 파일을 포함한다.
CGI 규약을 준수하는 Shared Library와 WEB 서버의 서브 루틴도 CGI 프로그램에 포함된다 (RFC 3875-1.4 항목 참고) CGI 프로그램은 CGI 규약에 따라 CGI Request를 받고, CGI Response를 반환해야 한다. CGI 사영은 RFC 3875에서 언급된 “The Common Gateway Interface Version 1.1” 을 준수해야 하며, 그 내용은 다음과 같다.
- CGI 프로그램을 호출하는 WEB 서버 역할
- 전송 단계에서의 인증 및 보안
- CGI 프로그램의 선택
- CGI Request 로 변환
- CGI Response에서의 변환
- 호출 프로그램의 지정 방법 (URI)
- WEB 서버에서 CGI Request의 해석 방법 (경로 및 프로토콜)
- WEB 서버에서 CGI Response에 대한 반환 방법 (경로 및 프로토콜)
FastCGI 란?
FastCGI 는 CGI 처리 방식의 고성능화를 목표로 CGI의 확장 사양으로 간주된다. 전통적 CGI 방식은 “Request 가 발생하면 프로그램을 시작하고, 처리 및 Response가 완료되면 프로그램을 종료”하기 때문에 지속적인 요청에 대한 성능이 크게 저하된다.
Web 서버 내 동작하는 프로그램이 한번 호출(실행) 되었다면 해당 프로세스를 일정시간 보관함으로서 동일 요청 시 처리 시간을 줄여 응답 성능을 향상 시킴으로서 CPU 부하를 줄일 수 있다. FastCGI의 고유 프로토콜 처리는 CGI 1.1 사양과 동일하다.
CGI 처럼 운용할 수 있도록 외부 프로그램을 시작하는 Wrapper와 프로세스의 유지 및 관리를 위한 라리브러리도 제공하고 있지만, 각 프로그램 언어마다 대응이 제각각이기 때문에 CGI 보다 다루기 어려운 편이다.
현재는 github(mcarbonneaux)에서 백업된 FastCGI.com Archives 에서 추가 정보를 확인할 수 있다.