프로덕션 WSGI 서버를 사용하여 Flask 앱 실행

Salman Mehmood 2024년2월15일
프로덕션 WSGI 서버를 사용하여 Flask 앱 실행

이 설명과 함께 WSGI 서버에 대해 배우고 작동 방식을 살펴보겠습니다. 또한 WSGI 서버를 만들고 이 서버 내에서 Flask 및 Python으로 앱을 실행하는 방법도 배웁니다.

WSGI 서버 생성 및 Flask 및 Python의 서버 내부에서 앱 실행

WSGI라고도 하는 웹 서버 게이트웨이 인터페이스는 코드 라인이 있는 함수 또는 클래스를 가리키는 클라이언트의 요청을 받으면 프로세스를 따릅니다. 각 코드 라인은 순차적으로 실행되고 마지막으로 응답이 클라이언트에 제공됩니다.

그런 다음 애플리케이션은 후속 요청을 처리하고 클라이언트가 응답을 받을 때까지 동일한 프로세스를 따릅니다.

웹 서버 게이트웨이 인터페이스 프로세스 1

웹 애플리케이션에 대한 질문이 제기됩니다. 전체가 한 번에 하나의 요청만 처리합니까? 아니요, 작업자는 여러 요청을 동시에 지원하고 처리합니다.

Django 또는 Flask에 구축된 애플리케이션을 배포할 때 Gunicorn과 같은 WSGI 서버에서 수행되는 요청을 처리하는 작업자 수를 지정해야 합니다. 이러한 작업자는 한 번에 클라이언트의 여러 요청을 처리합니다.

예를 들어, 우리는 아침 식사를 만드는 것에 비유합니다. 이 경우 사람은 차를 준비하고 두 번째 사람은 계란을 만들기 때문에 한 번에 두 명의 작업자가 주방에서 일하고 있습니다.

웹 서버 게이트웨이 인터페이스 프로세스 2

문제는 수백 명의 작업자가 동시에 작업을 처리하도록 지정할 수 있습니까?입니다. 아니요, 크기가 중요하고 주방 크기만큼의 작업자만 수용할 수 있기 때문입니다.

마찬가지로 서버 리소스가 소진될 때까지만 작업자를 설정할 수 있습니다. 더 많은 서버 리소스 활용을 위해서는 더 많은 수의 작업자가 필요합니다.

일반적으로 권장되는 작업자 수는 CPU 코어 수의 두 배 + 1이므로 CPU 코어가 6개인 서버의 경우 13개의 작업자가 됩니다.

웹 서버 게이트웨이 인터페이스 프로세스 - 작업자 수

이제 Flask에서 기본 기능 기반 웹 서버 게이트웨이 인터페이스를 만드는 방법을 살펴보겠습니다. 먼저 root 디렉토리 안에 web이라는 디렉토리를 만들고 이 디렉토리 안에 app.py 파일을 만듭니다.

이제 WSGI를 사용하기 위해 wsgiref라는 패키지를 가져와야 합니다. 이것은 WSGI를 빌드하기 위한 좋은 시작입니다. 이제 simple_server에서 make_server 기능을 가져와 WSGI 서버를 만들 수 있습니다.

from wsgiref.simple_server import make_server

다음으로, 이 앱을 만드는 매우 간단한 방법인 웹 앱을 만들 것입니다. 우리는 함수를 정의하고 Web_App()이라고 부를 것입니다.

두 개의 필수 매개변수가 필요합니다. 첫 번째는 CGI 스타일 변수인 environment 매개변수입니다.

다음 매개변수는 response이며 우리는 분명히 우리 페이지를 보고 싶어합니다. 또한 응답에서 HTML 문서나 텍스트 문서와 같은 헤더로 중요한 정보에 응답하는 경우가 많습니다.

다음으로 상태를 저장할 변수인 문자열을 만듭니다. 4자여야 하는 200 OK라고 말할 것입니다.

def Web_App(environment, response):
    status = "200 OK"

이제 리스트를 받아들이는 헤더를 생성해야 합니다. 이 리스트 안에 여러 헤더를 항목으로 추가할 수 있기 때문에 튜플이 항목이 됩니다. 이 튜플에서는 전달할 콘텐츠 유형의 종류를 선언합니다.

이제 다음과 같이 상태헤더를 사용하여 응답을 설정합니다. 그리고 우리는 콘텐츠를 웹 사이트로 반환합니다.

콘텐츠는 이진 데이터로 반환됩니다.

headers = [("content-type", "text/html; charset=utf-8")]
response(status, headers)
return [b"<h2>Hi there, this is WSGI server</h2>"]

계속해서 with 블록을 사용하여 서버를 생성하고 이 명령문과 함께 make_server() 함수를 사용하겠습니다. 몇 가지 인수가 필요합니다.

첫 번째는 기본적으로 localhost가 되는 호스트이므로 빈 문자열을 남겨둡니다. 다음은 5000이 될 포트이고 다음 인수에서 Web_App() 함수를 전달해야 합니다.

이 인수는 앱 또는 제공하려는 콘텐츠를 표시하는 것입니다. 이제 사용자에게 메시지를 인쇄하여 웹 사이트를 찾을 수 있는 위치와 서버를 종료하는 방법을 알려줍니다.

이제 우리는 서버를 제공하고 serve_forever() 메서드를 사용할 것입니다. 즉, 터미널을 통해 서버를 종료하거나 어딘가에 오류가 발생하여 자체 종료될 때까지 서버를 제공해야 합니다.

with make_server("", 5000, Web_App) as server:
    print(
        "serving on port 5000...\nvisit http://127.0.0.1:5000\nTo exit press ctrl + c"
    )
    server.serve_forever()

계속해서 서버를 실행한 다음 앱이 실행 중인 브라우저로 이동합니다. 방문하면 앱 내에서 정의한 대로 콘텐츠가 표시되는 것을 볼 수 있습니다.

Flask 앱을 실행하기 위한 WSGI 서버 - 출력

WSGI 서버에 대해 자세히 알아보려면 여기를 클릭하여 공식 문서를 읽으십시오.

완전한 Python 코드:

from wsgiref.simple_server import make_server


def Web_App(environment, response):
    status = "200 OK"
    headers = [("content-type", "text/html; charset=utf-8")]
    response(status, headers)
    return [b"<h2>Hi there, this is WSGI server</h2>"]


with make_server("", 5000, Web_App) as server:
    print(
        "serving on port 5000...\nvisit http://127.0.0.1:5000\nTo exit press ctrl + c"
    )
    server.serve_forever()
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn