다음을 통해 공유


Django 및 PostgreSQL 앱 생성 및 Azure에 배포

이 문서에서는 GitHub Copilot와 상호 작용하여 PostgreSQL 데이터베이스에서 CRUD 작업을 수행하는 로컬 Django 웹앱을 생성하는 방법을 안내합니다. 다음으로, Azure용 GitHub Copilot와 상호 작용하여 웹앱 및 데이터베이스를 Azure App Service 및 Azure PostgreSQL 유연한 서버(여러 지원 Azure 서비스와 함께)에 배포하는 방법을 안내합니다.

만드는 특정 애플리케이션은 목록 세부 스타일 아키텍처가 있는 CRUD 작업을 특징으로 하는 간단한 연락처 관리 애플리케이션입니다.

비고

LLM(큰 언어 모델)을 사용하여 애플리케이션을 생성하면 일관성 없는 결과가 발생할 수 있습니다. 결과는 LLM 모델, 지침 등에 따라 달라집니다. 이 가이드의 핵심은 더 나은 결과를 얻는 방법을 이해하는 데 도움이 되는 것입니다. 그러나 이 예제를 진행할 때마다(잠재적으로) 극적으로 다른 결과를 얻을 수 있습니다.

필수 조건

중요합니다

GitHub Copilot는 GitHub에서 관리하는 별도의 구독입니다. GitHub Copilot 구독 및 지원에 대한 질문은 GitHub Copilot 계획 시작을 참조하세요.

채팅 세션 준비

  1. Visual Studio Code의 제목 표시줄에서 채팅 설정/해제 단추를 사용하거나 Ctrl+Alt+i 를 선택하여 채팅 창을 엽니다. 새 채팅 아이콘을 사용하여 새 채팅 세션을 만듭니다.

  2. 채팅 영역에서 모드를 선택합니다 Agent . 이 글을 쓰는 Claude Sonnet 4 시점에서 최상의 결과를 산출합니다. 코드 생성에 사용할 수 있는 최상의 모델을 사용합니다.

구성 유효성 검사

CLI 도구 및 Visual Studio Code가 업데이트되고 올바르게 구성되고 올바르게 작동하여 결과를 개선해야 합니다.

  1. 새 채팅에서 다음 프롬프트를 입력합니다.

    
    I want to create a new Django website that stores data in PostgreSQL. Then, I'll want
    to deploy that new website to Azure. Do I have everything installed on my local 
    computer that you will need to perform these tasks?
    
    

    GitHub Copilot는 일련의 명령줄 검사를 실행하여 도구를 설치하고 해당 도구의 최신 버전을 설치할 수 있도록 권한을 요청합니다.

  2. 터미널에서 명령 az --upgrade으로 Azure CLI를 업데이트합니다.

  3. 터미널에서 명령을 사용하여 Azure CLI용 서비스 커넥터 암호 없는 확장을 설치합니다. az extension add --name serviceconnector-passwordless --upgrade

  4. Visual Studio Code에서 기본 터미널을 Git Bash로 설정합니다. 파일 > 기본 설정 > 으로 이동한 다음, "검색 설정"에서 "기본 프로필: Windows"를 입력하고 "Git Bash"를 선택합니다. 이 설정을 적용하려면 Visual Studio Code를 다시 시작해야 할 수 있습니다.

    비고

    Git Bash를 사용하는 것은 반드시 필요한 것은 아니지만 이 글을 쓸 때 최상의 결과를 생성합니다.

  5. Visual Studio Code에서 Visual Studio Code용 PostgreSQL(미리 보기) 확장을 사용하고 데이터베이스로 이동합니다 contacts .

  6. Visual Studio Code에서 Azure 확장을 사용하고 Azure 계정 및 구독에 로그인했는지 확인합니다. 기본 사이드바에서 Azure 확장을 열면 기존 구독 및 리소스를 볼 수 있어야 합니다.

  7. 새 애플리케이션 파일에 대한 새 폴더를 만들고 Visual Studio Code에서 작업 영역으로 엽니다.

로컬 데이터베이스 설정

GitHub Copilot는 개발자가 일반적으로 수행하는 거의 모든 애플리케이션 개발 작업을 수행할 수 있지만, 더 작은 단계에서 일부 작업을 수행하면 최상의 결과를 얻을 수 있습니다. 결과를 개선하려면 GitHub Copilot를 사용하기 전에 데이터베이스를 만들고 인증 및 권한 부여를 설정합니다.

  1. 새 채팅을 만들고 다음 프롬프트를 사용합니다.

    
    On my PostgreSQL server localhost, please create a new database named market.
    
    Then create a new user <db-username> with password `<password>` and give that 
    user full rights (create tables and other db objects, CRUD data) to the new 
    market database.
    
    Please do the work, and only prompt me when you are unable to do it yourself.
    
    

    <db-username> 각각 원하는 데이터베이스 사용자 이름 및 암호로 바꿉 <password> 다.

  2. Windows 컴퓨터에서 권장되는 보안 모범 사례는 데이터베이스 사용자 이름과 암호를 로컬 파일에 저장하는 것입니다.

    %APPDATA%\postgresql\pgpass.conf

    이렇게 하면 일반적으로 하드 드라이브에서 다음 위치가 해결됩니다.

    c:\Users\<username>\AppSettings\Roaming\postgresql\pgpass.conf

    <username> Windows 사용자 이름으로 대체합니다.

    파일은 다음 형식을 사용해야 합니다.

    localhost:5432:<database-name>:<database-user>:<password>
    

    로컬 컴퓨터에서 PostgreSQL 인스턴스로 작업 중이며 기본 포트(5432)에서 호스트된다고 가정합니다.

    <database-name> 이전 단계에서 사용한 자격 증명으로 contacts 바꾸고 대체 <db-username><password> 합니다.

    파일에 대한 pgpass.conf 자세한 내용은 PostgreSQL의 설명서를 참조하세요.

  3. PATH 환경 변수에 파일 경로를 pgpass.conf 추가합니다.

  4. 연결을 테스트하여 작동하는지 확인합니다. psql CLI를 사용하여 다음 명령을 사용하여 테스트합니다.

    psql -h localhost -U <db-username> -d contacts
    

    파일의 데이터베이스 사용자 이름 세그먼트로 <db-username> 바꿉 pgpass.conf 다.

    pgpass.conf 올바르게 설정되지 않은 경우 암호를 입력하라는 메시지가 표시됩니다.

GitHub Copilot를 사용하여 앱 생성

먼저 로컬 컴퓨터에서 애플리케이션을 빌드하고 테스트하는 방법에 대한 지침과 지침을 제공합니다.

  1. Visual Studio Code의 제목 표시줄에서 채팅 설정/해제 단추를 사용하여 채팅 창을 엽니다. 새 채팅 아이콘을 사용하여 새 채팅 세션을 만듭니다.

  2. 채팅 영역에서 모드를 선택합니다 Agent . 이 글을 쓰는 Claude Sonnet 4 시점에서 최상의 결과를 산출합니다. 코드 생성에 사용할 수 있는 최상의 모델을 사용합니다.

  3. 다음 프롬프트를 사용하여 애플리케이션 생성을 시작합니다.

    
    I want you to create a simple Contact Manager application using Django and PostgreSQL. 
    
    This should be a CRUD application, so create web pages that display a list of 
    contacts, view details, add a new contact, edit or delete a contact. Each Contact 
    is comprised of a contact's Name, Address, and Phone number. Since this is a 
    Python / Django project please make sure to work inside of a virtual environment (venv). 
    I've already created a PostgreSQL database at `localhost` named `contacts`. There are 
    no tables yet. For local development in PostgreSQL, I'm using a `pgpass.conf` file 
    and I have tested that it works. Prefer Git Bash in the terminal. Beyond that, if there's 
    anything I need to do, please include instructions. But I want you to do as much as 
    you can on your own.
    
    

    프롬프트에는 다음과 같은 기능이 있습니다.

    • 만들려는 애플리케이션의 형식입니다. 이 경우 연락처 관리 애플리케이션입니다.
    • 사용할 기술입니다. 이 경우 Django 및 PostgreSQL입니다.
    • 생성하려는 사이트 아키텍처입니다. 이 경우 모든 연락처를 나열하고 특정 연락처로 드릴다운할 수 있는 페이지를 특징으로 하는 CRUD 스타일 애플리케이션입니다.
    • 문제 도메인에 대한 자세한 정보입니다. 이 경우 연락처의 이름, 주소 및 전화 번호를 포함하여 애플리케이션에서 관리할 데이터 필드를 제공합니다.
    • 데이터베이스에 대한 구체적인 지침입니다. 이 경우 이미 만든 특정 데이터베이스를 사용하도록 GitHub Copilot에 지시하고, 데이터베이스의 상태 및 상호 작용하는 방법을 제공합니다.
    • 환경에 대한 구체적인 지침입니다. 이 경우 Git Bash를 사용하도록 지시합니다. 또한 모범 사례인 Python 환경(venv)에서 작업을 수행하려고 한다고 말합니다. GitHub Copilot는 이러한 옵션을 자체적으로 선택할 수 있지만 명시적으로 명시하면 프로세스가 원활하게 진행됩니다.
    • 가능한 한 많은 작업을 자체적으로 수행하려는 명시적 기대입니다. 그렇지 않으면 GitHub Copilot에서 수행할 지침을 제공할 수 있습니다.
    • 지침/컨텍스트에 대한 명시적 기대치입니다. 다른 작업을 수행해야 하는 경우 지침과 지침을 제공하여 도움이 필요할 것으로 예상합니다.

    중요합니다

    GitHub Copilot가 터미널을 사용하여 새 가상 환경을 만드는 경우 Visual Studio Code는 이를 검색 venv 하고 사용할지 여부를 묻는 대화 상자를 표시합니다. 해당 대화 상자를 무시합니다. 그것은 사라집니다. GitHub Copilot가 이 작업에만 터미널을 사용하도록 허용합니다.

    GitHub Copilot는 기본 제공 터미널 및 Visual Studio Code 환경을 사용하여 다음을 수행합니다.

    • Python 가상 환경 만들기
    • 라이브러리 및 기타 종속성 설치
    • 코드 파일 생성
    • 데이터베이스 테이블 생성
    • 추가 지침에 대한 추가 정보 파일 생성
    • 테스트 데이터 만들기
    • 로컬 웹 서버 시작
    • 웹 사이트 테스트(단순 브라우저 또는 curl 사용)

    LLM이 코드를 생성하는 방법 때문에 사용하는 명령과 생성하는 명령은 매번 다릅니다.

Azure용 GitHub Copilot를 사용하여 Azure에 배포

GitHub Copilot가 사이트를 로컬로 생성한 후에는 GitHub Copilot에게 배포를 준비하기 위해 사이트를 변경한 다음 배포를 수행하도록 요청하는 프롬프트를 작성합니다. Azure용 GitHub Copilot 확장은 Bicep 파일을 만든 다음 CLI를 사용하여 azd 해당 파일을 실행하여 이 요청을 처리합니다.

다음 프롬프트를 사용합니다. 메모장에 복사하여 대괄호 안의 <resource-group-name><region-name> 모든 값을 변경한 다음 GitHub Copilot 채팅에 복사하여 붙여넣을 수 있습니다.


Please help me deploy this Django app to Azure. 

First, create and use a Resource Group named "<resource-group-name>" in the "<region-name>" region.

Second, create an Azure App Service for the Django app in the new "<resource-group-name>" in the "<region-name>" region.

Third, create a new Azure Database for PostgreSQL flexible server named "<server-name>" in a resource group named "<resource-group-name>" in my subscription "<subscription-id>". Use my current account ("<account-id>") as the Microsoft Entra administrator. For the PostgreSQL "Administrator login", use "<azure-database-username>" and password "<azure-database-password>". Use a "development" class database configuration in the "<region-name>" region. Create a new database named "contact_manager_db" and migrate all tables and data from the local version of "contact_manager_db". The local database uses the username "<local-database-username>" and password "<local-database-password>". Add my IP address as a firewall rule, allow public access to this resource through the internet using a public IP address, and allow public access from any Azure service within Azure to this server.

Fourth, use Service Connector (and any other services you need to make this configuration work successfully) to connect the web app to the database. You may need to modify the application code to accommodate Service Connector. Also, please ensure a secure connection between the Azure App Service web site and the Azure PostgreSQL Flexible Server.

Please choose the least expensive options.  

If you are prompted for an environment, use the name "contacts-env". Configure my firewall to allow my IP address. Beyond that, if there's anything 
I need to do, please include instructions. But I want you to do as much as you can on your own.

Before you start: 

- Do you have any questions that need to be clarified? 
- Please create a plan for deployment in the form of a TODO list, and then update the TODO list as you progress. Do not start until I have a chance to review your plan and tell you to proceed.

프롬프트에는 다음과 같은 기능이 있습니다.

  • 사용하려는 특정 서비스입니다. 이 경우 Azure App Service, Azure PostgreSQL 유연한 서버, 서비스 커넥터를 사용하려 한다는 것을 알려줍니다. 또한 "수행해야 하는 다른 작업을 수행"하여 작동하는지 확인하라는 지침을 제공합니다.
  • 특정 서비스 옵션. 이 경우 각 서비스에 대해 가능한 가장 저렴한 옵션을 사용하려는 것으로 표시됩니다.
  • 가능한 다음 단계에 대한 힌트입니다. 이 경우 서비스 커넥터를 사용하기 위해 일부 코드 수정이 필요하다고 제안합니다.
  • 미리 결정을 예상합니다. 이 경우 필요한 설정(예: 의 환경 이름)에 대한 azd답변을 제공합니다.
  • 자체적으로 많은 작업을 수행하려는 명시적 기대. 그렇지 않으면 수행할 지침을 제공할 수 있습니다.
  • 지침/컨텍스트에 대한 명시적 기대치입니다. 조치를 취하도록 요청할 때 도움이 필요하고 지침이 필요하다는 기대를 설정합니다.
  • 설명이 필요한지 묻습니다. 이는 종종 에지 케이스 또는 불분명한 지침과 같은 잠재적인 문제를 노출합니다.
  • TODO 목록을 사용하여 계획을 요청합니다. Azure용 GitHub Copilot가 할당을 이해하고 의도한 대로 수행할 계획임을 확신할 수 있습니다.

GitHub Copilot는 기본 제공 터미널 및 Visual Studio Code 환경을 사용하여 다음을 수행합니다.

  • 서비스 커넥터를 수용하도록 코드 파일 업데이트
  • Bicep 파일 생성
  • azd CLI 실행
  • 배포 테스트
  • 필요한 경우 로그 또는 기타를 사용하여 배포를 디버그합니다.

GitHub Copilot와 상호 작용

GitHub Copilot는 많은 작업을 수행하기 전에 입력이 필요합니다. 입력 일시 중지는 실수를 방지하거나 생성된 출력을 기본 설정으로 사용자 지정하기 위해 GitHub Copilot가 올바른 방향으로 진행하도록 지시할 수 있는 기회입니다.

작동하는 동안 단추를 사용하여 Continue 묻는 대부분의 질문을 보고 동의할 수 있습니다.

중요합니다

예기치 않은 결과가 발생하면 새 채팅 세션을 사용하여 다시 시작합니다.

경우에 따라 입력을 제공해야 합니다. 입력하라는 메시지가 표시되는 몇 가지 뚜렷한 순간이 있습니다.

  • 사용자 자격 증명 - 터미널의 현재 작업에 사용자 이름 또는 암호가 필요한 경우
  • 결정의 순간 - 경우에 따라 GitHub Copilot는 목록에서 몇 가지 옵션을 제공하고 원하는 옵션을 묻습니다.
  • 명령 팔레트 - 경우에 따라 GitHub Copilot는 확장 기능을 사용하고 옵션은 명령 팔레트에 표시됩니다. 적절한 선택을 하면 GitHub Copilot가 진행됩니다.
  • 대화형 로그인 - Azure CLI 및 azd CLI를 인증하고 여러 인증 메커니즘 중 하나를 시작해야 합니다.

변경 내용 테스트 및 요청

GitHub Copilot가 완료되면 사이트가 완전하고 기능적인 것으로 간주할 수 있습니다. 그러나 테스트는 문제 또는 예기치 않은/바람직하지 않은 앱 기능을 검색할 수 있습니다.

가능한 한 많은 세부 정보로 문제를 설명하는 프롬프트를 사용합니다. 예를 들어 애플리케이션이 작동하지 않는 경우 정확한 오류 메시지 및 예상 결과를 포함하여 가능한 한 많은 정보를 제공합니다.

흐름 중단

경우에 따라 GitHub Copilot가 동일한 작업을 반복적으로 수행하려고 하는 루프에 갇혀 있거나 반환되지 않는 프로세스에서 중단되는 것을 알 수 있습니다. 예를 들어 웹 사이트의 문제를 진단할 때 GitHub Copilot는 다음과 같은 명령을 실행할 수 있습니다.

az webapp log tail

GitHub Copilot가 중단되면 다음과 같은 여러 가지 방법 중 하나로 GitHub Copilot를 중단할 수 있습니다.

  • Ctrl 키+c
  • 채팅에서 일시 중지 단추 사용
  • 채팅 세션을 종료하고 새 채팅을 시작합니다.

중요합니다

채팅 세션을 종료하면 세션 중에 빌드된 모든 컨텍스트가 삭제되며, 이는 바람직하거나 바람직하지 않을 수 있습니다.

방금 발생한 상황에 대한 컨텍스트를 제공하고 가능한 솔루션으로 이동하려면 다음과 같이 GitHub Copilot를 중단한 직후 프롬프트를 추가할 수 있습니다.

You were just getting the logs from Azure App Service but it did not return 
so you got stuck. Try to interrupt after a minute once you get what you need 
from the logs.

다음 단계