이 목록에서는 Python 애플리케이션을 배포하는 데 사용할 수 있는 여러 Python 웹 서버를 소개합니다.
웹 서버의 작동 방식과 서버 게이트웨이 인터페이스의 필요성을 이해하는 것으로 시작하겠습니다. 그런 다음 Python 웹 서버 목록과 주요 기능을 살펴보겠습니다. 대부분은 프로젝트에서 설치하고 사용할 수 있는 PyPI 패키지로 제공됩니다.
의 시작하자!
목차
웹 서버란 무엇입니까?
Python 애플리케이션을 개발할 때 개발 서버를 사용하여 앱을 테스트합니다. 그러나 개발이 완료되면 프로덕션 등급 서버에 앱을 배포해야 합니다. 위에 추가된 여러 계층 중 웹 서버는 HTTP 서버의 기본 기능을 가져야 합니다.
Python 웹 서버는 웹 브라우저와 같은 클라이언트의 HTTP 요청(GET, PUT 및 POST와 같은 단순 HTTP 요청)을 처리하고 응답을 반환할 수 있어야 합니다. 이 응답에는 요청이 성공적으로 처리되었는지 여부를 나타내는 HTTP 상태 코드가 포함될 수 있습니다. HTML 웹 페이지와 JSON, XML 등과 같은 반구조화된 데이터로 구성될 수 있습니다.
ASGI 대 WSGI: 서버 게이트웨이 인터페이스 이해
Django 또는 Flask와 같이 선택한 프레임워크에서 Python 애플리케이션을 개발했다고 가정합니다. 기존 서버는 Python 응용 프로그램에 대한 요청을 이해하고 처리하지 못할 수 있습니다. 여기에서 서버 게이트웨이 인터페이스가 작동합니다.
이 게이트웨이 인터페이스는 WSGI(Web Server Gateway Interface) 또는 ASGI(Asynchronous Server Gateway Interface)일 수 있습니다. 웹 서버는 클라이언트로부터 요청을 수신한 다음 서버 게이트웨이 인터페이스로 리디렉션합니다. 인터페이스(WSGI/ASGI)는 노출된 호출 가능 항목을 통해 Python 애플리케이션과 상호 작용합니다.
WSGI(Web Server Gateway Interface)는 요청을 순차적으로 처리합니다. 느린 HTTP 요청이 여러 개 있는 경우 처리량에 영향을 줍니다.
비동기식 서버 게이트웨이 인터페이스(ASGI)는 WSGI의 후속 제품으로 요청을 비동기식으로 처리하는 추가 기능이 있습니다.
현재 서비스 중인 요청에 데이터베이스 읽기가 필요하고(잠재적으로 오랜 시간이 걸릴 수 있음) 응답을 기다리고 있다고 가정합니다. 첫 번째 요청이 응답을 기다리고 있을 때 ASGI는 두 번째 들어오는 요청을 처리할 수 있습니다.
이는 첫 번째 요청이 두 번째 요청에 대해 처리되어야 하는 WSGI와 대조됩니다. 따라서 ASGI를 사용하면 처리량이 증가할 수 있습니다. ASGI를 사용하면 애플리케이션 내에서 비동기 Python 기능을 사용할 수도 있습니다.
파이썬 웹 서버
이제 Python 애플리케이션에 사용할 수 있는 웹 서버를 나열하십시오. 또한 프로덕션 준비 서버에 대한 기본 지원을 제공하는 특정 프레임워크도 포함했습니다. 이것은 완전한 목록이 아니며 아래 웹 서버 권장 사항은 특정 순서가 아닙니다.
유비콘
FastAPI를 사용한 애플리케이션 개발에 익숙하다면 웹 서버 구현인 Uvicorn을 접했을 것입니다. Uvicorn은 Python용 ASGI 서버 구현입니다.
pip를 사용하여 Uvicorn 및 관련 종속성을 설치하려면 다음 명령을 실행합니다.
$ pip install uvicorn[standard] # includes installation of optional and Cython-based dependencies
다음은 Uvicorn의 두드러진 특징입니다.
- ASGI 구현
- 비동기 Python 환경에서 앱 실행 지원
- 광범위한 옵션 목록이 있는 명령줄 도구
- 공장 기능에서 실행 중인 애플리케이션 지원
- 프로그래밍 방식으로 서버 인스턴스를 제어하는 기능 제공
구니콘
Gunicorn은 고급 프로세스 관리 기능으로 잘 알려진 Python 애플리케이션용 WSGI 서버입니다.
Uvicorn은 Gunicorn 작업자 클래스를 제공하여 성능 및 프로세스 관리 이점을 동시에 달성할 수 있습니다. 이 문서 페이지에는 Gunicorn 배포에 대한 세부 정보가 포함되어 있습니다.
Python 3.5 이상이 있는 경우 pip를 사용하여 Gunicorn을 설치할 수 있습니다.
$ pip install gunicorn
다음은 Gunicorn의 두드러진 기능입니다.
- 간단하고 빠름
- 많은 웹 프레임워크와 호환
- HTTP 프록시 서버 사용 지원
- 고급 프로세스 관리
체리파이
CherryPy는 Django, Flask 및 FastAPI와 같은 Python 웹 프레임워크이지만 이러한 프레임워크만큼 인기가 없습니다. 몇 가지 안정적인 릴리스를 통해 CherryPy는 10년 넘게 완전한 프레임워크로 발전해 왔습니다. 또한 지원하는 개발자 커뮤니티가 있습니다.
CherryPy가 단순하고 미니멀하면서도 강력한 프레임워크라는 본질을 전달하는 흥미로운 Zen of CherryPy를 확인할 수 있습니다.
CherryPy는 웹 서버가 아닌 Python 프레임워크이지만 대부분의 다른 프레임워크와 달리 기본적으로 프로덕션 등급 서버를 지원하므로 목록에 있습니다.
CherryPy를 설치하고 시작하려면 다음을 실행하십시오.
$ pip install CherryPy
다음은 CherryPy의 두드러진 기능입니다.
- 객체 지향 파이썬을 사용하는 파이썬 프레임워크; 초보자에게 잘 맞는
- 프로덕션 준비가 된 HTTP 서버인 Cheroot 지원
- Django와 같은 다른 웹 프레임워크보다 배우기 쉽습니다.
- 간단한 웹 앱을 구축하고 마이크로서비스에 배포하기 위한 지원
다프네
Django는 가장 인기 있는 Python 웹 프레임워크 중 하나입니다. Django로 애플리케이션을 개발했다면 Daphne 웹 서버를 사용했을 것입니다. Daphne은 ASGI 서버 구현에 대한 참조로 사용된 최초의 ASGI 서버 구현 중 하나입니다.
Daphne은 pip를 사용하여 설치할 수 있는 PyPI 패키지로 제공됩니다.
$ pip install daphne
다음은 전체 스택 프로덕션 준비 Python 응용 프로그램을 빌드하는 과정을 안내하는 자세한 자습서입니다.
다음은 Daphne의 두드러진 특징입니다.
- 프로덕션 환경에서 널리 채택됨
- 모든 ASGI 서버 구현에 대한 참조
- HTTP, HTTP2 및 WebSocket 프로토콜 지원
파이썬 트리오
Trio 프로젝트는 병렬 I/O 및 동시성을 지원하는 프로덕션 등급의 비동기 I/O 기능을 제공하는 것을 목표로 합니다. 이 프로젝트에는 여러 웹 및 HTTP Python 라이브러리도 있습니다.
PyPI에서 최신 Trio 릴리스(2022년 6월)를 설치할 수 있습니다.
$ pip install trio
다음은 Python을 사용한 웹 프로그래밍에 유용한 Trio 라이브러리 목록입니다.
- hypercorn: Hypercorn은 HTTP를 지원하는 ASGI 서버입니다.
- 머핀: 머핀은 Python용 ASGI 웹 프레임워크입니다.
- startlette: Starlette는 가벼운 ASGI 프레임워크입니다.
- trio-websocket: WebSocket 서버 및 클라이언트 지원
- httpx: Python용 HTTP 클라이언트
꼬인 웹
Twisted는 Python 애플리케이션을 위한 프레임워크입니다. 이 이벤트 기반 프레임워크에는 twisted.web이라는 웹 프로그래밍용 모듈이 포함되어 있습니다.
pip를 사용하여 Twisted 및 관련 모듈을 설치할 수 있습니다.
$ pip install Twisted
다음은 Twisted의 두드러진 기능입니다.
- 단위 테스트 및 정적 코드 검사와 같은 개발자 친화적인 기능
- twisted.web은 WSGI 서버와 HTTP 클라이언트 및 서버 지원을 제공합니다.
AIOHTTP
AIOHTTP는 클라이언트 및 서버 API를 통해 클라이언트 및 서버 측 기능을 제공하는 Python 라이브러리입니다.
다음은 API에 대한 요청 속도를 크게 높이는 클라이언트 측의 비동기 프로그래밍 기능을 설명하는 유용한 비디오입니다.
다음은 AIOHTTP의 두드러진 기능입니다.
- HTTP 서버 및 클라이언트 기능 모두 지원
- 더 쉬운 디버깅을 위한 로깅 지원; 클라이언트, 서버, 웹 소켓 등에 대한 로깅을 제공합니다.
- 테스트를 위한 pytest 플러그인을 통한 테스트에 대한 기본 지원: pytest-aiohttp, PyPI 패키지로 사용 가능
폭풍
Tornado는 비동기 네트워킹을 지원하는 또 다른 Python 웹 프레임워크입니다. 최근 몇 년 동안 Tornado의 안정적인 릴리스가 많이 있었습니다. 가장 최신 버전인 6.2가 2022년 7월에 릴리스되었습니다. 현재 Tornado는 Python 3.7 이상을 지원합니다.
이 목록에 있는 대부분의 패키지와 마찬가지로 Tornado는 pip를 사용하여 설치할 수도 있습니다.
$ pip install tornado
다음은 Tornado의 두드러진 특징입니다.
- HTTP 서버 tornado.httpserver 및 클라이언트 지원
- 확장 가능하고 비차단 네트워크 I/O 사용
- 상당히 긴 시간 간격 동안 연결이 필요한 애플리케이션에 매우 적합
- 로깅, 단위 테스트 등을 위한 유틸리티
- 인증 서비스와의 원활한 통합
마인헬드
Meinheld는 Python용 WSGI 서버입니다. 이벤트 처리 및 HTTP 요청 처리를 위해 기존 라이브러리를 사용하고 구축합니다.
pip를 사용하여 Meinheld를 설치할 수 있습니다.
$ pip install meinheld
Meinheld의 일부 기능:
- http-parser 라이브러리를 사용하여 들어오는 HTTP 요청 처리
- 이벤트 처리를 위해 picoev 라이브러리 위에 빌드
결론
이 Python 웹 서버 목록이 도움이 되었기를 바랍니다. 향후 프로젝트에서 꼭 사용해 보십시오. 주요 기능을 나열했습니다. 종속성과 작동 방식을 완전히 이해하려면 애플리케이션에서 이를 사용해야 합니다. 👩🏽💻
Python 기술을 향상시키려면 koreantech.org의 Python 자습서 라이브러리를 확인하는 것이 좋습니다. 즐거운 코딩!