WSGI란 무엇인가?

2021. 6. 1. 14:43개발노트

WSGI (Web Server Gateway Interface)

WSGI는 Python 웹 프레임워크가 웹 서버와 통신할 수 있도록 도와주는 인터페이스입니다. WSGI는 웹 서버와 웹 애플리케이션 사이에 위치하여, 웹 서버가 요청을 처리하고 그 결과를 웹 애플리케이션에 전달하는 역할을 합니다. WSGI는 웹 서버와 웹 애플리케이션 두 가지의 특성을 모두 가지고 있습니다.

웹 서버와 웹 애플리케이션

  • 웹 서버: HTML, 이미지 등 정적인 파일을 처리하며, 대표적으로 Apache와 Nginx가 있습니다.
  • 웹 애플리케이션: Django, Flask와 같은 Python 프레임워크로, 동적인 요청을 처리하고 웹 서버에 결과를 반환합니다.

WSGI는 웹 서버가 요청에 대한 정보를 웹 애플리케이션에 전달할 수 있도록 Callable Object를 통해 중개 역할을 합니다.

CGI 대신 WSGI

CGI(Common Gateway Interface)는 2003년까지 Python 웹 프레임워크와 웹 서버 사이에서 요청을 처리하던 인터페이스였습니다. 2003년, WSGI가 Python 표준으로 등장하면서 CGI를 대체하게 되었습니다. WSGI는 메모리에 한 번만 적재되므로, CGI보다 메모리 사용이 적고 더 많은 요청을 처리할 수 있다는 장점이 있습니다.

WSGI 미들웨어

WSGI 미들웨어는 인증, 라우팅, 세션 관리, 쿠키 처리, 오류 페이지 표시 등의 기능을 추가할 수 있도록 해줍니다. WSGI 미들웨어는 Python 웹 프레임워크와 함께 사용되며, 대표적인 예로 uWSGI, Gunicorn, Werkzeug 등이 있습니다.

WSGI 서버 라이브러리

  • Gunicorn: UNIX 환경에서 사용하기 위해 만들어진 Python WSGI HTTP 서버입니다. Ruby의 Unicorn 프로젝트에서 영향을 받았으며, 빠르고 가벼운 것이 장점입니다. Gunicorn 팀은 HTTP 프록시 서버로 Nginx 사용을 권장합니다.
  • mod_wsgi: Apache HTTP Server 모듈로, Python 웹 애플리케이션을 위한 WSGI 인터페이스를 지원합니다. 최신 버전에서는 Python 2.6과 3.2 버전을 모두 지원합니다.
  • uWSGI: 호스팅 서버에서 풀스택 개발이 가능하도록 개발되었습니다. 일관된 API와 설정을 통해 다양한 언어와 프로토콜, 프로세스 매니저, 프록시 등을 다룰 수 있습니다. uWSGI는 Objective-C, C, C++ 등 다른 언어들과도 호환 가능합니다. 단점으로는 기능이 많아지면서 생기는 bloat 현상이 있습니다.

추가 사항

  • WSGI의 표준화: WSGI는 Python 웹 애플리케이션의 배포와 실행을 위한 표준 인터페이스로, PEP 3333에서 정의되어 있습니다. 이는 Python 커뮤니티가 웹 애플리케이션과 서버 간의 상호 운용성을 보장하기 위해 만든 표준입니다.
  • WSGI의 동작 방식: WSGI 애플리케이션은 하나의 함수로 구현되며, 이 함수는 환경 변수와 시작 응답 콜백을 인자로 받아야 합니다. 환경 변수는 웹 서버에서 제공하는 요청 정보가 담긴 딕셔너리이고, 시작 응답 콜백은 상태 코드와 헤더를 웹 서버에 전달하는 함수입니다.
  • 성능 최적화: WSGI는 CGI에 비해 메모리 사용이 적고, 요청 처리가 더 효율적입니다. 이는 특히 고성능 웹 애플리케이션에서 중요한 이점입니다.