CGI, Fast CGI
by Cori해당 포스트에서는 CGI, Fast CGI가 무엇인지 설명하고, Fast CGI 구현 방식 중 하나인 Python FastCGI 모듈에 대해 살펴본다. 서버와 웹 서버 관련해서는 이전에 게시한 포스트 WAS 부분을 참고하자.
WAS, NAS, ~aaS 찍먹하기
회사 다니면서, 실제 서비스를 제공하기 위해 NLP 이외의 분야들에 대한 공부도 많이 필요하다는 것을 느끼고 있다.여기서는 요즘 가장 많이 듣고 있는 WAS, NAS, ~aaS에 대한 간단한 내용을 정리해
cori.tistory.com
Chap # 01. CGI (Common Gateway Interface)란 ?
CGI (Common Gateway Interface)는 웹 서버가 외부 프로그램을 실행하여 HTTP 요청을 처리할 수 있도록 하는 표준 인터페이스로, 이를 통해 동적인 웹 페이지를 생성할 수 있다. CGI는 다음과 같은 방식으로 동작한다.
Step 1. 클라이언트가 웹 서버에 실행 요청 ex) https://www.example.com/*script.py
Step 2. 웹 서버는 요청을 처리하기 위해 새로운 프로세스 생성
Step 3. 웹 서버가 CGI 프로그램(*script.py)을 실행
Step 4. CGI 프로그램이 요청을 처리하고 데이터(HTML 등) 생성
Step 5. 프로그램 실행이 끝나면 프로세스 종료
Step 6. 웹 서버가 CGI 프로그램의 출력을 클라이언트에게 응답으로 전달
CGI는 1990년대 웹 개발에서 중요한 역할을 했지만, 요청마다 새로운 프로세스를 생성하기 때문에 성능이 떨어지는 단점 등이 존재해 지금은 거의 사용되지 않는다. 이를 보완하기 위해 FastCGI, WSGI, PHP-FPM, Node.js 같은 방식이 등장했으며, 이들 중 대부분은 CGI에서 발전된 것이기에 기본적인 개념 정도는 알아두는 것이 좋다.
Chap # 02. Fast CGI (Common Gateway Interface)란 ?
FastCGI는 CGI(Common Gateway Interface)의 확장된 버전으로, 웹 서버와 애플리케이션 서버(또는 스크립트 실행 엔진) 간의 인터페이스 역할을 한다. 대표적인 FastCGI 구현 방식으로는 PHP-FPM (PHP FastCGI Process Manager). Python FastCGI 모듈, nginx + FastCGI, Apache + mod_fastcgi이 있으며, 다음과 같은 방식으로 동작한다.
Step 1. 클라이언트가 웹 서버 (Nginx, Apache 등)에 실행 요청
Step 2. 웹 서버는 요청 처리를 위해 새로운 프로세스를 생성하지 않고, 기존 프로세스 재사용*
Step 3. 웹 서버가 요청을 FastCGI 프로세스(백엔드 애플리케이션 서버)에 전달
Step 4. FastCGI 프로세스가 요청을 처리하고 응답 반환
Step 5. FastCGI 프로세스는 계속 실행 상태를 유지하며, 다음 요청 대기
기존 CGI는 요청이 들어올 때마다 새로운 프로세스를 생성하고 종료하는 방식인 반면, FastCGI는 한 번 실행된 프로세스를 유지하면서 여러 요청을 처리하기 때문에 성능이 향상된다.
Chap # 03. Python Fast CGI
Python 웹 애플리케이션을 FastCGI 방식으로 실행하기 위한 모듈에는 대표적으로 flup과 uWSGI가 있다.
- flup은 WSGI 기반의 Python 웹 애플리케이션을 FastCGI 서버로 실행할 수 있도록 지원하는 라이브러리로, 단순한 FastCGI 애플리케이션을 실행할 때 사용된다.
- uWSGI는 FastCGI뿐만 아니라 uWSGI 프로토콜, HTTP 등을 지원하는 범용 애플리케이션 서버로, Django, Flask 등과 쉽게 연동할 수 있다.
FastCGI 프로토콜을 지원하는 웹 서버(Nginx, Apache)와 연동하여 Python 애플리케이션을 실행할 수 있으며, 주로 Nginx + uWSGI 또는 Apache + mod_fastcgi 조합이 많이 사용된다.
Chap # 04. FastCGI와 uWSGI의 차이점
FastCGI는 CGI의 확장형으로서 성능을 향상시키는 방식이지만, uWSGI는 FastCGI보다 더욱 발전된 애플리케이션 서버 프로토콜이다. uWSGI는 자체적인 uWSGI 프로토콜을 제공하며, FastCGI와 같은 여러 프로토콜을 지원한다. 두 방식의 주요 차이점은 다음과 같다.
- FastCGI
- 웹 서버와 애플리케이션 서버 간의 통신을 위한 표준화된 프로토콜
- 요청이 들어오면 FastCGI 프로세스가 이를 처리하고 응답을 반환
- 특정 언어(예: PHP-FPM, Python FastCGI)와 결합하여 사용됨
- uWSGI
- FastCGI보다 다양한 기능을 제공하는 범용 애플리케이션 서버
- uWSGI, HTTP, FastCGI, SCGI 등의 여러 프로토콜을 지원
- Python WSGI 애플리케이션과 직접 호환 가능
- 멀티스레딩, 멀티프로세싱 및 로드 밸런싱 기능 포함
uWSGI는 FastCGI보다 유연한 설정이 가능하며, Python WSGI 애플리케이션과 쉽게 통합할 수 있기 때문에 Django, Flask 같은 프레임워크와 함께 많이 사용된다.
Chap # 05. FastCGI를 사용한 Python 애플리케이션 실행
FastCGI를 이용하여 Python 애플리케이션을 실행하려면 flup 또는 uWSGI 모듈을 사용할 수 있다. uWSGI를 이용한 FastCGI 사용 예시는 다음과 같다.
uwsgi --socket 127.0.0.1:9000 --protocol fastcgi --wsgi-file app.py
이후 Nginx와 연동이 필요한데, 다음과 같이 nginx의 default.conf 파일을 수정해주어야 한다.
server {
listen 80;
server_name example.com;
location / {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /path/to/app.py;
}
}
보다 자세한 설정 방법은 다음 포스트에서 다룰 예정이며, 이번 포스팅은 여기서 마치려고 한다.
Reference
1. 웹 서버, CGI, FastCGI - PHP를 사용하는 이유 ?
'CS > Server' 카테고리의 다른 글
| 서버에서 실시간 로그 확인하기 (0) | 2025.03.17 |
|---|---|
| 알아두면 쓸데있는 Ubuntu 명령어 모음 (1) | 2024.09.25 |
| Amazon ec2 instance 기본 세팅하기 (0) | 2024.03.11 |
| EC2 Setting (2) | 2024.01.03 |
| Window 딥러닝 서버 세팅 일지 (0) | 2023.02.24 |
블로그의 정보
코딩하는 오리
Cori