서버세팅을 진행하는 도중 별 생각없이 사용하던

CGI,CGI, FastCGI, PHP-FPM의 의미를 이젠 알고 쓰고 싶어서 남긴다.

 

1. CGI(Common Gateway Interface)

CGI(Common Gateway Interface)는 웹서버와 외부 프로그램을 연결해주는 표준화된 프로토콜이다.

웹이 처음 등장했을 때는 HTML과 이미지를 전달해주는 웹서버 밖에 없었다. 하지만 웹에 대한 수요가 증가하면서 정적인 HTML만을 가지고 정보를 제공하는 것에 대한 한계를 극복하기 위해 등장한 기술이 CGI이다. 웹서버가 처리할 수 없는 정보가 웹서버로 요청되었을 때, 그 정보를 처리할 수 있는 외부 프로그램을 호출함으로써 외부 프로그램이 처리한 결과를 웹서버가 받아서 웹브라우저로 전송하는 것이다.

외부 프로그램은 C, C++, Python 등 어떤 언어로든 작성될 수 있는데, 이를 가능케 하는 것은 웹서버와 외부 프로그램은 서로 공통의 규칙인 CGI 표준을 따르기 때문이다.

-> 개인 메모 :
그렇기 때문에 Nginx Web Server 를 설치한 후 PHP를 사용하려 할 때 nginx.conf 파일에
location ~ \.php$ { ... } 부분에 fastcgi 관련 설정을 기입하는 것이었다.
(NginX -> PHP언어 처리에 대한 규칙)

 

 

2. FastCGI

CGI는 하나의 요청(request)에 하나의 프로세스를 생성한다. 이것은 프로세스를 생성하고 제거하는 과정에서 많은 부하가 발생하기 때문에 성능이 느리다. 이를 개선하기 위해 등장한 것이 FastCGI이다. 

FastCGI는 요청이 있을 때마다 프로세스가 만들어지는 것이 아니라 만들어진 프로세스가 계속해서 새로운 요청들을 처리한다. 덕분에 프로세스를 생성하고 제거하는 데에 드는 부하가 줄어든다.

 

3. PHP-FPM(FastCGI Process Manager)

PHP-FPM은 PHP를 FastCGI 모드로 동작하도록 해준다. PHP5.4 RC부터는 PHP에 기본으로 내장되었다.

PHP-FPM을 사용하면 아래와 같은 이점이 생긴다. 

 

  • Adaptive process spawning 
  • Basic statistics (ala Apache's mod_status) 
  • Advanced process management with graceful stop/start
  • Ability to start workers with different uid/gid/chroot/environment and different php.ini (replaces safe_mode)
  • Stdout & stderr logging
  • Emergency restart in case of accidental opcode cache destruction
  • 업로드를 빠르게 처리해준다.
  • "slowlog"를 통해서 느리게 동작하는 부분을 추적할 수 있게 한다.
  • Enhancements to FastCGI, such as fastcgi_finish_request() - 요청을 일단 끝내고 후처리가 요구되는 작업을 백그라운드로 처리할 수 있도록 해준다.



출처: https://soohyeon317.tistory.com/entry/CGI-FastCGI-개념 [Dean Story]