애플리케이션을 Azure App Service 및 SQL Database로 마이그레이션
이 문서에서는 가상 회사 Contoso가 Azure로의 마이그레이션의 일부로서 VMware VM에서 실행되는 2계층 Windows .NET 애플리케이션을 리팩터링하는 방법을 보여 줍니다. Contoso 팀은 애플리케이션 프런트 엔드 VM(가상 머신)을 Azure App Service 웹앱으로, 애플리케이션 데이터베이스를 Azure SQL Database로 마이그레이션합니다.
이 예제에서 사용하는 SmartHotel360 애플리케이션은 오픈 소스 소프트웨어로 제공됩니다. 테스트 목적으로만 사용하려는 경우 GitHub 다운로드할 수 있습니다.
비즈니스 영향 요소
Contoso IT 리더십 팀은 비즈니스 파트너와의 긴밀한 협력을 통해 다음과 같이 기업이 이러한 마이그레이션으로 달성하고자 하는 바를 잘 이해하고 있습니다.
- 비즈니스 성장 해결. Contoso는 성장하고 있으며 여기에는 온-프레미스 시스템과 인프라에 대한 압박이 있습니다.
- 효율성 증대. Contoso는 불필요한 절차를 제거하고 개발자와 사용자를 위한 프로세스를 간소화해야 합니다. 이 회사는 IT를 빠른 상태로 유지하고 시간이나 비용을 낭비하지 않도록 하여 고객 요구 사항을 더 빠르게 제공해야 합니다.
- 민첩성 향상. Contoso IT는 글로벌 경제에서 성공을 거두려면 비즈니스 요구 사항에 보다 신속하게 대응해야 합니다. 마켓플레이스의 변화에 더 빠르게 대응할 수 있어야 합니다. IT는 방해를 받거나 비즈니스에 방해가 되어서도 안 됩니다.
- 크기 조정. 비즈니스가 성공적으로 성장함에 따라 Contoso IT에서 동일한 속도로 크기를 조정할 수 있는 시스템을 제공해야 합니다.
- 비용을 절감합니다. Contoso는 라이선스 비용을 최소화하려고 합니다.
마이그레이션 목표
최상의 마이그레이션 방법을 결정하기 위해 Contoso 클라우드 팀은 다음 목표를 고정했습니다.
요구 사항 | 세부 정보 |
---|---|
애플리케이션 | Azure의 애플리케이션은 현재 온-프레미스만큼 중요합니다. 앞으로도 현재 VMware에서 수행하는 것과 동일한 성능을 갖추어야 합니다. 팀은 애플리케이션에 투자하고 싶지 않습니다. 지금은 관리자가 애플리케이션을 클라우드로 안전하게 이동하기만 하면 됩니다. 팀은 애플리케이션이 현재 실행되는 Windows Server 2008 R2 지원을 중지하려고 합니다. 또한 팀은 SQL Server 2008 R2에서 최신 PaaS(Platform as a Service) 데이터베이스로 전환하여 관리 필요성을 최소화하고자 합니다. Contoso는 가능한 경우 SQL Server 라이선싱 및 Software Assurance에 대한 투자를 활용하려고 합니다. 또한 Contoso는 웹 계층에서 단일 실패 지점을 완화하려고 합니다. |
제한 사항 | 애플리케이션은 ASP.NET 애플리케이션과 동일한 VM에서 실행되는 WCF(Windows Communication Foundation) 서비스로 구성됩니다. Azure App Service를 사용하여 두 웹앱에 이러한 구성 요소를 분산하려고 합니다. |
Azure | Contoso는 애플리케이션을 Azure로 이동하려고 하지만 VM에서 실행하려는 것은 아닙니다. Contoso는 웹 및 데이터 계층에 대해 Azure PaaS 서비스를 사용하려고 합니다. |
DevOps | Contoso는 빌드 및 릴리스 파이프라인에 Azure DevOps 사용하는 DevOps 모델로 이동하려고 합니다. |
솔루션 디자인
Contoso는 목표와 요구 사항을 고정한 후 배포 솔루션을 디자인하고 검토합니다. 또한 마이그레이션에 사용할 Azure 서비스를 포함하여 마이그레이션 프로세스를 식별합니다.
현재 애플리케이션
- SmartHotel360 온-프레미스 애플리케이션은
WEBVM
과SQLVM
두 VM에 걸쳐 계층화됩니다. - VM은 VMware ESXi 호스트
contosohost1.contoso.com
버전 6.5에 있습니다. - VMware 환경은 VM에서 실행되는 vCenter Server 6.5(
vcenter.contoso.com
)에서 관리됩니다. - Contoso에는 온-프레미스 데이터 센터(
contoso-datacenter
)와 온-프레미스 도메인 컨트롤러(contosodc1
)가 있습니다. - 마이그레이션이 완료되면 Contoso 데이터 센터의 온-프레미스 VM은 서비스 해제됩니다.
제안된 솔루션
- 애플리케이션의 데이터베이스 계층에서 Contoso는 기능 비교: Azure SQL Database 및 Azure SQL Managed Instance를 참조하여 Azure SQL Database를 SQL Server와 비교했습니다. Contoso는 몇 가지 이유로 Azure SQL Database를 사용하기로 결정했습니다.
- Azure SQL Database는 관리되는 관계형 데이터베이스 서비스입니다. 0에 가까운 관리를 사용하여 여러 서비스 수준에서 예측 가능한 성능을 제공합니다. 이점으로 가동 중지 시간 없는 동적 확장성, 기본 제공 지능형 최적화 및 글로벌 확장성 및 가용성을 포함합니다.
- Contoso는 가벼운 Data Migration Assistant를 사용하여 Azure SQL Database로의 온-프레미스 데이터베이스 마이그레이션을 평가할 수 있습니다.
- Contoso는 Azure Database Migration Service를 사용하여 온-프레미스 데이터베이스를 Azure SQL Database에 마이그레이션할 수 있습니다.
- Software Assurance를 사용하여 Contoso는 SQL Server Azure 하이브리드 혜택을 통해 SQL Database의 데이터베이스에 대한 기존 라이선스를 할인된 가격으로 교환할 수 있습니다. 이 방법으로 비용을 최대 30% 절감할 수 있습니다.
- SQL Database는 Always Encrypted, 동적 데이터 마스킹, 행 수준 보안 및 SQL 위협 감지와 같은 보안 기능을 제공합니다.
- 애플리케이션 웹 계층의 경우 Contoso는 Azure App Service를 사용하기로 결정했습니다. PaaS 서비스를 사용하면 몇 가지 구성 변경만으로 애플리케이션을 배포할 수 있습니다. Contoso는 Visual Studio를 사용하여 변경하고 웹 사이트용과 WCF 서비스용 웹앱 2개를 배포합니다.
- Contoso는 DevOps 파이프라인에 대한 요구 사항을 충족하기 위해 Git 리포지토리를 사용하여 소스 코드 관리에 Azure DevOps를 사용합니다. 자동화된 빌드 및 릴리스를 사용하여 코드를 빌드하고 Azure App Service에 배포합니다.
솔루션 검토
Contoso는 다음 표와 같이 장단점 목록을 함께 배치하여 제안된 디자인을 평가합니다.
고려 사항 | 세부 정보 |
---|---|
장점 | SmartHotel360 애플리케이션 코드는 Azure로 마이그레이션하기 위해 변경할 필요가 없습니다. Contoso는 SQL Server 및 Windows Server 모두에 Azure 하이브리드 혜택을 사용하여 Software Assurance에 대한 투자를 활용할 수 있습니다. 마이그레이션 후 Windows Server 2008 R2는 지원되지 않아도 됩니다. 자세한 내용은 Microsoft 수명 주기 정책을 참조하세요. Contoso는 여러 인스턴스를 사용하여 애플리케이션의 웹 계층을 구성할 수 있으므로 웹 계층은 더 이상 단일 실패 지점이 아닙니다. 데이터베이스는 더 이상 오래된 SQL Server 2008 R2에 의존할 필요가 없습니다. SQL Database는 기술 요구 사항을 지원합니다. Contoso는 Data Migration Assistant를 사용하여 온-프레미스 데이터베이스를 평가하였으며 호환된다는 것을 발견했습니다. Azure SQL Database에는 Contoso에서 설정할 필요가 없는 내결함성이 기본 제공되었습니다. 따라서 데이터 계층은 더 이상 단일 장애 조치(failover) 지점이 아닙니다. Contoso가 Azure Database Migration Service를 사용하여 데이터베이스를 마이그레이션하는 경우 데이터베이스를 대규모로 마이그레이션할 수 있는 인프라가 준비됩니다. |
단점 | Azure App Service는 각 웹앱에 대해 하나의 애플리케이션 배포만 지원합니다. 즉, 두 개의 웹앱이 하나는 웹 사이트에 또 하나는 WCF 서비스에 프로비전되어야 합니다. |
제안된 아키텍처
마이그레이션 프로세스
Contoso는 Azure SQL 데이터베이스를 프로비전한 다음 Azure Database Migration Service 사용하여 SmartHotel360 데이터베이스를 마이그레이션합니다.
Contoso는 웹앱을 프로비전 및 구성하고 SmartHotel360 애플리케이션을 배포합니다.
Azure 서비스
서비스 | Description | 비용 |
---|---|---|
Azure App Service Migration Assistant | 코드 변경을 최소화하여 온-프레미스에서 클라우드로 .NET 웹 애플리케이션을 원활하게 마이그레이션하는 간단한 무료 경로입니다. | 무료로 다운로드할 수 있는 도구입니다. |
데이터 Migration Assistant | Contoso는 Data Migration Assistant를 사용하여 Azure의 데이터베이스 기능에 영향을 줄 수 있는 호환성 문제를 평가하고 검색합니다. Data Migration Assistant는 SQL 원본과 대상 간의 기능 패리티를 평가하고 성능 및 안정성 향상을 권장합니다. | 무료로 다운로드할 수 있는 도구입니다. |
Azure Database Migration Service | Azure Database Migration Service를 사용하면 가동 중지 시간을 최소화하면서 여러 데이터베이스 원본에서 Azure 데이터 플랫폼으로 원활하게 마이그레이션할 수 있습니다. | 지원되는 지역 및 Database Migration Service 가격에 대해 자세히 알아보세요. |
Azure SQL Database | 완전히 관리되는 지능적인 관계형 클라우드 데이터베이스 서비스입니다. | 비용은 기능, 처리량 및 크기를 기반으로 합니다. 자세히 알아보기. |
Azure App Service | 완전 관리형 플랫폼을 사용하는 강력한 클라우드 애플리케이션을 만드는 데 도움이 됩니다. | 가격은 크기, 위치 및 사용 기간을 기준으로 합니다. 자세히 알아보기. |
Azure Pipelines | 애플리케이션 개발을 위한 CI/CD(지속적인 통합 및 지속적인 배포) 파이프라인을 제공합니다. 파이프라인은 애플리케이션 코드를 관리하기 위한 Git 리포지토리, 패키지 및 기타 빌드 아티팩트를 생성하기 위한 빌드 시스템 및 개발, 테스트 및 프로덕션 환경에 변경 내용을 배포하는 릴리스 관리 시스템으로 시작합니다. |
필수 조건
이 시나리오를 실행하려면 Contoso가 다음 필수 구성 요소를 충족해야 합니다.
요구 사항 | 세부 정보 |
---|---|
Azure 구독 | Contoso는 이 문서 시리즈의 앞에서 구독을 만들었습니다. Azure 구독이 아직 없는 경우 체험 계정을 만듭니다. 체험 계정을 만들면 구독 관리자로서 모든 작업을 수행할 수 있습니다. 기존 구독을 사용하고 관리자가 아닌 경우 관리자와 협력하여 소유자 또는 기여자 권한을 할당받아야 합니다. |
Azure 인프라 | Contoso는 마이그레이션을 위한 Azure 인프라에 설명된 대로 Azure 인프라를 설정합니다. |
시나리오 단계
Contoso가 마이그레이션을 실행하는 방법은 다음과 같습니다.
- 1단계: 웹앱 평가 및 마이그레이션. Contoso는 Azure App Service Migration Assistant 도구를 사용하여 마이그레이션 전 호환성 검사를 실행하고 웹앱을 Azure App Service로 마이그레이션합니다.
- 2단계: Azure SQL Database에서 데이터베이스 프로비전. Contoso는 Azure SQL Database 인스턴스를 프로비전합니다. 애플리케이션 웹 사이트가 Azure로 마이그레이션되면 WCF 서비스 웹앱이 이 인스턴스를 가리킵니다.
- 3단계: 데이터베이스 평가. Contoso는 Data Migration Assistant 사용하여 마이그레이션할 데이터베이스를 평가한 다음, Azure Database Migration Service를 통해 마이그레이션합니다.
- 4단계: Azure DevOps 설정. Contoso는 새 Azure DevOps 프로젝트를 만들고 Git 리포지토리를 가져옵니다.
- 5단계: 연결 문자열 구성. Contoso는 웹 계층 웹앱, WCF 서비스 웹앱 및 SQL 인스턴스가 통신할 수 있도록 연결 문자열을 구성합니다.
- 6단계: Azure DevOps에서 빌드 및 릴리스 파이프라인 설정. 마지막 단계로 Contoso는 Azure DevOps에서 빌드 및 릴리스 파이프라인을 설정하여 애플리케이션을 만든 다음 두 개의 별도 웹앱에 배포합니다.
1단계: 웹앱 평가 및 마이그레이션
Contoso 관리자는 Azure App Service Migration Assistant 도구를 사용하여 웹앱을 평가하고 마이그레이션합니다. 프로세스 중에 ASP.NET 애플리케이션을 Azure로 마이그레이션 학습 경로를 가이드로 사용합니다. 관리자는 다음을 수행합니다.
Azure App Service 마이그레이션 평가 도구를 사용하여 웹앱 간의 종속성을 평가하고 온-프레미스 웹앱과 Azure App Service에서 지원되는 항목 간에 비호환성이 있는지 확인합니다.
Azure App Service Migration Assistant를 다운로드하고 해당 Azure 계정에 로그인합니다.
구독, 리소스 그룹 및 웹 사이트의 도메인 이름을 선택합니다.
2단계: Azure SQL Database에서 데이터베이스 프로비전
Contoso 관리자는 Azure SQL Database 인스턴스를 만들기로 결정합니다.
온-프레미스 VM에서 실행되는 데이터베이스와 일치하도록 데이터베이스
SmartHotel.Registration
의 이름을 지정합니다.ContosoRG
리소스 그룹에 데이터베이스를 배치합니다. Azure에서 프로덕션 리소스에 사용하는 리소스 그룹입니다.주 지역에서 새 SQL Server 인스턴스
sql-smarthotel-eus2
를 설정합니다.해당 서버 및 데이터베이스 요구 사항과 일치하도록 가격 책정 계층을 설정합니다. SQL Server 라이선스가 이미 있으므로 Azure 하이브리드 혜택으로 비용을 절약하도록 선택합니다.
크기 조정을 위해 vCore 기반 구매를 사용하고 예상 요구 사항에 대한 제한을 설정합니다.
데이터베이스 인스턴스를 만듭니다.
데이터베이스를 열고 마이그레이션을 위해 Data Migration Assistant를 사용할 때 필요한 세부 정보를 확인합니다.
도움이 더 필요하세요?
- SQL 데이터베이스 프로비전에 대한 도움말을 확인하세요.
- vCore 리소스 제한에 대해 알아봅니다.
3단계: 데이터베이스 평가
Contoso 관리자는 Data Migration Assistant를 사용하여 데이터베이스를 평가한 다음, 단계별 마이그레이션 자습서를 참조하여 Azure Database Migration Service를 사용하여 마이그레이션합니다. 온라인, 오프라인 및 하이브리드(미리 보기) 마이그레이션을 수행할 수 있습니다.
간단히 말해서 관리자는 다음을 수행합니다.
- Data Migration Assistant를 사용하여 데이터베이스 마이그레이션 문제를 검색하고 해결합니다.
- 가상 네트워크에 연결된 프리미엄 SKU를 사용하여 Azure Database Migration Service 인스턴스를 만듭니다.
- 인스턴스가 가상 네트워크를 통해 원격 SQL Server에 액세스할 수 있는지 확인합니다. 이렇게 하면 들어오는 모든 포트가 Azure에서 가상 네트워크 수준의 SQL Server, 네트워크 VPN 및 SQL Server를 호스트하는 컴퓨터로 허용됩니다.
- 인스턴스를 구성합니다.
- 마이그레이션 프로젝트를 만듭니다.
- 원본(온-프레미스 데이터베이스)을 추가합니다.
- 대상을 선택합니다.
- 마이그레이션할 데이터베이스를 선택합니다.
- 고급 설정을 구성합니다.
- 복제를 시작합니다.
- 오류가 있으면 해결합니다.
- 최종 컷오버를 수행합니다.
4단계: Azure DevOps 설정
Contoso는 애플리케이션에 대한 DevOps 인프라 및 파이프라인을 빌드해야 합니다. 이를 위해 Contoso 관리자는 새 DevOps 프로젝트를 만들고 코드를 가져온 다음 빌드 및 릴리스 파이프라인을 설정합니다.
Contoso의 Azure DevOps 계정에서 새 프로젝트(
ContosoSmartHotelRefactor
)를 만든 다음, 버전 제어를 위해 Git를 선택합니다.현재 애플리케이션 코드를 보유하고 있는 Git 리포지토리를 가져옵니다. 공용 GitHub 리포지토리에서 다운로드합니다.
Visual Studio를 리포지토리에 연결한 다음 팀 탐색기를 사용하여 코드를 개발자 컴퓨터에 복제합니다.
애플리케이션에 대한 솔루션 파일을 엽니다. 웹앱과 WCF 서비스에는 파일 내 별도의 프로젝트가 있습니다.
5단계: 연결 문자열 구성
Contoso 관리자는 웹앱과 데이터베이스가 서로 통신할 수 있는지 확인합니다. 이렇게 하려면 코드 및 웹앱에서 연결 문자열을 구성합니다.
WCF 서비스의
SHWCF-EUS2
웹앱에서 설정>애플리케이션 설정 아래 DefaultConnection이라는 새 연결 문자열을 추가합니다.SmartHotel-Registration
데이터베이스에서 연결 문자열을 끌어온 다음 올바른 자격 증명으로 업데이트합니다.Visual Studio에서 관리자는 솔루션 파일에서
SmartHotel.Registration.wcf
프로젝트를 엽니다. 프로젝트에서web.config
파일의connectionStrings
섹션을 연결 문자열로 업데이트합니다.SmartHotel.Registration.Web
에 대한web.config
파일의client
섹션을 WCF 서비스의 새 위치를 가리키도록 변경합니다. 서비스 엔드포인트를 호스트하는 WCF 웹앱의 URL입니다.이제 코드가 변경되면 관리자는 Visual Studio에서 팀 탐색기를 사용하여 커밋하고 동기화합니다.
6단계: Azure DevOps에서 빌드 및 릴리스 파이프라인 설정
이제 Contoso 관리자는 빌드 및 릴리스 프로세스를 수행하도록 Azure DevOps 구성합니다.
이를 위해 Azure DevOps에서 빌드 및 릴리스>새 파이프라인을 선택합니다.
Azure Repos Git을 선택하고 리포지토리 드롭다운 목록에서 관련 리포지토리를 선택합니다.
템플릿 선택에서 빌드에 대한
ASP.NET
템플릿을 선택합니다.빌드의 이름을
ContosoSmartHotelRefactor-ASP.NET-CI
로 사용한 다음, 첫 번째 빌드를 시작하는 저장 & 큐를 선택합니다.프로세스를 보려면 빌드 번호를 선택합니다. 완료되면 관리자는 프로세스 피드백을 볼 수 있으며 Artifacts를 선택하여 빌드 결과를 검토합니다.
Artifacts 탐색기 창이 열리고 드롭 폴더에 빌드 결과가 표시됩니다.
- 두 .zip 파일은 애플리케이션을 포함하는 패키지입니다.
- 이러한 .zip 파일은 Azure App Service에 배포하기 위해 릴리스 파이프라인에 사용됩니다.
릴리스>+새 파이프라인을 선택합니다.
Azure App Service용 배포 템플릿을 선택합니다.
릴리스 파이프라인
ContosoSmartHotel360Refactor
의 이름을 지정하고 스테이지 이름 상자에서 WCF 웹앱의 이름으로SHWCF-EUS2
를 지정합니다.단계 아래에서 1개 작업, 1개 태스크를 선택하여 WCF 서비스의 배포를 구성합니다.
구독이 선택되고 권한이 부여되었는지 확인한 다음 , 앱 서비스 이름을 선택합니다.
파이프라인 >Artifacts에서 + 아티팩트 추가를 선택한 다음
ContosoSmarthotel360Refactor
파이프라인을 사용하여 빌드하도록 선택합니다.지속적인 배포 트리거를 사용하도록 설정하려면 관리자가 아티팩트에서 번개 아이콘을 선택합니다.
지속적인 배포 트리거를 사용으로 설정합니다.
관리자는 1단계 작업, 작업 1로 돌아가서 Azure App Service 배포를 선택합니다.
파일 또는 폴더 선택에서 드롭 폴더를 확장하고 빌드 중에 만든
SmartHotel.Registration.Wcf.zip
파일을 선택한 다음 저장을 선택합니다.파이프라인>스테이지를 선택한 다음
SHWEB-EUS2
에 대한 환경을 추가하도록 + 추가를 선택합니다. 그리고 다른 Azure App Service 배포를 선택합니다.프로세스를 반복하여
SmartHotel.Registration.Web.zip
파일을 올바른 웹앱에 게시한 다음 저장을 선택합니다.릴리스 파이프라인은 다음과 같이 표시됩니다.
빌드로 돌아가서 트리거를 선택한 다음 지속 통합 사용 확인란을 선택합니다. 이 작업을 사용하면 변경 내용이 코드에 커밋될 때 전체 빌드 및 릴리스가 수행되도록 파이프라인을 사용할 수 있습니다.
저장 & 큐에 넣기를 선택하여 전체 파이프라인을 실행합니다. 새 빌드가 트리거되고, 그러면 Azure App Service에 대한 애플리케이션의 첫 번째 릴리스가 만들어집니다.
Contoso 관리자는 Azure DevOps에서 빌드 및 릴리스 파이프라인 프로세스를 수행할 수 있습니다. 빌드가 완료되면 릴리스가 시작됩니다.
파이프라인이 완료되면 두 사이트가 모두 배포되고 애플리케이션이 온라인 상태로 실행됩니다.
애플리케이션이 Azure로 성공적으로 마이그레이션되었습니다.
마이그레이션 후 정리
마이그레이션 후 Contoso는 다음 정리 단계를 완료합니다.
- vCenter 인벤토리에서 온-프레미스 VM을 제거합니다.
- 로컬 백업 작업에서 VM을 제거합니다.
- SmartHotel360 애플리케이션의 새 위치를 표시하도록 내부 설명서를 업데이트합니다. 이 설명서에서는 데이터베이스가 Azure SQL Database에서 실행 중이며 프런트 엔드는 두 개의 웹앱에서 실행되는 것으로 표시됩니다.
- 서비스가 해제된 VM과 상호 작용하는 모든 리소스를 검토하고 새 구성을 반영하도록 관련 설정 또는 설명서를 업데이트합니다.
배포 검토
이제 리소스가 Azure로 마이그레이션되었으므로 Contoso는 완전히 작동하고 새 인프라를 보호해야 합니다.
보안
- Contoso는 새
SmartHotel-Registration
데이터베이스가 안전한지 확인하는 데 도움이 됩니다. 자세히 알아보기. - 특히 Contoso는 인증서와 함께 SSL을 사용하도록 웹앱을 업데이트합니다.
Backup
- Contoso 팀은 Azure SQL Database에 대한 백업 요구 사항을 검토합니다. 자세히 알아보기.
- 또한 SQL Database 백업 및 복원 관리에 대해서도 알아봅니다. 자동 작업에 대해 자세히 알아봅니다.
- 데이터베이스에 대한 지역별 장애 조치(failover)를 제공하기 위해 장애 조치(failover) 그룹을 구현하는 것이 좋습니다. 자세히 알아보기.
- 복원력을 위해 주 지역(
East US 2
) 및 보조 지역(Central US
)에 웹앱을 배포하는 것이 좋습니다. 팀은 지역 가동 중단 중에 장애 조치(failover)를 보장하기 위해 Traffic Manager를 구성할 수 있습니다.
라이선스 및 비용 최적화
- 모든 리소스가 배포된 후 Contoso는 인프라 계획에 따라 Azure 태그를 할당합니다.
- 모든 라이선스는 Contoso가 사용하는 PaaS 서비스의 비용으로 빌드됩니다. 이 비용은 기업계약에서 공제됩니다.
- Contoso는 Azure Cost Management + Billing을 사용하여 IT 리더가 설정한 예산 내에서 유지되도록 합니다.
결론
이 문서에서 Contoso는 애플리케이션 프런트 엔드 VM을 두 개의 Azure App Service 웹앱으로 마이그레이션하여 Azure에서 SmartHotel360 애플리케이션을 리팩터링했습니다. 애플리케이션 데이터베이스가 Azure SQL Database로 마이그레이션되었습니다.