• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

wsgi와 gunicorn 질문

21.11.08 00:05 작성 조회수 396

4

asgi가 나오면서,, 묵혀두었던 wsgi 질문을 해도될까요?

http://wsgi.tutorial.codepoint.net/intro

일단 이거에 따르면, api나 서버가 아니라 그저 interface에 불과하다고 되어있습니다..

https://en.wikipedia.org/wiki/Web_Server_Gateway_Interface#:~:text=The%20Web%20Server%20Gateway%20Interface%20(WSGI%2C%20pronounced%20whiskey%5B1%5D%5B2%5D%20or%20WIZ-ghee%5B3%5D)%20is%20a%20simple%20calling%20convention%20for%20web%20servers%20to%20forward%20requests%20to%20web%20applications%20or%20frameworks%20written%20in%20the%20Python%20programming%20language.

즉, 일종의 calling convention이고,

 

gunicorn은 

공식문서에 

 Python WSGI HTTP Server for UNIX

라고 되어있는데,

wsgi 규약에 맞춰서  개발된 "서버" 인데,

웹서버와 웹 어플리케이션 사이를 중개하는 서버.이고

(여기서 서버의 의미는 웹클라이언트 요청을 받는 서버가 아니라, 웹서버의 요청을 serve한다는 의미의 서버 인가요?)

 

nginx는 웹서버 소프트웨어로  웹클라이언트의 요청을 받고 처리하는 소프트웨어이다.

 

gunicorn과 같은 wsgi가 필요한 이유는 nginx와 같은 웹서버 소프트웨어가 request가 받고 처리한 결과를, 파이썬으로 작성된 웹 어플리케이션이 해석할 수 있도록  통역(?)해주는 역할을 하는 것인가요?

 

 

답변 1

답변을 작성해보세요.

3

안녕하세요!

컴퓨터 네트워크에서 서버 컴퓨터란 클라이언트의 요청을 받아서 요청을 처리하고 그 결과를 클라이언트에게 응답해주는 컴퓨터를 의미합니다. 

사실 nginx 없이 gunicorn, uvicorn 자체가 서버가 될 수 있습니다. 저의 강좌에서 마지막 부록에서 nginx 없이 uvicorn이 서버 역할을 하게됩니다.

만약 nginx를 서버로 두고 uvicorn(또는 gunicorn) 과 같은 asgi(또는 wsgi) 서버를 미들웨어(중간 처리자)로 두는 경우에, nginx와 fastapi 또는 django를 직접적으로 연결하는 것이 아닌 중간에 uvicorn(또는 gunicorn)을 두는 이유는 nginx는 정적 사이트만 서빙을 할 수 있기 때문입니다. 즉, 이 경우 nginx는 단순히 미디어, html, xml 파일 등 정적파일을 서빙할 수 있지만, (물론 포트포워딩, 부하 분산, ip 제한 컨트롤 등 다양한 역할을 하지만) python 프로그램을 바로 실행할 수는 없습니다. 쉽게 말해 python 프로그램을 실행하려면 중간에 실행기가 필요한 것이죠. 이 역할을 하는 것이 바로 gunicorn 또는 uvicorn입니다. 이 규격이 바로 asgi 또는 wsgi인 것이죠.

gunicorn 또는 uvicorn은 중개자 역할로 많은 것을 처리해줍니다. 예를들어, automatic worker process management, python 구성 설정, multiple worker 구성 등 다양한 처리를 파이썬을 위해 처리해줍니다. 그리고 이 결과를 nginx가 이해할 수 있는 형식으로 소켓을 통해 전달합니다.

그리고 nginx는 그 결과를 클라이언트에게 전달하는 것이죠. 

아하 친절한 답변 감사합니다. 그러면 nginx가 없어도 돌아갈 수는 있지만, 추후  좀더 복잡한 웹서버 구현시 필수적으로 필요한 여러가지 기능들을 nginx가 제공하고 있는것인거죠?

네 맞습니다.