Django

[django]WSGI 란?(CGI, WSGI,AWGI)

a-몬드 2022. 5. 24. 15:05
반응형

WSGI를 도입하면서 정확이 이게 무엇이고 어떻게 작동하는지를 모르고 사용만 했다.

python 공식문서에 설명이 되어있는 것을 봐도 너무 어려웠다.

이것저것 알아보고 공부한 것을 정리해보겠다.

 

WSGI는 번역기

WSGI란?

 

  • 웹서버와 프레임워크(django), 애플리케이션을 연결해주는 Python의 표준 API
  • WSGI는 서버와 게이트웨이,애플리케이션과 프레임워크 양단으로 나뉘어 있다.
  • 웹서버는 Python코드를 읽을 수 없고, 굳이 불필요한 코드를 전송해서 비용을 증가시킬 이유가 없다.
  • WSGI는 서버에서는 애플리케이션으로 대하고, 애플리케이션에서는 서버처럼 행동한다.

 

웹서버와 웹 애플리케이션의 소통을 도와주는 번역기와 같은 역할을 하는 API

 

WSGI 작동방식

 

1. WSGI와 Web Server

  • Callable Object를 통해 Web Server 요청에 대한 정보를 WAS에 전달
  • Callable Object는 Function이나 Object의 형태가 될 수 있다.
  • Web Server는 HTTO Request(Method, URL, Data 등), Callback 함수를 제공

 

2. WSGI와 Web Framwork, APP

  • 웹 애플리케이션 서버는 호출 가능한 class, objects, function형식으로 서버에 표시된다.
  • retrun [page]와 같은 형식으로 모든 데이터를 반복 가능한 형식으로 반환해야 한다.

 

추가

  • 장고의 내장 서버는 WSGI의 기능을 자체적으로 포함 -> 개발환경에서 python manage.py runserver로 테스트
  • Production 단계에서는 Nginx, Gunicorn, Django의 구성을 많이 사용(현재 우리 프로젝트 구성)
  • Gunicorn을 사용할 때 worker process의 개수와 worker class(async방식인 Gevent, Tornado)를 설정하여 요청 처리 성능을 높일 수 있다. 

 

WSGI와 CGI도 함께 같이 언급이 많이 되는데 둘의 차이점도 알아보았다.

 

3.WSGI와 CGI의 차이

 

CGI

WSGI

  • CGI는 플랫폼에 상관 없이 동작 가능
  • 매번 요청에 대해 프로세스를 생성(fork)한다.
  • 요청이 많이질수록 성능 저하
  • Ptyhon에 종속적
  • CGI의 디자인 패턴을 기반으로 제작되었지만 동작 방식의 차이
  • WSGI는 매번 요청에 대해 프로세스를 생성(fork)하지 않는다.
  • 요청이 많아져도 성능 저하가 없다. 
  • WAS를 호출할 때 요청(request)의 헤더 부분을 환경정보로 전달하며 이때 콜백함수도 같이 전달
  • 그 후 WAS의 요청을 처리하고 콜백함수로 응답하는 방식

 

 

반응형