빠른 시작: Azure App Service에 Python(Django, Flask 또는 FastAPI) 웹앱 배포

이 빠른 시작에서는 Python 웹앱(Django, Flask 또는 FastAPI)을 Azure App Service에 배포합니다. Azure App Service는 Linux 서버 환경에 호스트되는 Python 앱을 지원하는 완전 관리형 웹 호스팅 서비스입니다.

이 빠른 시작을 완료하려면 다음이 필요합니다.

참고

이 문서에는 Azure App Service를 사용하여 Python 웹앱을 배포하는 방법에 대한 현재 지침이 포함되어 있습니다. Windows의 Python은 더 이상 지원되지 않습니다.

끝까지 건너뛰기

Azure Developer CLI를 사용하여 이 자습서에서 샘플 앱을 신속하게 배포하고 Azure에서 실행되는 것을 확인할 수 있습니다. Azure Cloud Shell에서 다음 명령을 실행하고 프롬프트를 따릅니다.

mkdir flask-quickstart
cd flask-quickstart
azd init --template https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
azd up

리소스를 삭제하려면 다음을 수행합니다.

azd down

샘플 애플리케이션

이 빠른 시작은 Flask, Django 또는 FastAPI를 사용하여 완료할 수 있습니다. 이 빠른 시작을 따라갈 수 있도록 각 프레임워크의 샘플 애플리케이션이 제공됩니다. 샘플 애플리케이션을 로컬 워크스테이션에 다운로드하거나 복제합니다.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart

로컬에서 애플리케이션을 실행하려면 다음을 수행합니다.

  1. 다음과 같이 애플리케이션 폴더로 이동합니다.

    cd msdocs-python-flask-webapp-quickstart
    
  2. 앱에 대한 가상 환경을 만듭니다.

    py -m venv .venv
    .venv\scripts\activate
    
  3. 종속성을 설치합니다.

    pip install -r requirements.txt
    
  4. 앱 실행:

    flask run
    
  5. 웹 브라우저에서 http://localhost:5000에 있는 샘플 애플리케이션을 찾습니다.

    브라우저에서 로컬로 실행 중인 Flask 앱의 스크린샷.

문제가 있나요? 알려주세요.

Azure에서 웹앱 만들기

Azure에서 애플리케이션을 호스트하려면 Azure에서 Azure App Service 웹앱을 만들어야 합니다. Azure CLI, VS Code, Azure Tools 확장 팩 또는 Azure Portal을 사용하여 웹앱을 만들 수 있습니다.

Azure CLI 명령은 Azure CLI가 설치된 컴퓨터에서 실행할 수 있습니다.

Azure 리소스를 생성한 후, 별도의 Azure CLI 명령어로 애플리케이션을 배포하세요.

필요한 경우 az login을 사용하여 Azure에 로그인합니다.

az login

전 세계적으로 고유한 이름으로 교체하세요 <app-name> . 리소스 그룹과 앱 서비스 계획을 만들고, az webapp create를 사용해 웹 앱을 생성하세요.

az group create --name myResourceGroup --location eastus
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku P0v3 --is-linux
az webapp create --name <app-name> --resource-group myResourceGroup --plan myAppServicePlan --runtime "PYTHON:3.14"
az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
  • --runtime 파라미터를 사용해 앱이 실행되는 Python 버전을 지정하세요. 이 예시는 Python 3.14를 사용합니다. 지원되는 Python 런타임을 나열하려면 az webapp list-runtimes --os-type linux --runtime python --output table을 사용하세요.
  • --sku 매개변수를 사용하여 앱 서비스 계획의 크기(CPU 및 메모리)와 비용을 정의하세요. 이 예시는 P0v3(프리미엄 v3) 서비스 플랜을 사용하며, 이는 Azure 구독에 비용이 발생합니다. App Service 계획의 전체 목록은 App Service 가격 책정을 참조하세요.
  • eastus을 원하는 지역으로 교체하세요. 사용 가능한 리전을 나열하려면 az account list-locations을(를) --output table와 함께 실행하세요.
  • 이 설정을 사용하면 소스 아카이브를 배포할 때 requirements.txt의 종속성 설치를 포함한 Oryx 빌드가 활성화됩니다.

애플리케이션 파일(requirements.txt 포함)을 아카이브 루트에 두고 ZIP 파일을 생성합니다. .venv, .git, .env와 같은 로컬 파일은 제외하세요. 플랫폼별 지침은 Deploy using a ZIP file 탭의 Create a ZIP file of your application을 참조하세요. 그 다음 az webapp deploy를 사용하여 아카이브를 배포하세요:

az webapp deploy --name <app-name> --resource-group myResourceGroup --src-path <zip-file-path> --type zip

배치는 몇 분 정도 걸릴 수 있습니다. 앱을 보려면 https://<app-name>.azurewebsites.net로 이동하여 확인하세요. 로그를 스트리밍하려면 az webapp log config --name <app-name> --resource-group myResourceGroup --docker-container-logging filesystem를 실행하여 활성화한 다음 az webapp log tail --name <app-name> --resource-group myResourceGroup를 실행하세요.

문제가 있나요? 알려주세요.

Azure에 애플리케이션 코드 배포

Azure App Service는 GitHub Actions 및 모든 주요 CI/CD 도구를 포함하여 애플리케이션 코드를 Azure에 배포하는 여러 메서드를 지원합니다. 이 문서에서는 로컬 워크스테이션에서 Azure로 코드를 배포하는 방법에 중점을 둡니다.

이전 단계에서 Azure CLI 명령어로 리소스를 생성하고 애플리케이션을 배포했습니다. 다음 단계로 넘어가도 됩니다.


문제가 있나요? 먼저 문제 해결 가이드를 참조하세요. 도움이 되지 않으면 알려주세요.

시작 스크립트 구성

배포에 특정 파일이 있는지에 따라, App Service는 앱이 Django 앱인지 또는 Flask 앱인지를 자동으로 감지하고 기본 단계를 수행하여 앱을 실행합니다. FastAPI 같은 다른 웹 프레임워크 기반의 앱이라면, App Service가 실행되도록 시작 스크립트를 설정해야 할 수도 있습니다. 그렇지 않으면 App Service는 opt/defaultsite 폴더에 있는 기본 읽기 전용 앱을 실행합니다.

  • Python 3.14 이후: App Service가 FastAPI 앱을 자동으로 감지하고 실행합니다. 시작 명령은 필요하지 않습니다.
  • Python 3.13 이하: 사용자 지정 시작 명령어를 설정해야 합니다.

App Service에서 Python 앱을 실행하는 방법과 앱에서 해당 동작을 구성하고 사용자 지정하는 방법에 대한 자세한 내용은 Azure App Service용 Linux Python 앱 구성을 참조하세요.

App Service는 Flask 앱의 존재를 자동으로 감지합니다. 이 빠른 시작을 위해 추가 구성이 필요하지 않습니다.

앱으로 이동

웹 브라우저에서 배포된 애플리케이션으로 이동합니다. Azure Portal에서 링크를 따를 수 있습니다. 개요 페이지로 이동하여 기본 도메인을 선택합니다. 기본 앱 페이지가 보이면 1분을 기다렸다가 브라우저를 새로 고칩니다.

Python 샘플 코드가 기본 제공 이미지를 사용하여 App Service에서 Linux 컨테이너를 실행 중입니다.

Azure에서 실행되는 앱의 스크린샷.

축하합니다! Python 앱을 App Service에 배포했습니다.

문제가 있나요? 먼저 문제 해결 가이드를 참조하세요. 도움이 되지 않으면 알려주세요.

로그 스트리밍

Azure App Service는 애플리케이션 문제를 진단하는 데 도움이 되도록 콘솔에 모든 메시지 출력을 캡처합니다. 샘플 앱에는 이 기능을 보여주는 print() 문이 포함되어 있습니다.

@app.route('/')
def index():
   print('Request for index page received')
   return render_template('index.html')

@app.route('/favicon.ico')
def favicon():
    return send_from_directory(os.path.join(app.root_path, 'static'),
                               'favicon.ico', mimetype='image/vnd.microsoft.icon')

@app.route('/hello', methods=['POST'])
def hello():
   name = request.form.get('name')

   if name:
       print('Request for hello page received with name=%s' % name)
       return render_template('hello.html', name = name)
   else:
       print('Request for hello page received with no name or blank name -- redirecting')
       return redirect(url_for('index'))

Azure CLI, VS Code 또는 Azure Portal을 사용하여 App Service 진단 로그의 내용을 검토할 수 있습니다.

먼저 az webapp log config 명령을 사용하여 App Service 파일 시스템에 로그를 출력하도록 Azure App Service를 구성해야 합니다.

az webapp log config \
    --web-server-logging filesystem \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

로그를 스트리밍하려면 az webapp log tail 명령을 사용합니다.

az webapp log tail \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

앱에서 홈페이지를 새로 고치거나 다른 요청을 시도하여 일부 로그 메시지를 생성합니다. 출력은 다음과 비슷하게 표시됩니다.

Starting Live Log Stream ---

2021-12-23T02:15:52.740703322Z Request for index page received
2021-12-23T02:15:52.740740222Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET / HTTP/1.1" 200 1360 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.841043070Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.884541951Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:53.043211176Z 169.254.130.1 - - [23/Dec/2021:02:15:53 +0000] "GET /favicon.ico HTTP/1.1" 404 232 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

2021-12-23T02:16:01.304306845Z Request for hello page received with name=David
2021-12-23T02:16:01.304335945Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "POST /hello HTTP/1.1" 200 695 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.398399251Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.430740060Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

문제가 있나요? 먼저 문제 해결 가이드를 참조하세요. 도움이 되지 않으면 알려주세요.

리소스 정리

샘플 앱을 마쳤으면 Azure에서 앱에 대한 모든 리소스를 제거해도 됩니다. 리소스 그룹을 제거하면 추가 요금이 발생하지 않으며 Azure 구독을 깔끔하게 유지하는 데 도움이 됩니다. 리소스 그룹을 제거하면 리소스 그룹의 모든 리소스도 제거되며 이것이 앱에 대한 모든 Azure 리소스를 제거하는 가장 빠른 방법입니다.

az group delete 명령을 사용하여 리소스 그룹을 삭제합니다.

az group delete \
    --name msdocs-python-webapp-quickstart \
    --no-wait

--no-wait 인수를 사용하면 작업이 완료되기 전에 명령을 반환할 수 있습니다.

문제가 있나요? 알려주세요.

다음 단계