이 자습서를 사용자 고유의 앱과 함께 사용하는 경우 각 프로젝트의 README.md 파일(Flask, Django)에서 requirements.txt 파일 설명을 확인하여 필요한 패키지를 확인하세요.
환경 변수를 설정하여 로컬 PostgreSQL 인스턴스에 연결하는 방법을 지정합니다.
이 샘플 애플리케이션에는 로컬 PostgreSQL 인스턴스에 연결하는 방법을 설명하는 .env 파일이 필요합니다. .env.sample 파일을 가이드로 사용하여 .env 파일을 만듭니다. DBNAME의 값을 로컬 PostgreSQL 인스턴스의 기존 데이터베이스 이름으로 설정합니다. 이 자습서에서는 데이터베이스 이름이 식당이라고 가정합니다. DBHOST, DBUSER, DBPASS의 값을 로컬 PostgreSQL 인스턴스에 적절하게 설정합니다.
Django의 경우 settings.py 파일의 주석에 있는 지침에 따라 PostgreSQL 대신 로컬로 SQLite를 사용할 수 있습니다.
웹 브라우저에서 http://localhost:5000의 샘플 애플리케이션으로 이동하여 일부 식당 및 식당 리뷰를 추가하여 앱의 작동 방식을 확인합니다.
웹 브라우저에서 http://localhost:8000의 샘플 애플리케이션으로 이동하여 일부 식당 및 식당 리뷰를 추가하여 앱의 작동 방식을 확인합니다.
팁
Django를 사용하면 일반적인 Django 앱과 python manage.py createsuperuser 같은 명령을 사용하여 사용자를 만들 수 있습니다. 자세한 내용은 django django-admin 및 manage.py에 대한 설명서를 참조하세요. 슈퍼 사용자 계정을 사용하여 웹 사이트의 /admin 부분에 액세스합니다. Flask의 경우 Flask-admin과 같은 확장을 사용하여 동일한 기능을 제공합니다.
왼쪽 도구 모음에서 Azure 아이콘을 찾아 선택하여 Azure Tools for VS Code 확장을 표시합니다.
Azure 도구 아이콘이 표시되지 않으면 VS Code에 대한 Azure Tools 확장이 설치되어 있는지 확인합니다.
Azure 도구 확장에서:
RESOURCES를 확장하고 구독을 찾습니다. (리소스 종류별로 리소스가 그룹화되어 있는지 확인합니다.)
구독에서 App Services를 마우스 오른쪽 단추로 클릭합니다.
새 웹앱 만들기...(고급)를 선택합니다.
화면 맨 위에 있는 대화 상자에 이 웹앱에 대한 msdocs-python-postgresql-webapp-<unique-id>의 이름을 입력합니다.
이름은 Azure에서 고유해야 합니다. 배포될 때 이 이름은 웹앱 https://<app-service-name>.azurewebsites.net의 DNS 이름에 사용됩니다.
리소스 그룹이 아직 없는 경우 새 리소스 그룹 만들기를 선택하고 프롬프트에 msdocs-python-postgres-webapp-rg를 입력합니다.
애플리케이션에 대한 런타임 스택을 선택합니다. 이 예제에서는 Python 3.9를 선택합니다.
가까운 지역/위치(예: eastus)를 선택합니다.
Linux App Service 요금제를 구성합니다.
새 App Service 요금제 만들기를 선택합니다.
msdocs-python-postgres-webapp-plan을 입력하거나 자동 생성된 이름을 사용합니다.
이 웹앱에 대한 App Service 요금제 가격 책정 계층을 선택합니다.
App Service 요금제는 앱에서 사용할 수 있는 리소스 수(CPU/메모리)와 지불 금액을 제어합니다. 이 예제에서는 기본(B1) 개발 및 테스트 가격 책정 계층을 선택하는 것이 좋습니다. 이렇게 하면 Azure 구독에 약간의 비용이 발생하지만 무료(F1) 계층보다 더 나은 성능을 제공합니다.
지금 건너뛰기를 선택하여 웹앱에 Application Insights 추가를 건너뜁니다.
마지막 선택 후 Azure는 앱 서비스를 만들기 시작합니다.
출력을 보고 웹 사이트로 이동합니다.
새 App Service가 생성되었음을 나타내는 메시지가 표시되면 출력 보기를 선택하여 VS Code에서 출력 창으로 전환합니다.
App Service가 제대로 실행되고 있는지 확인하려면 App Service 이름을 마우스 오른쪽 단추로 클릭하고 웹 사이트 찾아보기를 선택합니다.
사용자 고유의 코드를 아직 App Service에 배포하지 않았기 때문에(나중 단계에서 수행) 기본 앱 페이지만 표시됩니다.
LOCATION='eastus'
RESOURCE_GROUP_NAME='msdocs-python-postgres-webapp-rg'
# Create a resource group
az group create \
--location $LOCATION \
--name $RESOURCE_GROUP_NAME
$LOCATION='eastus'
$RESOURCE_GROUP_NAME='msdocs-python-postgres-webapp-rg'
# Create a resource group
az group create `
--location $LOCATION `
--name $RESOURCE_GROUP_NAME
위치 → 가까운 위치입니다. 예를 들면 eastus입니다. az account list-locations --output table을 사용하여 위치를 나열합니다.
이름 → 이 리소스 그룹을 사용하여 이 자습서를 완료하는 데 필요한 모든 Azure 리소스를 구성합니다. (예: msdocs-python-postgres-webapp-rg)
name → 앱 서비스 이름은 Azure에서 리소스의 이름으로 사용되며 서버 엔드포인트 https://<app-service-name>.azurewebsites.com 형식으로 앱의 정규화된 도메인 이름을 형성합니다. 이 이름은 모든 Azure에서 고유해야 하며 허용되는 문자는 A-Z, 0-9, -입니다. 예를 들어 msdocs-python-postgres-webapp-\<unique-id>를 사용하여 \<unique-id>가 세 문자인 위치입니다.
runtime → 런타임은 앱이 실행 중인 Python 버전을 지정합니다. 이 예제에서는 Python 3.9를 사용합니다. 사용 가능한 모든 런타임을 나열하려면 명령 az webapp list-runtimes --os linux --output table을 사용합니다.
plan → 2단계에서 동일한 앱 서비스 요금제 이름을 사용합니다. (msdocs-python-postgres-webapp-plan)
resource-group → 1단계에서 동일한 리소스 그룹 이름을 사용합니다. (msdocs-python-postgres-webapp-rg)
참고
이 자습서에서는 Azure CLI 명령을 단계별로 사용하여 App Service를 만들고 배포하는 논리적 단계를 강화하는 방법을 보여 줍니다. 단계에 익숙해지면 웹앱을 만들고 로컬 작업 영역에서 App Service로 코드를 배포하는 az webapp up 작업을 시도할 수 있습니다.
Azure Portal에 로그인하고 다음 단계에 따라 Azure Database for PostgreSQL 리소스를 만듭니다.
지침
스크린샷
Azure Portal에서 다음을 수행합니다.
Azure Portal 맨 위에 있는 검색 창에 postgres를 입력합니다.
검색 창 아래에 표시되는 메뉴의 서비스 제목 아래에서 Azure Database for PostgreSQL 유연한 서버라는 레이블이 지정된 항목을 선택합니다.
Azure Database for PostgreSQL 유연한 서버 페이지에서 + 만들기를 선택합니다.
다음 페이지의 유연한 서버 아래에서 만들기를 선택합니다.
유연한 서버 페이지에서 다음과 같이 양식을 작성합니다.
리소스 그룹 → 선택하고 msdocs-python-postgres-webapp-rg의 이름을 사용합니다.
서버 이름 → msdocs-python-postgres-webapp-db-<unique-id>와 같은 이름을 입력합니다. 이름은 데이터베이스 서버의 URL https://<server-name>.postgres.database.azure.com을 사용하여 Azure에서 고유해야 합니다. 허용되는 문자는 A-Z, 0-9 및 -입니다.
지역 → 웹앱에 사용되는 동일한 Azure 지역입니다.
데이터 원본 → 없음
워크로드 유형 → 프로덕션
컴퓨팅 + 스토리지 → 아래에 설명된 다른 컴퓨팅 + 스토리지 요금제를 선택하려면 서버 구성을 선택합니다.
가용성 영역 → 기본값(기본 설정 없음)을 유지합니다.
버전 → 기본값(최신 버전)을 유지합니다.
컴퓨팅 + 스토리지 페이지에서 유연한 서버를 계속 구성합니다.
컴퓨팅 계층 → 버스트 가능을 선택합니다.
컴퓨팅 크기 → Standard_B1ms를 선택합니다.
저장을 선택하여 기본 구성 페이지로 돌아갑니다.
주 유연한 서버 페이지로 돌아가서 기본 구성을 완료합니다.
관리자 계정 → 데이터베이스 관리자 계정에 사용할 관리자 사용자 이름 및 암호를 입력합니다.
화면 아래쪽에서 다음: 네트워킹을 선택합니다.
네트워킹 페이지에서 로컬 환경에서 데이터베이스 서버에 액세스할 수 있도록 하는 방화벽 규칙을 추가합니다.
로컬 환경에서 액세스할 수 있도록 현재 클라이언트 IP 주소 추가를 선택합니다.
화면 아래쪽에서 검토 + 만들기를 선택합니다.
검토 페이지로 이동하게 됩니다. 만들기를 선택하여 Azure Database for PostgreSQL 유연한 서버 서비스를 만듭니다.
PostgreSQL 대화형 터미널 psql을 사용하여 로컬 환경에서 PostgreSQL 데이터베이스 서버에 연결하고 restaurant 데이터베이스를 만듭니다.
이전 단계의 값은 <server-name> 및 <admin-user>의 값입니다. 연결하는 데 문제가 있는 경우 데이터베이스를 다시 시작하고 다시 시도합니다.
필요에 따라 프롬프트를 postgres(기본값)에서 restaurant로 변경하기 위해 \c restaurant를 실행하여 restaurant 데이터베이스가 성공적으로 만들어졌는지 확인합니다. 도움말을 표시하려면 \?를, 종료하려면 \q를 입력합니다.
다음 단계에 따라 Visual Studio Code의 Azure Tools 확장 팩을 사용하여 Azure Database for PostgreSQL 리소스를 만듭니다.
지침
스크린샷
Visual Studio Code에서 Azure 도구 확장을 설치합니다. 아직 로그인하지 않은 경우 Azure에 로그인합니다.
Azure 도구 확장에서:
RESOURCES를 확장합니다. (리소스가 리소스 종류별로 정렬되어 있는지 확인합니다.)
구독에서 PostgresSQL 서버(유연한)를 마우스 오른쪽 단추로 클릭하고 서버 만들기를 선택합니다.
목록에서 PostgreSQL 유연한 서버를 선택합니다.
VS Code 프롬프트에서 다음 정보를 입력합니다.
서버 이름 → 모든 Azure에서 고유한 데이터베이스 서버의 이름을 입력합니다(데이터베이스 서버의 URL은 https://<server-name>.postgres.database.azure.com이 됨). 허용되는 문자는 A-Z, 0-9 및 -입니다. 예를 들어 msdocs-python-postgres-webapp-db-<unique-id>입니다.
Postgres SKU 및 옵션 선택 → B1ms Basic, 1 vCore, 2GiB Memory, 32GB 스토리지를 선택합니다.
관리자 사용자 이름 및 관리자 암호 → 데이터베이스 서버의 관리자 계정에 대한 자격 증명을 입력합니다. 이 자습서의 뒷부분에서 필요하므로 이러한 자격 증명을 기록합니다.
리소스 그룹 선택 → App Service를 만든 리소스 그룹(예: msdocs-python-postgres-webapp-rg)을 선택합니다.
위치 선택 → App Service와 동일한 위치를 선택합니다.
데이터베이스가 만들어지면 로컬 환경에서 PostgreSQL 데이터베이스 서버로의 액세스를 구성합니다.
명령 팔레트(Ctrl + Shift + P)를 엽니다.
PostgreSQL: 방화벽 구성 선택을 검색합니다.
메시지가 표시되면 구독을 선택합니다.
위에서 만든 데이터베이스(예: msdocs-python-postgres-webapp-db-<unique-id>)를 선택합니다. 데이터베이스 이름이 목록에 표시되지 않으면 생성이 완료되지 않은 것일 수 있습니다.
대화 상자에서 예를 선택하여 PostgreSQL 서버의 방화벽 규칙에 IP 주소를 추가합니다.
로컬 액세스를 허용하는 방화벽 규칙이 성공적으로 추가된 후 restaurant 데이터베이스를 만듭니다.
resource-group → 웹앱을 만들 때 사용한 것과 동일한 리소스 그룹 이름을 사용합니다. 예를 들면 msdocs-python-postgres-webapp-rg입니다.
name → PostgreSQL 데이터베이스 서버 이름입니다. 이 이름은 모든 Azure에서 고유해야 합니다(서버 엔드포인트는 https://<name>.postgres.database.azure.com이 됨). 허용되는 문자는 A-Z, 0-9 및 -입니다. 회사 이름과 서버 식별자를 조합하여 사용하는 것이 좋습니다. (msdocs-python-postgres-webapp-db)
location → 웹앱에 사용되는 동일한 위치를 사용합니다.
admin-user → 관리자 계정에 대한 사용자 이름을 입력합니다. azure_superuser, admin, administrator, root, guest, 또는 public일 수 없습니다. 예를 들어 demoadmin은 좋습니다.
admin-password 관리자 사용자의 암호입니다. 다음 세 가지 범주에서 8~128자를 포함해야 합니다. 영문 대문자, 영문 소문자, 숫자 및 영숫자가 아닌 문자
중요
사용자 이름 또는 암호를 만들 때 $ 문자를 사용하지 않습니다. 나중에 Python 앱을 실행하는 데 사용되는 Linux 컨테이너 내에서 $ 문자가 특수한 의미를 갖는 이러한 값을 사용하여 환경 변수를 만듭니다.
public-access → 방화벽 규칙 없이 퍼블릭 액세스 모드에서 서버를 설정하는 None입니다. 규칙은 이후 단계에서 만들어집니다.
sku-name → 가격 책정 계층 및 컴퓨팅 구성의 이름입니다. 예를 들면 Standard_B1ms입니다. 규칙에 따라 {가격 책정 계층}{컴퓨팅 생성}{vCores} 집합이 이 변수를 만듭니다. 자세한 내용은 Azure Database for PostgreSQL 가격 책정을 참조하세요.
+ 새 애플리케이션 설정을 선택하여 django 샘플 앱에서 기대하는 다음 각 값에 대한 설정을 만듭니다.
DBHOST → 데이터베이스를 만들 때 이전에 사용한 서버 이름(예: msdocs-python-postgres-webapp-db-<unique id>)을 사용합니다.
azuresite/production.py의 코드는 자동으로 .postgres.database.azure.com을 추가하여 전체 PostgreSQL 서버 URL을 만듭니다.
DBNAME → 애플리케이션 데이터베이스의 이름인 restaurant를 입력합니다.
DBUSER → 데이터베이스를 프로비저닝할 때 사용되는 관리자 사용자 이름입니다.
DBPASS → 이전에 만든 관리자 보안 암호입니다.
네 가지 설정이 있는지 확인하고 숨겨진 값을 봅니다.
저장을 선택하고 설정을 적용합니다.
VS Code에서 웹앱에 대한 환경 변수를 구성하려면 Azure Tools 확장 팩을 설치하고 VS Code에서 Azure로 로그인해야 합니다.
지침
스크린샷
왼쪽 도구 모음에서 Azure 아이콘을 찾아 선택하여 Azure Tools for VS Code 확장을 표시합니다.
Azure 도구 확장에서:
RESOURCES를 확장합니다. (리소스가 리소스 종류별로 정렬되어 있는지 확인합니다.)
웹앱을 찾고, 해당 노드를 확장하고, 애플리케이션 설정을 마우스 오른쪽 단추로 클릭하여 바로 가기 메뉴를 표시합니다.
메뉴에서 새 설정 추가...를 선택합니다.
VS Code 창의 맨 위에 있는 대화 상자에서 각 설정 이름 뒤에 해당 값을 추가합니다. 다음 설정을 추가합니다.
DBHOST → 데이터베이스를 만들 때 이전에 사용한 서버 이름(예: msdocs-python-postgres-webapp-db-<unique-id>)을 입력합니다. azuresite/production.py의 코드는 자동으로 .postgres.database.azure.com을 추가하여 전체 PostgreSQL 서버 URL을 만듭니다.
DBNAME → 식당을 입력합니다.
DBUSER → 데이터베이스를 만들 때 지정한 관리자 사용자 이름을 입력합니다. azuresite/production.py의 코드는 DBUSER 및 DBHOST에서 전체 Postgres 사용자 이름을 자동으로 구성하므로 @server 부분을 포함하지 마세요.
DBPASS → 데이터베이스를 만들 때 지정한 관리자 암호를 입력합니다. azuresite/production.py의 코드는 DBUSER 및 DBHOST에서 전체 Postgres 사용자 이름을 자동으로 구성하므로 @server 부분을 포함하지 마세요.
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--settings DBHOST=$DB_SERVER_NAME DBNAME=$DB_NAME DBUSER=$ADMIN_USERNAME DBPASS=$ADMIN_PWD
az webapp config appsettings set `
--resource-group $RESOURCE_GROUP_NAME `
--name $APP_SERVICE_NAME `
--settings DBHOST=$DB_SERVER_NAME DBNAME=$DB_NAME DBUSER=$ADMIN_USERNAME DBPASS=$ADMIN_PWD
DBHOST → 이전에 az postgres flexible-server create 명령과 함께 사용한 이름의 이름을 사용합니다. azuresite/production.py의 코드는 자동으로 .postgres.database.azure.com을 추가하여 전체 PostgreSQL 서버 URL을 만듭니다.
DBNAME → restaurant를 사용합니다.
DBUSER, DBPASS → 이전 az postgres flexible-server create 명령과 함께 사용한 관리자 자격 증명을 사용합니다. azuresite/production.py의 코드는 DBUSER 및 DBHOST에서 전체 Postgres 사용자 이름을 자동으로 구성하므로 @server 부분을 포함하지 마세요.
VS Code에서 웹앱을 배포하려면 Azure Tools 확장 팩을 설치하고 VS Code에서 Azure로 로그인해야 합니다.
지침
스크린샷
왼쪽 도구 모음에서 Azure 아이콘을 찾아 선택하여 Azure Tools for VS Code 확장을 표시합니다.
Azure 도구 확장에서:
RESOURCES를 확장합니다. (리소스가 리소스 종류별로 정렬되어 있는지 확인합니다.)
웹앱을 마우스 오른쪽 단추로 클릭하여 바로 가기 메뉴를 표시합니다.
메뉴에서 웹앱에 배포...를 선택합니다.
웹앱을 웹앱으로 선택하여 화면 맨 위에 있는 대화 상자에 배포합니다.
대화 상자에서 배포를 선택합니다.
예를 선택하여 빌드 구성을 업데이트하고 배포 성능을 향상시킵니다.
배포가 완료되면 화면의 오른쪽 아래 모서리에 웹 사이트로 이동할 수 있는 옵션이 있는 대화 상자가 나타납니다. 이 링크를 사용하는 경우 다음 단계에서 마이그레이션을 수행할 때까지 웹앱이 준비되지 않았기 때문에 웹 페이지에서 오류를 보고합니다. 이 문제에 대한 다른 대화 상자 경고가 표시될 수 있습니다.
코드를 푸시하도록 Azure를 가리키는 로컬 리포지토리에서 Git 원격을 구성하여 로컬 Git 리포지토리에서 Azure로 애플리케이션 코드를 배포할 수 있습니다. 구성에 필요한 원격 리포지토리 및 Git 자격 증명의 URL은 Azure Portal 또는 Azure CLI를 사용하여 검색할 수 있습니다.
az webapp deploy \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--src-path <zip-file-path> \
--type zip
az webapp deploy `
--name $APP_SERVICE_NAME `
--resource-group $RESOURCE_GROUP_NAME `
--src-path <zip-file-path> `
--type zip
cURL과 같은 HTTP 클라이언트를 사용하여 ZIP 파일을 Azure에 업로드하려면 App Service에 대한 배포 사용자 이름 및 암호가 필요합니다. 이러한 자격 증명은 Azure Portal에서 가져올 수 있습니다.
웹앱 페이지에서 페이지 왼쪽에 있는 리소스 메뉴에서 배포 센터를 선택합니다.
FTPS 자격 증명 탭을 선택합니다.
사용자 이름 및 암호는 애플리케이션 범위 제목 아래에 표시됩니다. ZIP 파일 배포의 경우 $로 시작하는 \ 문자 뒤의 사용자 이름 부분만 사용합니다. 예를 들면 $msdocs-python-django-webapp-123입니다. 이러한 자격 증명은 아래 cURL 명령에 필요합니다.
다음 curl 명령을 실행하여 ZIP 파일을 Azure에 업로드하고 애플리케이션을 배포합니다. 사용자 이름은 위에서 얻은 배포 사용자 이름입니다. 이 명령을 실행하면 배포 암호를 묻는 메시지가 표시됩니다.
Flask 샘플 앱을 Azure App Service에 배포할 때 데이터베이스 테이블은 Azure PostgreSQL에서 자동으로 만들어집니다. 테이블을 만들지 않은 경우 다음 명령을 시도합니다.
# Create database tables
flask db init
# Create database tables
python manage.py migrate
데이터베이스 연결과 관련된 오류가 발생하는 경우 이전 섹션에서 만든 App Service의 애플리케이션 설정 값(즉, DBHOST, DBNAME, DBUSER, DBPASS)을 확인합니다. 이러한 설정이 없으면 마이그레이션 명령이 데이터베이스와 통신할 수 없습니다.
팁
SSH 세션에서 Django를 사용하면 일반적인 Django 앱과 같은 python manage.py createsuperuser 명령을 사용하여 사용자를 만들 수도 있습니다. 자세한 내용은 django django-admin 및 manage.py에 대한 설명서를 참조하세요. 슈퍼 사용자 계정을 사용하여 웹 사이트의 /admin 부분에 액세스합니다. Flask의 경우 Flask-admin과 같은 확장을 사용하여 동일한 기능을 제공합니다.
추가 개발 작업에 필요한 경우 실행 중인 앱 및 데이터베이스를 그대로 두고 다음 단계로 건너뛸 수 있습니다.
그러나 샘플 앱을 완료하면 Azure에서 앱에 대한 모든 리소스를 제거하여 다른 요금이 발생하지 않도록 하고 Azure 구독을 깔끔하게 유지할 수 있습니다. 리소스 그룹을 제거하면 리소스 그룹의 모든 리소스도 제거되며 이것이 앱에 대한 모든 Azure 리소스를 제거하는 가장 빠른 방법입니다.