다음 프로젝트를 위해 시도할 9가지 Python 웹 서버

이 글에서는 파이썬 애플리케이션을 운영하는 데 활용 가능한 다양한 파이썬 웹 서버들에 대해 알아봅니다.

우선 웹 서버의 작동 원리와 서버 게이트웨이 인터페이스의 필요성에 대해 이해하고, 이어서 여러 파이썬 웹 서버와 그 핵심 기능들을 살펴볼 것입니다. 대부분의 서버는 PyPI 패키지 형태로 제공되어 프로젝트에 쉽게 설치하고 사용할 수 있습니다.

자, 이제 시작해 봅시다!

웹 서버란 무엇일까요?

파이썬 애플리케이션 개발 과정에서 개발 서버를 이용하여 앱을 테스트합니다. 하지만 개발이 완료되면 실제 운영 환경에 적합한 서버에 앱을 배포해야 합니다. 웹 서버는 이 과정에서 HTTP 서버의 기본적인 기능을 수행하는 여러 계층 중 하나입니다.

파이썬 웹 서버는 웹 브라우저와 같은 클라이언트의 HTTP 요청(GET, PUT, POST 등 단순 요청)을 처리하고 이에 대한 응답을 반환해야 합니다. 이러한 응답에는 요청 처리 성공 여부를 나타내는 HTTP 상태 코드와 HTML 웹 페이지, JSON, XML 등과 같은 다양한 형태의 데이터가 포함될 수 있습니다.

ASGI와 WSGI: 서버 게이트웨이 인터페이스의 이해

만약 여러분이 Django나 Flask와 같은 프레임워크를 사용하여 파이썬 애플리케이션을 개발했다고 가정해 봅시다. 기존 서버는 파이썬 애플리케이션에서 오는 요청을 제대로 인식하고 처리하지 못할 수 있습니다. 바로 이 지점에서 서버 게이트웨이 인터페이스가 중요한 역할을 합니다.

이 게이트웨이 인터페이스는 WSGI(Web Server Gateway Interface) 또는 ASGI(Asynchronous Server Gateway Interface)일 수 있습니다. 웹 서버는 클라이언트로부터 요청을 받은 후 이를 서버 게이트웨이 인터페이스로 전달합니다. 이 인터페이스(WSGI 또는 ASGI)는 노출된 호출 가능한 객체를 통해 파이썬 애플리케이션과 상호 작용합니다.

WSGI(Web Server Gateway Interface)는 요청을 순차적으로 처리합니다. 따라서 처리 시간이 오래 걸리는 HTTP 요청이 여러 개 있을 경우 전체 처리 속도에 영향을 미칠 수 있습니다.

이에 반해 비동기 서버 게이트웨이 인터페이스(ASGI)는 WSGI의 후속 기술로서, 요청을 비동기적으로 처리하는 추가적인 기능을 제공합니다.

예를 들어, 현재 처리 중인 요청에서 데이터베이스 읽기가 필요하고 (시간이 오래 걸릴 수 있음) 응답을 기다리고 있다고 가정해 봅시다. 이 때 ASGI는 첫 번째 요청이 응답을 기다리는 동안에도 다른 요청이 들어오면 그것을 처리할 수 있습니다.

이는 첫 번째 요청이 처리되어야만 두 번째 요청을 처리할 수 있는 WSGI와 대조적입니다. 따라서 ASGI를 사용하면 처리량을 향상시킬 수 있습니다. 또한 ASGI는 애플리케이션 내에서 비동기 파이썬 기능을 활용할 수 있게 해줍니다.

다양한 파이썬 웹 서버

이제 파이썬 애플리케이션에 사용할 수 있는 다양한 웹 서버들을 살펴보겠습니다. 또한, 실제 운영 환경에 즉시 사용 가능한 서버를 기본적으로 제공하는 특정 프레임워크들도 함께 다룰 것입니다. 아래 나열된 웹 서버들은 특정 순서에 따른 것이 아니며, 완전한 목록은 아닙니다.

유비콘 (Uvicorn)

FastAPI를 사용한 애플리케이션 개발에 익숙하신 분들이라면, 웹 서버 구현체인 Uvicorn을 접해보셨을 겁니다. Uvicorn은 파이썬을 위한 ASGI 서버 구현입니다.

Uvicorn 및 관련 종속성을 설치하려면 다음 명령을 실행하세요.

$ pip install uvicorn[standard]
# optional 및 Cython 기반 종속성 포함

Uvicorn의 주요 특징은 다음과 같습니다.

  • ASGI 구현체
  • 비동기 파이썬 환경에서 앱 실행 지원
  • 광범위한 옵션 목록을 갖춘 명령줄 도구
  • 팩토리 함수에서 실행되는 애플리케이션 지원
  • 프로그래밍 방식으로 서버 인스턴스 제어 기능 제공

구니콘 (Gunicorn)

Gunicorn은 뛰어난 프로세스 관리 기능으로 잘 알려진 파이썬 애플리케이션용 WSGI 서버입니다.

Uvicorn은 Gunicorn 작업자 클래스를 제공하여 성능과 프로세스 관리 이점을 동시에 얻을 수 있습니다. 자세한 배포 정보는 Gunicorn 공식 문서를 참고하시기 바랍니다.

파이썬 3.5 이상 버전을 사용하고 있다면, pip를 통해 Gunicorn을 설치할 수 있습니다.

$ pip install gunicorn

Gunicorn의 주요 특징은 다음과 같습니다.

  • 간결하고 빠른 성능
  • 다양한 웹 프레임워크와 호환성
  • HTTP 프록시 서버 사용 지원
  • 고급 프로세스 관리 기능

체리파이 (CherryPy)

CherryPy는 Django, Flask 및 FastAPI와 같은 파이썬 웹 프레임워크 중 하나이지만, 다른 프레임워크만큼 널리 알려져 있지는 않습니다. 여러 번의 안정적인 릴리즈를 거쳐, CherryPy는 10년 넘게 견고한 프레임워크로 성장해 왔으며, 활발한 개발자 커뮤니티를 보유하고 있습니다.

CherryPy는 단순하고 미니멀하지만 강력한 프레임워크라는 점을 강조하는 흥미로운 “CherryPy의 Zen”도 확인할 수 있습니다.

CherryPy는 웹 서버가 아니라 파이썬 프레임워크이지만, 대부분의 다른 프레임워크와 달리 프로덕션 환경에 바로 사용 가능한 서버를 기본적으로 제공하기 때문에 이 목록에 포함되었습니다.

CherryPy를 설치하고 시작하려면 다음 명령을 실행하십시오:

$ pip install CherryPy

CherryPy의 주요 특징은 다음과 같습니다.

  • 객체 지향 파이썬을 사용하는 파이썬 프레임워크; 초보자에게 적합
  • 프로덕션 준비가 완료된 HTTP 서버인 Cheroot 지원
  • Django와 같은 다른 웹 프레임워크보다 배우기 쉬움
  • 간단한 웹 앱 구축 및 마이크로서비스 배포 지원

다프네 (Daphne)

Django는 가장 인기 있는 파이썬 웹 프레임워크 중 하나입니다. 만약 Django로 애플리케이션을 개발해 보셨다면 Daphne 웹 서버를 사용해 보셨을 가능성이 높습니다. Daphne은 ASGI 서버 구현에 대한 참조 역할을 했던 최초의 ASGI 서버 구현체 중 하나입니다.

Daphne은 pip를 사용하여 설치할 수 있는 PyPI 패키지 형태로 제공됩니다.

$ pip install daphne

다음은 전체 스택 프로덕션 준비 파이썬 응용 프로그램 구축 과정을 안내하는 자세한 튜토리얼입니다.

Daphne의 주요 특징은 다음과 같습니다.

  • 프로덕션 환경에서 널리 사용됨
  • 모든 ASGI 서버 구현에 대한 참조 모델
  • HTTP, HTTP2 및 WebSocket 프로토콜 지원

파이썬 트리오 (Python Trio)

Trio 프로젝트는 병렬 I/O와 동시성을 지원하는 프로덕션급 비동기 I/O 기능을 제공하는 데 목표를 두고 있습니다. 이 프로젝트에는 다양한 웹 및 HTTP 파이썬 라이브러리도 포함되어 있습니다.

PyPI에서 최신 Trio 릴리스(2022년 6월 기준)를 설치할 수 있습니다.

$ pip install trio

다음은 파이썬을 이용한 웹 프로그래밍에 유용한 Trio 라이브러리 목록입니다.

  • hypercorn: HTTP를 지원하는 ASGI 서버입니다.
  • 머핀(Muffin): 파이썬용 ASGI 웹 프레임워크입니다.
  • 스타렛(Starlette): 경량 ASGI 프레임워크입니다.
  • trio-websocket: WebSocket 서버 및 클라이언트 지원
  • httpx: 파이썬용 HTTP 클라이언트

트위스티드 웹 (Twisted Web)

Twisted는 파이썬 애플리케이션을 위한 프레임워크입니다. 이 이벤트 기반 프레임워크에는 twisted.web이라는 웹 프로그래밍용 모듈이 포함되어 있습니다.

pip를 사용하여 Twisted 및 관련 모듈을 설치할 수 있습니다.

$ pip install Twisted

Twisted의 주요 특징은 다음과 같습니다.

  • 단위 테스트 및 정적 코드 검사 등 개발자 친화적인 기능
  • twisted.web은 WSGI 서버, HTTP 클라이언트 및 서버 지원을 제공합니다.

AIOHTTP

AIOHTTP는 클라이언트 및 서버 API를 통해 클라이언트 및 서버 측 기능을 모두 제공하는 파이썬 라이브러리입니다.

다음은 API에 대한 요청 속도를 크게 향상시키는 클라이언트 측 비동기 프로그래밍 기능을 설명하는 유용한 영상입니다.

AIOHTTP의 주요 특징은 다음과 같습니다.

  • HTTP 서버 및 클라이언트 기능 모두 지원
  • 쉬운 디버깅을 위한 로깅 지원; 클라이언트, 서버, 웹 소켓 등 다양한 로깅 제공
  • 테스트를 위한 pytest 플러그인을 통한 기본적인 테스트 지원: pytest-aiohttp (PyPI 패키지로 제공)

토네이도 (Tornado)

Tornado는 비동기 네트워킹을 지원하는 또 다른 파이썬 웹 프레임워크입니다. 최근 몇 년 동안 Tornado는 여러 차례의 안정적인 릴리스를 거쳐 왔으며, 최신 버전인 6.2는 2022년 7월에 출시되었습니다. 현재 Tornado는 파이썬 3.7 이상을 지원합니다.

이 목록에 있는 대부분의 패키지들과 마찬가지로 Tornado 역시 pip를 사용하여 설치할 수 있습니다.

$ pip install tornado

Tornado의 주요 특징은 다음과 같습니다.

  • HTTP 서버 (tornado.httpserver) 및 클라이언트 지원
  • 확장 가능하고 비차단 네트워크 I/O 사용
  • 연결이 장시간 필요한 애플리케이션에 매우 적합
  • 로깅, 단위 테스트 등 다양한 유틸리티 제공
  • 인증 서비스와의 원활한 통합 지원

마인헬드 (Meinheld)

Meinheld는 파이썬용 WSGI 서버입니다. 이벤트 처리 및 HTTP 요청 처리를 위해 기존 라이브러리를 활용하여 구축되었습니다.

pip를 사용하여 Meinheld를 설치할 수 있습니다.

$ pip install meinheld

Meinheld의 일부 기능:

  • http-parser 라이브러리를 사용하여 들어오는 HTTP 요청 처리
  • 이벤트 처리를 위해 picoev 라이브러리 기반으로 구축

결론

이 파이썬 웹 서버 목록이 여러분에게 도움이 되었기를 바랍니다. 앞으로 진행하는 프로젝트에 이들을 적극적으로 활용해 보세요. 위에서 주요 기능들을 간략히 설명했지만, 종속성 및 실제 작동 방식을 완벽히 이해하려면 애플리케이션에 직접 적용해 보는 것이 중요합니다. 👩🏽‍💻

파이썬 기술을 더욱 발전시키고 싶다면 koreantech.org의 파이썬 튜토리얼 라이브러리를 확인해 보시는 것을 추천합니다. 즐거운 코딩 되세요!