앱을 배포하고 다른 Azure 서비스와 통합

완료됨

이제 Azure에서 앱을 호스팅하는 다양한 옵션에 대해 알았으므로 이러한 서비스에서 Azure Database for MySQL - 유연한 서버 앱을 배포하는 방법을 살펴보겠습니다. 이 단원에서는 가장 많이 사용되는 두 가지 서비스인 Azure App Service와 AKS를 살펴보고, Azure DevOps와 GitHub을 사용하여 CI/CD 작업을 자동화하는 옵션을 검토하고, Azure AI 검색 및 Azure OpenAI와 통합하여 이러한 애플리케이션에 인공 지능을 주입하는 방법을 알아봅니다.

Azure App Service + Azure Database for MySQL - 유연한 서버

Azure App Service에 앱을 배포하고 Azure Database for MySQL - 유연한 서버와 통합하려면 다음 옵션을 고려합니다.

  • Azure Marketplace의 Web App + Database를 사용하여 VNet(가상 네트워크)에서 격리된 웹앱 및 MySQL 유연한 서버를 만듭니다. 유연한 서버의 연결 정보는 연결 문자열을 사용해 App Service 앱의 구성 설정에 자동으로 추가됩니다.
  • Azure Database for MySQL 유연한 서버 및 App Service 앱을 개별적으로 만든 다음, App Service 앱의 구성 설정 아래에 있는 앱 설정에 MySQL 유연한 서버의 연결 정보를 추가합니다.

App Service 앱 및 MySQL 유연한 서버를 설정한 후 Azure App Service에서 지원하는 다양한 배포 방법을 사용하여 앱 코드를 Azure에 배포할 수 있습니다. 이러한 방법에는 ZIP 패키지, 로컬 Git 리포지토리, Azure Container Registry, GitHub Actions 또는 Azure Pipelines에서 배포하는 작업이 포함되며, 각 옵션은 개발 및 운영 워크플로에 따라 유연성을 제공합니다.

다음 단원에서는 샘플 PHP 앱을 빌드하고 Azure App Service에 배포하고, 배포 프로세스와 관련된 각 단계를 거치며, Azure의 강력한 플랫폼 기능을 사용하여 앱의 성능과 확장성을 최적화합니다.

AKS(Azure Kubernetes Service) + MySQL - 유연한 서버

AKS를 Azure Database for MySQL - 유연한 서버와 통합하면 컨테이너화된 앱을 배포하기 위한 강력한 플랫폼이 만들어져 데이터베이스 관리를 간소화하고 앱 확장성과 복원력을 향상시킬 수 있습니다. 백 엔드 MySQL 유연한 서버를 사용하여 AKS에서 앱을 효과적으로 배포하고 관리하려면 다음 정보를 고려하세요.

다음 다이어그램에서는 AKS 앱과 MySQL을 통합하는 세 가지 일반적인 방법을 보여 줍니다.

AKS 애플리케이션에서 MySQL 데이터베이스를 사용하는 세 가지 옵션을 보여주는 다이어그램

  • Azure Database for MySQL - 유연한 서버를 사용하여 MySQL 서버 관리의 운영 오버헤드를 줄여 개발자 생산성을 향상시킵니다.
  • MySQL 서버를 관리하고 유지 관리해야 하는 서비스 제공 인프라인 Azure VM에서 MySQL을 사용합니다.
  • Kubernetes에서 MySQL을 실행하면 자동화 이점을 얻을 수 있지만 안정성, 높은 가용성, 데이터 지속성 및 규정 준수를 보장하기 위해 개발자의 노력이 필요합니다. 또한 Kubernetes Pod의 일시적인 특성을 고려할 때 애플리케이션 가용성 및 비즈니스 연속성에 영향을 미치는 장애 조치(failover) 및 다시 시작 가능성이 높습니다.

Azure Database for MySQL - 유연한 서버와 통합되는 AKS에 앱을 배포하려면 다음 5단계 프로세스를 사용합니다.

  1. Azure Portal, Azure CLI, ARM/Bicep 템플릿 또는 기타 Azure 도구를 사용하여 Azure Database for MySQL 유연한 서버를 만듭니다. 적절한 컴퓨팅, 스토리지, 백업 및 고가용성 옵션을 선택하는 동시에 MySQL 유연한 서버를 만드는 동안 적합한 네트워킹 옵션을 결정하는 것이 중요합니다.

    중요: 시나리오에 소규모 프로젝트 또는 데모만 포함되지 않는 한, VNet 통합을 통해 서버에 대한 액세스를 보호하는 데 도움이 되는 프라이빗 액세스 권한이 있는 서버를 만드는 것이 좋습니다.

  2. 앱 코드를 다음과 같이 변경하여 앱을 준비합니다.

    • 앱이 MySQL 유연한 서버를 사용하도록 하려면 해당 구성 파일 또는 앱 속성 파일을 수정하여 호스트 서버 URL, 데이터베이스 이름, 사용자 이름 및 암호를 나타내는 코드를 추가합니다. 이 코드는 환경 변수에서 읽습니다(Kubernetes 매니페스트 파일에서 정의되고 전달됨).
    • DockerFile을 만들어 앱 Docker 이미지를 빌드합니다.
  3. Azure Container Registry를 만들고 앱을 Docker 이미지로 레지스트리에 푸시합니다.

  4. AKS 클러스터를 만들고 Azure Container Registry 계정을 클러스터에 연결합니다.

  5. 클러스터에 앱을 배포한 다음 배포를 테스트합니다. AKS 클러스터에 앱을 배포하려면 먼저 실행할 컨테이너 이미지와 같이 원하는 클러스터 상태를 정의하는 Kubernetes 매니페스트 파일을 만들어야 합니다.

Kubernetes 매니페스트 YAML 파일에서 정의해야 할 주요 사항은 다음과 같습니다.

- The container image name: replace it with your own in the format [registryname].azurecr.io/[image-name]:[tag]
- Environment variables for MySQL flexible server host URL, database name, admin username and password.
- A service resource to access the app in the cluster. For example, a service of the type "LoadBalancer" will create an external load balancer providing an externally accessible IP address to the app.

After the YAML file is ready, deploy it with either `kubectl apply` or within the Kubernetes resource view in the Azure portal.

Azure DevOps, GitHub 및 Azure Service Operator를 사용하여 데이터베이스 CI/CD 작업 자동화

수동으로 앱을 배포하는 것은 비효율적이고 오류가 발생하기 쉬울 수 있으므로 자주 테스트하고 조정해야 합니다. 이 프로세스를 간소화하려면 CI(연속 통합) 및 CD(지속적인 업데이트/배포)를 통한 자동화를 사용하는 것이 좋습니다. CI/CD를 사용하면 개발 팀이 더 작은 업데이트 및 기능을 정기적이고 안정적으로 릴리스할 수 있으므로 더 크고 덜 빈번한 업데이트에 비해 관련된 위험과 노력을 크게 줄일 수 있습니다.

앱 및 Azure Database for MySQL - 유연한 서버의 배포를 자동화하려면 다음 CI/CD 도구를 활용하는 것이 좋습니다.

Azure Pipelines

Azure DevOps의 일부인 Azure Pipelines는 강력한 CI/CD 기능을 제공하여 Azure PaaS 서비스, VM 및 컨테이너 레지스트리를 비롯한 다양한 대상에 대한 자동화된 코드 배포를 용이하게 합니다. 또한 이 플랫폼은 다른 클라우드 플랫폼 또는 온-프레미스 시스템과 같은 다양한 환경에서 배포를 지원합니다.

특히 데이터베이스 배포의 경우 Azure Pipelines를 사용하면 Azure CLI 명령을 실행하는 파이프라인에 작업을 통합하여 Azure Database for MySQL - 유연한 서버에 대한 업데이트를 자동화할 수 있습니다. 이러한 작업은 SQL 파일에서 직접 업데이트를 적용하거나 인라인 SQL 스크립트를 실행하여 성공적인 각 빌드 후 데이터베이스 스키마와 데이터가 최신 상태인지 확인할 수 있습니다.

GitHub 작업

GitHub Actions를 사용하면 푸시, 끌어오기 요청 또는 문제 생성과 같은 리포지토리 이벤트에 대한 응답으로 워크플로를 자동화할 수 있습니다. 이 통합을 통해 GitHub 에코시스템 내에서 원활한 CI/CD 파이프라인을 사용할 수 있으며, 새 끌어오기 요청에 대한 빌드 및 테스트 워크플로부터 릴리스 생성 시 배포 워크플로에 이르기까지 모든 것을 처리할 수 있습니다.

데이터베이스의 경우 Azure Database for MySQL - 유연한 서버에 직접 연결하여 변경 사항이 병합되거나 푸시될 때마다 데이터베이스를 배포하거나 업데이트하도록 GitHub Actions를 구성할 수 있습니다. 이렇게 하면 앱 업데이트와 데이터베이스 스키마 변경 간의 지속적인 동기화가 보장됩니다.

Azure Service Operator

Azure Service Operator는 Kubernetes 환경 내에서 Azure 리소스 관리를 통합하여 Kubernetes 도구를 통해 Azure Database for MySQL - 유연한 서버와 같은 Azure 리소스를 직접 관리할 수 있습니다. 이 운영자를 사용하면 인프라 업데이트를 Kubernetes 배포 워크플로에 통합할 수 있으므로 앱과 종속 Azure 서비스를 모두 관리하는 통합된 접근 방식을 사용할 수 있습니다.

기타 도구

이러한 특정 도구 외에도 다른 기술을 사용하여 CI/CD 워크플로를 개선할 수 있습니다.

  • App Service 배포 슬롯: 라이브로 전환하기 전에 새 릴리스를 준비하는 데 유용하며, 가동 중지 시간을 최소화하면서 최종 유효성 검사 및 프로덕션으로의 핫 스와핑을 허용합니다.
  • App Service 배포 센터: Azure App Services를 사용하여 CI/CD 설정을 간소화하고 소스 제어 및 빌드 서비스와 통합합니다.
  • Jenkins: 모든 프로젝트 빌드, 배포 및 자동화를 지원하는 오픈 소스 자동화 서버인 Jenkins는 사용자 지정 스크립팅 및 광범위한 통합이 필요한 복잡한 환경에서 특히 효과적일 수 있습니다.

이러한 도구를 활용하여 앱과 기본 데이터베이스 인프라가 항상 코드의 최신 변경 내용에 맞춰지도록 하여 가동 중지 시간을 최소화하고 새로운 기능 및 수정 사항의 전달을 가속화할 수 있습니다.

Azure AI 검색 및 Azure OpenAI와 통합하여 인텔리전스 추가

MySQL 애플리케이션의 지능을 향상시키는 가장 간단한 방법은 Azure AI 검색 및 Azure OpenAI 서비스와 함께 RAG(검색 증강 생성) 아키텍처를 사용하여 솔루션을 빌드하여 의미 체계 검색 및 생성형 AI의 풍부한 기능을 포함하는 것입니다. RAG는 Azure Database for MySQL과 같은 데이터 원본에 저장된 데이터를 사용하는 Azure AI 검색과 같은 정보 검색 시스템을 추가하여 ​​ChatGPT와 같은 LLM의 자연어 이해 및 생성 기능을 증강하는 아키텍처입니다.

MySQL AI 솔루션의 샘플 RAG 패턴은 다음과 같습니다.

  1. Azure AI 검색은 주기적으로 실행되는 인덱서를 사용하여 Azure Database for MySQL 데이터베이스와 같은 백 엔드 데이터 원본에서 콘텐츠를 끌어옵니다.
  2. 데이터는 Azure OpenAI의 텍스트 포함 모델에 대한 포함 호출을 통해 벡터화됩니다.
  3. Azure AI 검색은 이 벡터화된 데이터를 벡터 검색 인덱스에 유지합니다.
  4. 사용자가 클라이언트 채팅 애플리케이션을 사용하면 쿼리가 Azure OpenAI 채팅 완료 서비스로 전송됩니다.
  5. Azure AI 검색은 이제 벡터 검색이나 하이브리드 검색(벡터 + 의미 체계 검색)을 사용하여 가장 관련성 있는 응답을 찾는 데이터 원본으로 사용됩니다.
  6. 그러면 Azure OpenAI 채팅 완료 서비스가 이러한 검색 결과를 사용하여 사용자 쿼리에 대한 사용자 지정 응답을 생성합니다.

CMS(콘텐츠 관리 시스템), 전자상거래 애플리케이션 또는 게임 사이트와 같은 애플리케이션을 Azure Database for MySQL에 호스트된 데이터로 실행하는 경우 Azure OpenAI에서 사용할 수 있는 LLM과 Azure AI 검색에서 제공하는 벡터 스토리지 및 인덱싱을 통해 생성형 AI 검색 및 채팅 애플리케이션을 빌드하여 사용자 환경을 향상할 수 있습니다.