지난번에 다루었던 오리지널 CGI는 여러가지 단점들이 존재했고, 많은 사람들은 이런 단점을 해결하기 위해 여러 버전의 발전된 CGI개발을 시도했다.
이번 글에서는 지난번 글에서 이야기한 것처럼 오리지널 CGI의 발전된 버전인mod_python, FastCGI, SCGI, WSGI 등에 대해 알아보려고 한다.
mod_python
CGI를 대체하기 위해 Apache에서 만든 mod_python이라는 모듈이 있다.
- 쉽게 말하면 mod_python은 Apache process 안에 python 인터프리터를 임베드 시켜버린 것이다.
- 매 요청마다 인터프리터를 실행할 필요가 없게 되어 리퀘스트를 처리하는 속도가 올라가는 장점이 있다.
- mod_python은 'HTML을 섞은 파이썬'이라는 개념보다는 자바 언어의 JSP와 유사하게 '파이썬을 섞은 HTML'이라는 개념이라고 한다.
- 그러나 파이썬 인터프리터는 파일을 실행할 때 캐싱을 사용하기 때문에, 파일의 내용이 바뀌면 전체 웹서버가 업데이트를 위해 재구동되어야 하는 단점이 있다.
- mod_python은 리퀘스트를 핸들링하기 위해 자식 프로세스들을 가지고 있는데, 인터프리터 특성 상 업데이트를 위해 사용하지 않는 프로세스가 있더라도 모든 자식 프로세스들을 재구동해야 한다. 이건 전체 웹서버스를 느리게 만든다.
- 또한 libpython의 특정 버전과 연결되어 있어서 재컴파일링 없이 새로운 버전으로 바꾸는 것이 불가능하다.
- mod_python은 Apache web server의 맞춤 환경이기 때문에 mod_python으로 작성된 프로그램은 다른 웹서버에서 작동이 잘 안 될 가능성이 있다.
역사
mod_python 위키에 가보면 mod_python의 역사에 대해 좀 더 자세히 설명해놓았는데, 간략하게 정리하면 아래와 같다.
- mod_python은 NSAPy라고 불리는 Apache HTTP 서버 프로젝트의 한 부분이었다.
- 첫번째 mod_python 버전은 2000년에 릴리즈되었다.
- 2002년 9월, mod_python은 Apache 재단의 일부분이 되었다.
- 차세대 Python WSGI의 개발로 인해 많은 소스들이 mod_wsgi 개발에 사용되었다.
- 2010년 이후로 메이져한 개선이 일어나고 있지않다.
Fast CGI, SCGI
FastCGI의 역사는 이 위키를 참고하자.
- FastCGI와 SCGI(Simple Common Gateway Interface)는 오리지널 CGI의 성능 문제를 풀기 위해 만들어진 CGI이다.
- CGI의 단점을 개선하기 위해 Open Market이라는 회사가 1990년대 중반에
FastCGI라는 CGI를 만들었다.
- 이 CGI들은 웹 서버에 인터프리터를 임베딩하는 것 대신에, 백그라운드에서 오래 작동하는 프로세스를 생성한다.
- SCGI는 좀더 간편한 FastCGI라고 한다. 그래서 이 둘 간의 차이점은 거의 없다고 한다. 보통 FastCGI를 더 많이 쓴다고 한다. (그러나 최근에는 FastCGI도 직접적으로 사용되지는 않는다고 한다.)
- 많이 쓰는 웹서버인 nginx도 FastCGI를 지원한다.
WSGI
참고 : https://en.wikipedia.org/wiki/Web_Server_Gateway_Interface
2003년 파이썬 코드들은 대부분 CGI, FastCGI, mod_python에 의해서 실행되고 있었다.
당시 Zope, Quixote, Webware, SkunkWeb, PSO 같은 여러 프레임워크들이 있었고, 새로운 파이썬 사용자에게는 너무나 많은 프레임워크 선택지와 여러 CGI들을 조합해야하는 것이 혼란으로 다가왔다.
반면, 자바의 경우 servlet이 모든 자바 프레임워크와 호환되면서 선택의 에너지를 줄여주고 효과적인 웹 개발을 가능하게 했다. 파이썬의 WSGI도 자바의 servelet같이 모든 프레임워크와 웹 서버를 이어줌으로써 호환을 유지하기 위해 탄생한 인터페이스이다.
- WSGI는 현재 파이썬으로 코드를 작성하기 가장 좋은 CGI이다.
- 물론 프레임워크를 만드는 프로그래머가 아니면, 일반 프로그래머들은 이걸 직접 건드릴 일이 별로 없다고 한다.
- 그러나 웹 개발을 위해 프레임워크를 고를 때 WSGI를 지원하는 프레임워크를 고르는게 좋다고 한다.(
어짜피 대부분 WSGI 지원하는 Django 쓰지않나?..)
- WSGI의 가장 큰 장점 중 하나는 unification이다.
- WSGI가 지원되는 프로그램(WSGI를 지원하는 프레임워크로 작성된 프로그램)이면, 이 프로그램은 (WSGI가 커버 가능한 즉, mod_python, FastCGI, CGI 등) 모든 웹 서버 인터페이스에서 deploy할 수 있다.
- 또 하나의 WSGI가 가진 장점은 미들웨어라는 것.
- 미들웨어는 프로그램에 다양한 functionality를 제공한다.(예를 들어, HTTP가 연속되어 오는 리퀘스트들이 동일한 유저에게 오는지 파악하지 않아도 된다는데, 이 부분은 더 공부가 필요할 것 같다.)
마치며
오늘은 mod_python, Fast CGI, WSGI 등 CGI의 발전된 버전에 대해 알아보았다. 이제는 거의 WSGI를 이용한 프레임워크를 쓰기 때문에 나머지는 역사로만 남아있지만, 이런 역사적 배경을 기초로 다지면서 개발 공부의 이해도를 높여주는 것 같다.