Linux 및 PostgreSQL 워크로드 마이그레이션

완료됨

이 모듈은 온-프레미스 또는 클라우드 환경에서 기존 워크로드를 Azure로 마이그레이션하는 과정을 안내합니다. 여기에는 컴퓨팅을 Azure VM(가상 머신)으로 마이그레이션하고 데이터를 Azure Database for PostgreSQL로 마이그레이션하는 과정이 포함됩니다. 이 애플리케이션은 클라우드로 마이그레이션할 준비가 된 모든 실제 애플리케이션을 대체하는 클라우드 독립적인 샘플입니다.

이 단원에서는 다음 전환을 수행할 때의 이점으로서 Azure가 제공하는 전체 보안 및 ID 제어 기능의 활용 가치를 알아봅니다.

  • 자체 호스팅 환경(자체 관리되는 데이터베이스 등)에서 완전 관리형 데이터베이스 제공 사항으로 전환
  • 운영 체제 미설치 컴퓨팅에서 클라우드 호스팅 VM으로 전환

또한 비용과 성능 관점에서 클라우드에서 리소스를 관리하는 이점을 살펴보겠습니다. 또한 배포 전후에 비용을 정확하게 계산하고 관리하는 방법과 컴퓨팅과 데이터 관점에서 모두 성능을 최적화하는 방법을 알아봅니다.

워크로드 및 데이터

워크로드는 Go로 작성되었고 PostgreSQL 내부의 데이터를 다루는 애플리케이션입니다. 데이터는 Postgres 플랫폼과 관련 확장 기능의 장점을 탐색하는 데 도움이 되는 오픈 데이터 세트입니다.

이 애플리케이션은 컨테이너 내에서 쉽게 실행할 수 있지만, 관련자들은 이 단계에서는 그렇게 하지 않기로 결정했습니다. 컨테이너 빌드, 컨테이너 플랫폼에 배포 또는 컨테이너 오케스트레이션 사용은 현재 범위에서 벗어났습니다. 하지만 컨테이너로의 마이그레이션은 논리적으로 앞으로의 단계일 수 있습니다.

이 모듈과 연관된 GitHub 리포지토리는 애플리케이션과 관련 데이터를 제공합니다. 이 샘플 애플리케이션과 유사한 상태에 도달하기 위해 애플리케이션을 준비하고 데이터를 내보내는 방법을 알아봅니다. 샘플 애플리케이션을 녹색 필드 배포의 템플릿으로 사용할 수도 있습니다.

이 워크로드를 마이그레이션하면 어떤 이점이 있나요?

이러한 워크로드를 클라우드로 마이그레이션하는 데에는 어떤 이점이 있는지 궁금할 것입니다. 다음은 몇 가지 가치 제안입니다.

보안 및 규정 준수

컴퓨팅 및 데이터 워크로드를 클라우드로 가져오면 보안 기능이 강화되는 이점을 활용할 수 있습니다.

Azure의 가상 머신은 방화벽, 가상 네트워크, Just-In-Time VM 액세스, 암호화, RBAC(역할 기반 액세스 제어), 기밀 컴퓨팅을 비롯한 광범위한 보안 및 규정 준수 기능의 이점을 활용할 수 있습니다. Azure Database for PostgreSQL은 고객 관리형 키를 사용한 암호화, 준수 인증, 클라우드용 Microsoft Defender 지원 등 여러 유사한 기능을 지원합니다.

가상 머신과 데이터베이스 간 연결의 보안

Azure Database for PostgreSQL에 가상 머신을 통합할 때 데이터 손실 위험을 줄이는 안전한 방식으로 가상 머신을 서로 연결해야 합니다.

Microsoft Entra 인증을 사용하면 기존 암호 없이 Azure Database for PostgreSQL에 연결할 수 있습니다. 대신, 애플리케이션 워크로드에 Microsoft Entra ID(즉, 관리 ID), Microsoft Entra 사용자 계정을 통한 사용자 및 관리자를 사용합니다. 이러한 방식은 장기 자격 증명이 손상되어 악의적인 작업자가 데이터에 액세스할 수 있는 위험을 완화합니다.

Microsoft Entra ID, 관리 ID 및 세분화된 RBAC를 사용하면 최소 권한 원칙에 따라 애플리케이션 워크로드가 Azure에서 안전하게 데이터에 액세스하고 리소스를 관리할 수 있습니다.

여러 지역에서 고성능 및 비용 효율적인 컴퓨팅에 액세스합니다.

개발/테스트를 위한 비용 효율적인 컴퓨팅이 필요하든, 클라우드에서 사용할 수 있는 최신, 가장 높은 성능 또는 가장 큰 컴퓨팅 형식이 필요하든, Azure는 가상 머신Azure Database for PostgreSQL 모두에 대한 광범위한 컴퓨팅 옵션을 제공합니다. 필요에 따라 이러한 옵션을 스케일 업하거나 스케일 다운할 수 있으며, Azure의 60개 이상의 지역에서 사용할 수 있습니다.

데이터베이스 복제본 및 Azure Cosmos DB for PostgreSQL과 같은 분산 옵션을 포함하여 수직 및 수평적으로 컴퓨팅의 크기를 조정할 수 있습니다. Azure Cosmos DB for PostgreSQL은 Citus 오픈 소스의 강력한 분산 테이블로 확장된 PostgreSQL용 관리되는 서비스입니다. 이 컴퓨팅은 가장 빠른 클라우드 스토리지 옵션과 결합되어 사용자의 워크로드에 맞춰 컴퓨팅 및 스토리지 I/O 요구 사항을 맞춤화합니다.

비용 관리 및 비용 효율성.

Linux와 PostgreSQL 모두에서 비용 관리 및 비용 효율성을 최적화할 수 있습니다. 온-프레미스 솔루션과 비교해 볼 때, 비용은 상황에 맞게 더욱 적절하고 맞춤화될 수 있습니다. 온-프레미스 솔루션과 비교하여 컴퓨팅 규모를 적절하게 조정할 수 있습니다. 또한, 공공 서비스 요금 청구 모델을 통해 전체 장비를 쉽게 관리하여 필요한 컴퓨팅 및 스토리지만 최적화하고, 사용한 만큼만 비용을 지불할 수 있습니다.

공공 서비스 비용 청구를 통해 고객은 과도한 공급에 대한 비용을 지불하지 않고도 수요가 많은 기간을 처리할 수 있습니다. 이를 통해 더 빠르고 효율적인 차세대 컴퓨팅으로 마이그레이션할 수 있습니다.

고객은 Azure 하이브리드 혜택을 활용해 특정 Linux 배포판에 대한 라이선스 비용을 절감할 수도 있습니다. 자세한 내용은 RHEL(Red Hat Enterprise Linux) 및 SLES(SUSE Linux Enterprise Server) 가상 머신에 대한 Azure 하이브리드 혜택을 참조하세요.

고객은 가상 머신 및 Azure Reserved Virtual Machine Instances에 대해 1년 또는 3년 계약을 통해 비용을 절감할 수도 있습니다(종량제 가격 책정 대비 최대 72%). 자세한 내용은 Azure 예약 할인이 가상 머신에 적용되는 방법을 참조하세요. Azure 가격 책정은 투명하고 예측 가능하며, 배포하기 전에 Azure 가격 계산기를 사용하여 비용을 예상할 수 있습니다.

2일차 작업

배포된 애플리케이션의 2일차 작업(예: 심사, 모니터링, 보안 패치, 백업 및 재해 복구)은 자동화와 잠재적으로 가동 중지 시간 없이 업그레이드할 수 있는 기능을 통해 효율성이 향상됩니다. 또한 업계 표준 도구 체인을 사용하여 인프라를 엔드투엔드 관리할 수 있습니다.

시작하기 전에

이 모듈은 기존 Linux 및 PostgreSQL 워크로드를 Azure로 마이그레이션하는 데 도움을 주기 위해 설계되었습니다. 하지만 원본 데이터베이스에서 데이터를 내보내는 방법 또는 마이그레이션을 위해 애플리케이션을 준비하는 방법에 대해서는 중점적으로 다루지 않습니다. 이러한 방식을 사용하는 한 가지 이유는 마이그레이션할 수 있는 원본 데이터베이스와 애플리케이션 형식이 다양하고 각 형식에 대한 프로세스가 고유하기 때문입니다.

이 모듈은 마이그레이션 프로세스를 시뮬레이션하는 데 사용할 수 있는 샘플 애플리케이션, Postgres 데이터, 이진 파일 및 코드 제공 인프라를 제공합니다. 시뮬레이션 마이그레이션을 완료한 후에는 얻은 지식을 사용하여 동일한 원칙을 고유의 워크로드에 적용할 수 있습니다.

마이그레이션할 애플리케이션 코드를 대신할 샘플 애플리케이션인 Azure-Samples/tailwind-traders-go를 사용합니다. 이 모듈의 실습 부분을 지원하기 위한 Bicep 코드 제공 인프라, 샘플 Postgres 및 이진 데이터 및 기타 리소스는 Azure-Samples/linux-postgres-migration GitHub 리포지토리에서 제공됩니다.

이 방식을 사용자의 워크로드에 적용하려면 원본 애플리케이션과 데이터를 다음 구조에 매핑해야 합니다.

애플리케이션 코드

애플리케이션 코드는 소스 제어, 특히 GitHub의 리포지토리에 저장해야 합니다.

이 모듈의 마이그레이션은 Azure 가상 머신에 리포지토리를 직접 복제하는 가장 간단한 시나리오를 보여 줍니다. 실제 시나리오에서는 GitHub Actions와 같이 애플리케이션 코드를 빌드하고 컴퓨팅 리소스에 배포하는 보다 복잡한 배포 파이프라인이 있을 가능성이 높습니다.

Postgres 데이터

데이터베이스 스키마를 만들고 데이터를 삽입하는 데 사용할 수 있는 .sql 파일에 Postgres 데이터를 저장해야 합니다. 이 시뮬레이션 마이그레이션에서는 tailwind.sql 리포지토리 내의 샘플 데이터 파일 Azure-Samples/linux-postgres-migration을 사용합니다. 파일을 Azure Blob Storage에 복사한 다음 Azure Database for PostgreSQL로 가져옵니다.

자체 데이터를 마이그레이션할 때가 되면 원본 데이터베이스에서 데이터를 내보내어 .sql 파일에 저장합니다. 그런 다음 이 모듈에서 설명한 대로 파일을 Blob Storage에 복사합니다.

이진 파일

대부분의 애플리케이션에는 미디어 파일과 같은 다른 이진 파일이 있어 이를 마이그레이션해야 합니다. 샘플 애플리케이션의 경우 Azure-Samples/linux-postgres-migration에서 Blob Storage로 이미지를 복사하여 마이그레이션하는 방법을 알아봅니다.

마찬가지로, 고유의 워크로드를 마이그레이션할 때는 이진 파일을 Blob Storage에 복사해야 합니다. 이 경우 컴퓨팅은 상태 비저장이며 애플리케이션은 Blob Storage에 있는 이진 데이터에 직접 액세스할 수 있는 권한이 있습니다.

코드 제공 인프라(Bicep)

이 모듈의 코드 제공 인프라도 Azure-Samples/linux-postgres-migration에 저장됩니다. 최소 변경만으로 그대로 사용할 수 있는 참조 아키텍처로 설계되었습니다. 단, 원본 데이터와 애플리케이션을 이전에 설명한 구조에 맞게 조정할 수 있어야 합니다.

보안은 이 마이그레이션의 주요 테마이며, 우리는 이 모듈의 실습 부분을 보다 쉽게 ​​완료할 수 있도록 특정 보안 설정을 선택했습니다. 예를 들어, Blob Storage는 더 안전하고 키가 없는 인증 방법을 사용하지만 모든 IP 주소에서 네트워크 연결을 허용합니다. 프로덕션 환경에서는 스토리지 계정에 액세스해야 하는 IP 주소에만 네트워크 액세스를 허용하도록 잠그고 싶을 것입니다.

마찬가지로, 특정 IP 주소를 허용하기 위해 PostgreSQL 서버에 방화벽 규칙을 추가하는 옵션도 남겨둡니다. 프로덕션 환경에서는 서버에 대한 모든 공용 액세스를 완전히 사용하지 않도록 설정할 수 있습니다.

원본 환경과 Azure의 차이점

다른 환경에서 Azure로 마이그레이션하는 데 있어 가장 큰 차이점 중 하나는 Azure가 제공하는 보안 및 ID 제어를 최대한 활용한다는 것입니다.

  • 가상 머신과 Azure Database for PostgreSQL에 관리 ID를 사용합니다.
  • 데이터베이스 인증에는 Microsoft Entra ID를 사용합니다.
  • 가상 머신에 액세스하려면 SSH(Secure Shell) 키가 아닌 Microsoft Entra ID를 사용합니다.

리프트 앤 시프트 방식의 마이그레이션을 수행하는 대신, Azure에서 제공하는 보안 및 규정 준수 기능을 최대한 활용하기 위해 애플리케이션을 현대화할 수 있는 기회를 활용하고 있습니다.

회사 내에서는 사용자 이름과 암호를 사용하여 데이터베이스를 인증할 수 있습니다. Azure에서 가상 머신의 관리 ID를 사용하여 데이터베이스를 인증하는 방법을 소개합니다. 이 인증 방법은 보안성이 더 뛰어나고 장기적으로 보관되는 자격 증명이 손상될 위험을 줄여줍니다.

인증에 관리 ID를 사용하려면 애플리케이션의 코드를 변경해야 하는 경우가 많습니다. 이 모듈은 Go에서 azidentity 라이브러리를 사용하여 관리 ID에 대한 토큰을 가져오는 방법을 보여 줍니다. 동일한 라이브러리가 모든 Microsoft SDK에서 제공됩니다.

Azure 계정을 만들고 Azure CLI를 설치합니다.

Azure 계정이 없으면 지금 무료 계정을 만듭니다. 유료 Azure 서비스를 체험해 보는 데 사용할 수 있는 크레딧을 가져오게 됩니다. 크레딧을 사용한 후에도 계정을 유지하고 무료 Azure 서비스를 사용할 수 있습니다.

다음 단원의 명령을 실행하려면 Bash 셸에 액세스해야 합니다. 이 셸은 다음 중 어느 영역에나 있을 수 있습니다.

  • 로컬 머신. 예를 들어, macOS, Linux, WSL(Linux용 Windows 하위 시스템), Docker를 사용합니다.
  • 가상 머신에서: 예를 들어, Multipass나 Azure를 사용합니다.
  • 클라우드에서 예를 들어, Azure Cloud Shell 또는 GitHub Codespaces를 사용합니다.

이 모듈을 완료하려면 Azure CLI가 필요합니다. Azure CLI 설치 문서의 지침에 따라 로컬 컴퓨터에 Azure CLI를 설치할 수 있습니다. Git도 설치해야 합니다.

리소스