Python용 채팅 프라이빗 엔드포인트 시작

이 문서에서는 프라이빗 엔드포인트에서 액세스할 수 있는 Python용 엔터프라이즈 채팅 앱 샘플을 배포하고 실행하는 방법을 보여 줍니다.

이 샘플은 Azure AI 검색에서 Python, Azure OpenAI Service 및 RAG(검색 증강 세대) 사용하여 가상 회사의 직원 혜택에 대한 답변을 얻는 채팅 앱을 구현합니다. 앱은 직원 핸드북, 복리후생 문서, 회사 역할 및 기대치 목록을 포함하는 PDF 파일로 시드됩니다.

이 문서의 지침에 따라 다음을 수행합니다.

  • 웹 브라우저에서 공용 액세스를 위해 Azure에 채팅 앱을 배포합니다.
  • 프라이빗 엔드포인트를 사용하여 채팅 앱을 다시 배포합니다.

이 절차를 완료한 후에는 채팅 앱이 프라이빗 네트워크를 통해서만 액세스할 수 있다는 것을 알고 사용자 지정 코드를 사용하여 새 프로젝트를 수정하고 다시 배포할 수 있습니다.

아키텍처 개요

기본 배포는 퍼블릭 엔드포인트가 있는 채팅 앱을 만듭니다.

기본 RAG 채팅 앱의 네트워크 아키텍처를 보여 주는 다이어그램

개인 데이터로 보강된 채팅 앱의 경우 채팅 앱에 대한 액세스를 보호하는 것이 중요합니다. 이 문서에서는 가상 네트워크를 사용하여 솔루션을 제공합니다.

Azure 가상 네트워크 내의 모든 서비스가 있는 네트워크 아키텍처를 보여 주는 다이어그램

가상 네트워크 내에는 Azure App Service 앱과 다른 백 엔드 Azure 서비스에 대한 별도의 서브넷이 있습니다. 이 구조를 사용하면 각 서브넷에 다른 네트워크 보안 그룹 규칙을 쉽게 적용할 수 있습니다.

가상 네트워크 내의 채팅 앱 서브넷 및 백 엔드 서브넷을 보여 주는 다이어그램.

가상 네트워크 내에서 서비스는 프라이빗 엔드포인트를 사용하여 서로 통신합니다. 각 프라이빗 엔드포인트는 프라이빗 엔드포인트의 이름을 가상 네트워크 내의 IP 주소로 확인하기 위해 프라이빗 DNS(도메인 이름 시스템) 영역과 연결됩니다.

가상 네트워크 내에서 Azure OpenAI에 대한 프라이빗 엔드포인트 및 프라이빗 DNS 영역을 보여 주는 다이어그램

배포 단계

솔루션을 두 번 배포하는 것이 좋습니다. 공용 액세스 권한으로 한 번 배포하여 채팅 앱이 제대로 작동하는지 확인합니다. 가상 네트워크를 사용하여 채팅 앱을 보호하기 위해 프라이빗 액세스 권한으로 다시 배포합니다.

필수 조건

개발 컨테이너 환경은 이 문서를 완료하는 데 필요한 모든 종속성에서 사용할 수 있습니다. GitHub Codespaces(브라우저)에서 또는 Visual Studio Code를 사용하여 로컬로 개발 컨테이너를 실행할 수 있습니다.

이 문서를 사용하려면 다음 필수 구성 요소가 필요합니다.

  • Azure 구독. 체험 계정 만들기
  • Azure 계정 권한. Azure 계정에는 Microsoft.Authorization/roleAssignments/write 또는 소유자같은 권한이 있어야 합니다.
  • GitHub 계정.

샘플 리소스에 대한 사용 비용

이 아키텍처에 사용되는 대부분의 리소스는 기본 또는 소비 기반 가격 책정 계층에 속합니다. 즉, 사용하는 항목에 대해서만 요금을 지불하고, 일반적으로 개발 또는 테스트 중에는 요금이 최소화됩니다.

프라이빗 네트워킹을 사용하여 배포하면 배포에 추가 비용이 추가됩니다. 앱 평가 또는 배포가 완료되면 프로비전된 모든 리소스를 삭제하여 지속적인 요금을 방지할 수 있습니다.

예상 비용에 대한 자세한 내용은 샘플에 대한 GitHub 리포지토리에서 시작하기 전에 참조하세요.

개방형 개발 환경

다음 지침을 사용하여 이 문서를 완료하는 데 필요한 모든 종속성을 포함하는 미리 구성된 개발 환경을 배포합니다.

GitHub Codespaces는 GitHub이 관리하는 개발 컨테이너로, 사용자 인터페이스로 Visual Studio Code for the Web를 실행합니다. 가장 간단한 개발 환경을 위해서는 GitHub Codespaces를 사용하여 이 문서를 완료하는 데 필요한 올바른 개발자 도구와 종속성을 미리 설치합니다.

중요합니다

모든 GitHub 계정은 두 개의 핵심 인스턴스를 사용하여 매월 최대 60시간 동안 GitHub Codespaces를 사용할 수 있습니다. 자세한 내용은 GitHub Codespaces 월별 포함된 스토리지 및 코어 시간을 참조하세요.

  1. 프로세스를 시작하여 main GitHub 리포지토리의 분기에 새 GitHub 코드스페이스를 만듭니다.

  2. 다음 단추를 마우스 오른쪽 단추로 클릭하고 새 창에서 링크 열기를 선택하여 개발 환경과 설명서를 동시에 이용할 수 있도록 합니다.

    GitHub Codespaces에서 엽니다.

  3. 코드스페이스 만들기 페이지에서 코드스페이스 구성 설정을 검토한 다음,를 선택하여 코드스페이스를 만드세요.

    새 코드스페이스를 만들기 전에 확인 화면을 보여 주는 스크린샷

  4. 코드스페이스가 시작될 때까지 기다립니다. 이 시작 프로세스는 몇 분 정도 걸릴 수 있습니다.

  5. 화면 아래쪽의 터미널에서 Azure 개발자 CLI를 사용하여 Azure에 로그인합니다.

    azd auth login
    
  6. 터미널에서 코드를 복사한 다음 브라우저에 붙여넣습니다. 지침에 따라 Azure 계정으로 인증합니다.

이 문서의 나머지 작업은 이 개발 컨테이너의 컨텍스트에서 수행됩니다.

사용자 지정 설정

이 솔루션은 Azure 개발자 CLI로 구성된 사용자 지정 설정에 따라 인프라를 구성하고 배포합니다. 다음 표에서는 이 솔루션에 대한 사용자 지정 설정을 설명합니다.

설정 설명
AZURE_PUBLIC_NETWORK_ACCESS 지원되는 Azure 리소스에서 공용 네트워크 액세스의 값을 제어합니다. 유효한 값은 Enabled 또는 Disabled.
AZURE_USE_PRIVATE_ENDPOINT Azure 리소스를 가상 네트워크에 연결하는 프라이빗 엔드포인트의 배포를 제어합니다. 이 값은 TRUE 프라이빗 엔드포인트가 연결을 위해 배포됨을 의미합니다.
AZURE_USE_VPN_GATEWAY 가상 네트워크에 대한 VPN 게이트웨이의 배포를 제어합니다. 이 기능을 사용하지 않고 공용 액세스를 사용하지 않도록 설정한 경우 가상 네트워크에 연결하는 다른 방법이 필요합니다. 이 값은 TRUE VPN 게이트웨이가 연결을 위해 배포됨을 의미합니다.

채팅 앱 배포

첫 번째 배포는 리소스를 만들고 공개적으로 액세스할 수 있는 엔드포인트를 제공합니다.

  1. 다음 명령을 실행하여 공용 액세스를 위해 이 솔루션을 구성합니다.

    azd env set AZURE_PUBLIC_NETWORK_ACCESS Enabled
    

    환경 이름을 묻는 메시지가 표시되면 환경 이름이 리소스 그룹을 만드는 데 사용된다는 점을 기억하세요. 의미 있는 이름을 입력합니다. 팀 또는 조직에 있는 경우 다음과 같이 morgan-chat-private-endpoints이름을 포함합니다. 환경 이름을 기록해 둡다. Azure Portal에서 리소스를 찾으려면 나중에 필요합니다.

  2. 다음 명령을 실행하여 가상 네트워크 리소스 프로비저닝을 포함합니다. 배포는 두 번째 배포까지 액세스를 제한하지 않습니다.

    azd env set AZURE_USE_PRIVATE_ENDPOINT true
    
  3. 다음 명령을 사용하여 솔루션을 배포합니다.

    azd up
    

    리소스 프로비전은 배포 프로세스에서 가장 시간이 많이 걸리는 부분입니다. 계속하기 전에 배포가 완료되기를 기다립니다.

  4. 배포 프로세스가 끝나면 앱 엔드포인트가 나타납니다. 해당 엔드포인트를 브라우저에 복사하여 채팅 앱을 엽니다. 카드에서 질문 중 하나를 선택한 다음 답변을 기다립니다.

    문서의 뒷부분에서 다시 필요하므로 엔드포인트 URL을 기록해 둡다.

프라이빗 액세스를 사용하여 Azure에 채팅 앱 배포

프라이빗 액세스를 위해 채팅 앱을 보호하도록 배포 구성을 변경합니다.

  1. 다음 명령을 실행하여 가상 네트워크에 액세스하기 위해 VPN 게이트웨이를 사용합니다.

    azd env set AZURE_USE_VPN_GATEWAY true
    
  2. 다음 명령을 실행하여 공용 액세스를 해제합니다.

    azd env set AZURE_PUBLIC_NETWORK_ACCESS Disabled
    
    
  3. 다음 명령을 실행하여 리소스 구성을 변경합니다. 인프라 구성만 변경되었기 때문에 이 명령은 애플리케이션 코드를 다시 배포하지 않습니다.

    azd provision
    
  4. 프로비전이 완료되면 브라우저에서 채팅 앱을 다시 엽니다. 공용 엔드포인트가 비활성화되어 채팅 앱에 더 이상 액세스할 수 없습니다.

채팅 앱에 액세스

채팅 앱에 액세스하려면 Azure VPN Gateway 또는 Azure Virtual Desktop과 같은 도구를 사용합니다. 앱에 액세스하는 데 사용하는 모든 도구는 안전하고 조직의 보안 정책을 준수해야 합니다.

리소스 정리

다음 단계에서는 사용한 리소스를 정리하는 과정을 안내합니다.

GitHub Codespaces 환경을 삭제하면 계정에 대해 얻을 수 있는 코어별 무료 사용 시간 혜택을 최대화할 수 있습니다.

중요합니다

GitHub 계정의 권한에 대한 자세한 내용은 GitHub Codespaces 월별 포함된 스토리지 및 코어 시간을 참조하세요.

  1. GitHub Codespaces 대시보드에 로그인하세요.

  2. Azure-Samples/azure-search-openai-demo GitHub 리포지토리를 원천으로 하는 현재 실행 중인 코드스페이스를 찾아보세요.

    상태 및 템플릿을 포함하여 실행 중인 모든 코드스페이스를 보여 주는 스크린샷

  3. 코드스페이스의 컨텍스트 메뉴를 열고 삭제을 선택하십시오.

    삭제 옵션이 강조 표시된 단일 코드스페이스의 상황에 맞는 메뉴를 보여 주는 스크린샷.

도움받기

이 샘플 저장소는 문제 해결 정보를 제공합니다.

문제가 해결되지 않으면 리포지토리의 이슈 웹 페이지에 문제를 추가하세요.

  • 엔터프라이즈 채팅 앱 GitHub 리포지토리를 참조하세요.
  • Azure OpenAI 모범 사례 솔루션 아키텍처를 사용하여 채팅 앱을 빌드합니다.
  • Azure AI 검색사용하여 생성 AI 앱의 액세스 제어에 대해 알아봅니다.