일반 영어로 된 WSGI와 CGI는 무엇입니까?


답변:


60

WSGI는 웹 서버 프로세스의 일부 (임베디드 모드) 또는 별도의 프로세스 (데몬 모드)로 웹 서버 시작시 Python 인터프리터를 실행하고 스크립트를로드합니다. 각 요청은 호출되는 스크립트의 특정 함수를 생성하며 요청 환경은 함수에 인수로 전달됩니다.

CGI는 각 요청마다 별도의 프로세스로 스크립트를 실행하고 환경 변수, stdin 및 stdout을 사용하여 "통신"합니다.


15
WSGI! = mod_wsgi. 귀하의 언어는 WSGI의 구현 인 mod_wsgi를 의미합니다. WSGI 자체는 사양 일 뿐이며 CGI를 포함하여 다양한 방식으로 구현할 수 있습니다.
Graham Dumpleton

@Graham : 해당 모드에서 WSGI 앱 실행을 지원하는 다른 WSGI 컨테이너가 없다는 말입니까?
Ignacio Vazquez-Abrams

3
기술적으로는 적어도 프로세스가 시작되는 방법이나 임베디드 시스템 내에서 코드가 활성화되는 방법만큼이 두 가지보다 미묘한 변형이 있다고 말할 수 있습니다. 따라서 두 가지 범주로 일반화하는 데주의해야합니다. 총체적인 수준에서 당신은 당신이 가진 것을 말할 수 있지만, 당신이 그것을 탐구하고 싶다면 그것보다 훨씬 더 많은 것이 있습니다.
Graham Dumpleton

1
@GrahamDumpleton, 호기심에 CGI 위에 WSGI를 구현하는 방법을 설명해 주시겠습니까?
Yoland

2
WSGI 사양을 읽으십시오. CGI / WSGI 브리지의 예를 보여줍니다. python.org/dev/peps/pep-3333/#the-server-gateway-side 보다 강력한 구현은 github.com/GrahamDumpleton/cgi2wsgi를 참조하십시오 . 진지 하게도 일반적으로 CGI를 피하고 싶을 것입니다.
Graham Dumpleton

256

완전히 뒤로 물러 난 관점 인 Blankman에서 웹 서비스 게이트웨이 인터페이스에 대한 "소개 페이지"가 ​​있습니다.

1 부 : 웹 서버

웹 서버는 응답을 제공합니다. 그들은 주위에 앉아 참을성있게 기다렸다가 전혀 경고없이 갑자기 :

  • 클라이언트 프로세스가 요청을 보냅니다. 클라이언트 프로세스는 웹 서버, 봇, 모바일 앱 등이 될 수 있습니다. 단순히 "클라이언트"입니다.
  • 웹 서버는이 요청을받습니다.
  • 고의적으로 중얼 거리다 다양한 일이 일어난다 (아래 참조)
  • 웹 서버는 클라이언트에게 무언가를 다시 보냅니다.
  • 웹 서버는 다시 주위에 앉아

웹 서버 (적어도 더 나은 것)는 이것에 매우 뛰어납니다. 그들은 수요에 따라 처리를 확장 및 축소하고, 정말 복잡한 네트워크를 통해 가장 약한 클라이언트와 안정적으로 대화를 나누며 우리는 그것에 대해 걱정할 필요가 없습니다. 그들은 계속 봉사합니다.

이것이 제 요점입니다. 웹 서버는 바로 서버입니다. 그들은 콘텐츠에 대해, 사용자에 대해 전혀 알지 못하며 실제로 많이 기다렸다가 안정적으로 응답하는 방법 외에는 아무것도 모릅니다.

선택한 웹 서버는 소프트웨어가 아닌 제공 선호도를 반영해야합니다. 웹 서버는 처리 또는 논리적 작업이 아닌 서비스를 담당해야합니다.

파트 2 : (PYTHON) 소프트웨어

소프트웨어는 주위에 앉아 있지 않습니다. 소프트웨어는 실행 시간에만 존재합니다. 소프트웨어는 환경에서 예기치 않은 변화 (파일이 예상 한 위치에 있지 않음, 매개 변수 이름이 변경되는 등)에 관해서는별로 수용하지 않습니다. 물론 최적화가 디자인의 중심 원칙이되어야하지만 소프트웨어 자체는 최적화되지 않습니다. 개발자는 최적화합니다. 소프트웨어가 실행됩니다. 소프트웨어는 위의 '고의적 인 중얼 거림'섹션의 모든 작업을 수행합니다. 무엇이든 될 수 있습니다.

소프트웨어 선택 또는 디자인은 웹 서버 선택이 아닌 응용 프로그램, 선택한 기능을 반영해야합니다.

이것은 웹 서버로 언어를 "컴파일하는"전통적인 방법이 고통스러운 곳입니다. 결국에는 실제 서버 환경에 대처하기 위해 애플리케이션에 코드를 넣거나 적어도 런타임에 포함 할 적절한 '래퍼'라이브러리를 선택하여 웹 서버 전반에 걸쳐 균일 성을 제공해야합니다.

그렇다면 WSGI 란 무엇입니까?

그래서 마침내 WSGI는 무엇입니까? WSGI는 두 부분으로 작성된 일련의 규칙 입니다. 통합을 환영하는 모든 환경에 통합 될 수 있도록 작성되었습니다.

웹 서버 측용으로 작성된 첫 번째 부분은 "좋아, WSGI 응용 프로그램을 다루고 싶다면 소프트웨어가로드 될 때 어떻게 생각할 것인지에 대해 설명합니다. 응용 프로그램에서 사용할 수 있도록해야 할 사항은 다음과 같습니다. 모든 애플리케이션이 가질 것으로 기대할 수있는 인터페이스 (레이아웃)입니다. 또한 문제가 발생하는 경우 앱이 어떻게 생각하고 어떻게 작동 할지를 예상 할 수 있습니다. "

Python 응용 프로그램 소프트웨어 용으로 작성된 두 번째 부분은 "좋아, WSGI 서버를 다루고 싶다면 서버가 사용자에게 연락 할 때 어떻게 생각할 것인지에 대해 설명합니다. 서버에서 사용할 수 있도록해야 할 사항은 다음과 같습니다. 여기에 모든 서버가 가질 것으로 예상 할 수있는 인터페이스 (레이아웃)가 있습니다. 또한 문제가 발생하면 행동해야하는 방법과 서버에 알려야하는 내용이 있습니다. "

그래서 당신은 그것을 가지고 있습니다-서버는 서버가 될 것이고 소프트웨어는 소프트웨어가 될 것입니다. 그리고 여기에 다른 하나의 세부 사항을 허용하지 않고도 잘 지낼 수있는 방법이 있습니다. 이것은 WSGI입니다.

반면에 mod_wsgi는 WSGI 호환 소프트웨어와 통신 할 수 있도록하는 Apache 용 플러그인입니다. 즉, mod_wsgi는 위의 규칙 책 중 1 부 규칙의 구현 ( Apache에서)입니다.

CGI에 관해서는 .... 다른 사람에게 물어보십시오 :-)


21
이 답변이 "다른 사람에게 물어보기"로 끝나는 대신, 누군가가 같은 방식으로 CGI를 포함하도록이 답변을 편집하기를 바랍니다.
Bruno Bronosky 2016 년

1
'서버는 서버가되고 소프트웨어는 소프트웨어가 될 것입니다'- '서버는 화성에서, 소프트웨어는 금성에서 왔습니다':)
Rahul

22

이 공간의 모든 용어에 대해 명확하지 않은 경우, 혼동되는 두문자어가 포함 된 용어이며 CGI 대 FastCGI 대 WSGI 등을 논의 하는 공식 Python HOWTO 형식의 좋은 배경 독자도 있습니다. 의 위에. 먼저 읽어보고 싶습니다.


21

CGI와 WSGI는 모두 프로그램이 웹 요청을 처리하는 데 사용할 수있는 표준 인터페이스를 정의합니다. CGI 인터페이스는 WSGI보다 낮은 수준에 있으며 HTTP 요청의 데이터를 포함하는 환경 변수를 설정하는 서버가 포함되며 프로그램은 베어 HTTP 서버 응답과 매우 유사한 형식을 반환합니다.

반면 WSGI는 프로그래머가 서버에 구애받지 않고 다른 WSGI 응용 프로그램 (미들웨어)에 래핑 할 수있는 응용 프로그램을 작성할 수 있도록하는 Python 전용의 약간 더 높은 수준의 인터페이스입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.