티스토리 뷰
1. CGI (Common Gateway Interface)
과거 웹은 정적 웹사이트만 존재했었다. 쉽게 말해 웹 서버만 존재한다는 의미로 아파치 서버만 존재했다고 볼 수 있다.
정적 웹사이트는 단순히 *.html만 표시하는 사이트였다.
하지만 사용자가 증가하면서 여러 상황에 알맞는 데이터들을 보여주어야했으며 결국 동적 페이지가 개발되었다.
동적 페이지는 상황에 알맞게 데이터를 계산하여 변하는 ui를 표현하는 페이지를 의미한다.
대표적으로 php에서 변수를 선언 및 데이터를 가공하여 표현하는 사이트임을 의미한다.
사용자가 브라우저를 통해 요청을 보내고 서버는 이 요청을 처리하게 되는데
이때 처리하는 프로세스가 존재하는데 이 프로세스가 CGI라는 체계를 통해 만들어진 것이다.
또는 이 프로그램을 CGI라고도 간략히 표현할 수 있다.
요청(request)이 생길 때 마다 child process를 새로 만들어 요청을 처리하고 다시 삭제하는 방식으로 이루어진다.
쉽게 말해 멀티 프로세스 방식을 통해 처리하여 불필요한 프로세스 생성 비용이 존재하여
사용자가 몰리는 경우 과부하가 발생하여 서버에 문제가 발생할 수 밖에 없다.
PHP 같은 경우 5.3 버전 이하는 CGI를 사용하여 요청을 처리하고 있다.
2. FastCGI (Fast Common Gateway Interface)
CGI의 문제점을 해결한 체계로서 요청(request)을 보내면 웹 서버는 CGI와 다르게
하나의 큰 프로세스가 담당하여 모든 요청을 처리하는 것을 의미한다. 자식 프로세스를 생성하지 않는 것이 주요 특징이다.
자바에서는 서블릿(Servlet) 이라는 체계를 통해 대신하여 사용하기도 한다. (서블릿은 멀티스레드 방식으로 처리를 담당)
가장 큰 장점으로는 CGI와 다르게 요청이 많아도 하나의 큰 프로세스가 계속 처리하기 child process 생성 비용이 없어 처리가 빠르다.
PHP 7.0 이상 버전에서는 FastCGI를 기본으로 채택하여 사용한다.