Azure App Service 및 Azure Web App 만들기

  • 19 minutes to read

Azure App Service는 PaaS(Platform as a Service) 서비스로, 개발자가 애플리케이션을 빠르게 구축, 배포 및 확장할 수 있도록 지원합니다. 이 서비스는 웹 애플리케이션, 모바일 앱, API 애플리케이션 등 다양한 유형의 애플리케이션을 호스팅할 수 있으며, 매우 간단하게 배포할 수 있습니다.

Azure Web App은 App Service의 일부로서, 특히 웹 애플리케이션을 위한 PaaS 서비스입니다. 이 서비스는 .NET, Java, Python, PHP 등 다양한 언어와 프레임워크를 지원하며, Visual Studio를 비롯한 다양한 IDE와 통합됩니다. Azure Web App은 내장된 로드 밸런서, 자동 확장 기능, 백업 및 복원 기능 등 다양한 기능을 제공하여 개발자가 운영 및 관리 부담을 줄이고 안정적인 웹 애플리케이션을 구축할 수 있도록 지원합니다.

즉, Azure App Service와 Azure Web App을 사용하면, 개발자는 클라우드 환경에서 빠르고 간편하게 웹 애플리케이션을 개발하고 배포할 수 있습니다. 또한 이러한 서비스는 기본 인프라 관리를 대신 해주므로 개발자는 애플리케이션 개발에 집중할 수 있습니다.

처음 시작할 때 Azure App ServiceAzure Web App은 동일한 용어로 봅니다.

로컬 개발 환경에서 만들어진 닷넷 웹앱, 자바(스프링 부트) 웹앱 등을 Azure에 올려서 서비스하고자 할 때 가장 첫 번째로 권장하는 방법은 Azure에 Web App을 만들고 이곳에 게시해서 서비스하는 것입니다.

박용준 강사의 모든 웹 사이트들은 Azure 초창기부터 지금까지 모두 Azure Web App에 올려서 서비스 되고 있습니다.

물리적인 서버 환경에서 웹앱을 운영하기 시작한게 1999년부터인데, Azure가 나오기 전까지는 많은 수의 물리적인 서버를 거쳐 지금은 Azure App Service 내의 웹앱 서비스에 올려서 운영합니다.

Azure App Service 소개

Azure App Service는 웹 애플리케이션, REST API 및 모바일 백 엔드를 호스트하는 HTTP 기반 서비스입니다. .NET, .NET Core, Java, Node.js, PHP 또는 Python 등 원하는 언어로 개발할 수 있습니다. 예를 들어, 닷넷코리아(https://www.dotnetkorea.com) 사이트는 ASP.NET으로 닷넷노트(https://www.dotnetnote.com) 사이트와 메모엔진(https://www.memoengine.com) 사이트는 ASP.NET Core로 자바캠퍼스(https://www.javacampus.com) 사이트는 Spring Boot로 운영중입니다.

NOTE

박용준 강사의 강의에서는 Linux용 App Service는 다루지 않습니다.

기본으로 스케일 기능 제공

스케일 업/다운 또는 스케일 아웃/인 기능은 Azure App Service에 기본적으로 포함되어 있습니다. 웹앱 사용량에 따라 웹앱을 호스트 중인 기본 머신의 리소스를 늘리거나 줄여 앱을 스케일 업/다운할 수 있습니다. 리소스에는 사용 가능한 코어 수 또는 RAM 크기가 포함됩니다. 스케일 아웃/인은 웹앱을 실행 중인 머신의 인스턴스 수를 늘리거나 줄이는 기능입니다. Azure 포털에서 마우스 클릭 한 두번으로 서비스 용량을 아주 손쉽게 올리고 내릴 수 있습니다.

CI/CD(연속 통합/배포) 지원

Azure Portal은 개발 머신에서 Azure DevOps, GitHub, Bitbucket, FTP 또는 로컬 Git 리포지토리에 대한 연속 통합 및 배포를 기본적으로 제공합니다. 웹앱을 위의 원본과 연결하면 App Service가 코드 및 코드의 이후 변경 내용을 웹앱에 자동 동기화하여 나머지 작업을 수행합니다.

박용준 강사가 운영하는 모든 사이트는 기본적으로 모두 CI/CD를 설정해 두었습니다. 그래서, 로컬 개발 환경에서 소스를 변경하고 소스를 푸시(체크인)하면 수 분 내로 Azure DevOps에서 빌드가 완료되고 Azure Web App의 스테이징 또는 프로덕션 환경으로 자동으로 릴리스(게시)가 됩니다. 현재는 Azure DevOps만 사용하고 있는데, 최근에는 GitHub Action도 많이 소개되고 있습니다.

배포 슬롯 제공(표준 요금제 이상)

Azure Portal 또는 명령줄 도구를 사용하면 App Service 웹앱에 배포 슬롯을 쉽게 추가할 수 있습니다. 예를 들어 Azure에서 테스트하기 위해 코드를 푸시할 수 있는 스테이징 배포 슬롯을 만들 수 있습니다. 코드에 만족할 경우 스테이징 배포 슬롯을 프로덕션 슬롯과 쉽게 교환할 수 있습니다. Azure Portal에서 마우스를 몇 번 클릭하면 이 작업을 모두 수행할 수 있습니다.

박용준 강사가 자주 사용하는 슬롯 환경입니다. Production과 Staging은 반드시 사용합니다. 나머지는 특정 경우에 따라서 추가하고 테스트하고 바로 제거하기도 합니다.

  • 프로덕션: 실제 도메인에 물려서 서비스되는 환경입니다.
  • 스테이징: 프로덕션에 가기 전에 최종 테스트되는 환경입니다.
  • 개발: 개발자 환경에서만 테스트되는 환경입니다.
  • 테스트: 테스트 목적으로 만들어 사용할 수도 있습니다.
  • 백업: 가끔은 특정 상태를 백업본으로 만들어 둘 수도 있습니다.

Azure App Service 플랜(요금제) 소개

App Service에서 앱(Web Apps, API Apps 또는 Mobile Apps)은 항상 App Service 플랜에서 실행됩니다. App Service 계획은 실행할 웹앱에 대한 컴퓨팅 리소스 세트를 정의합니다. 하나 이상의 앱은 동일한 컴퓨팅 리소스(또는 동일한 App Service 계획)에서 실행하도록 구성될 수 있습니다.

Azure App Service 플랜은 그 자체가 요금제로 보면 됩니다. 요금제는 여러 범주로 구분됩니다. 학습자라면 처음 시작은 무료(공유) 및 표준부터 시작하세요. 다른 것은 요금이 많이 나옵니다.

  • 공유 컴퓨팅: 무료 계층과 공유 계층은 앱의 리소스 풀을 다른 고객의 앱과 공유합니다. 이러한 계층은 CPU 할당량을 공유 리소스에서 실행되는 각 앱에 할당하며, 리소스를 스케일 아웃할 수 없습니다.
  • 전용 컴퓨팅: 기본, 표준, 프리미엄, PremiumV2 및 PremiumV3 계층은 전용 Azure VM에서 앱을 실행합니다. 동일한 App Service 계획의 앱만이 동일한 컴퓨팅 리소스를 공유합니다. 계층이 높을수록 스케일 아웃을 위해 더 많은 VM 인스턴스가 제공됩니다.
  • 격리: 이 계층은 전용 Azure Virtual Network에서 전용 Azure VM을 실행합니다. 앱에 대한 컴퓨팅 격리를 기반으로 네트워크 격리를 제공합니다. 최대 스케일 아웃 기능을 제공합니다.
  • 소비: 이 계층은 함수 앱만 사용할 수 있습니다. 그러면 워크로드에 따라 동적으로 함수를 확장합니다.

앱을 실행하고 크기를 조정하려면 어떻게 하나요?

무료 및 공유 계층에서 앱은 공유 VM 인스턴스에서 CPU 시간(분)을 받으며 스케일 아웃할 수 없습니다. 다른 계층에서는 앱이 다음과 같이 실행 및 크기 조정됩니다.

  • 앱은 App Service 플랜에 구성된 모든 VM 인스턴스에서 실행됩니다.
  • 여러 앱이 동일한 App Service 계획에 있는 경우 모두 동일한 VM 인스턴스를 공유합니다.
  • 또한 앱에 다중 배포 슬롯이 있는 경우 모든 배포 슬롯은 동일한 VM 인스턴스에서 실행됩니다.
  • 진단 로그를 사용하거나, 백업을 수행하거나, WebJobs을 실행하는 경우 이러한 VM 인스턴스에서 CPU 주기 및 메모리를 사용합니다.

이러한 방식으로 App Service 플랜은 App Service 앱의 배율 단위 입니다. 계획이 5개의 VM 인스턴스를 실행하도록 구성되면 계획의 모든 앱은 5개의 모든 인스턴스에서 실행됩니다. 계획이 자동 크기 조정을 위해 구성되면 계획의 모든 앱은 자동 크기 조정 설정에 따라 함께 확장됩니다.

앱에 더 많은 기능이 필요한 경우

언제든지 App Service 계획을 확장하고 축소할 수 있습니다. 계획의 가격 책정 계층을 변경하는 것처럼 간단합니다. 앱이 다른 앱과 동일한 App Service 계획에 있으면 컴퓨팅 리소스를 격리하여 앱의 성능을 향상하는 것이 좋습니다. 앱을 별도의 App Service 계획으로 이동하여 수행할 수 있습니다.

여러 앱을 하나의 App Service 플랜에 넣으면 비용을 절감할 수 있습니다. 하지만 동일한 App Service 플랜의 앱은 모두 동일한 컴퓨팅 리소스를 공유하므로 기존 App Service 플랜의 용량과 새 앱의 예상 부하를 알아야 합니다.

다음의 경우 새 App Service 계획으로 앱을 격리합니다.

  • 앱이 리소스를 많이 사용합니다.
  • 기존 계획에서 다른 앱과 독립적으로 앱을 확장하려고 합니다.
  • 앱에 서로 다른 지역의 리소스가 필요합니다.

이 방식을 사용하면 앱에 새 리소스 집합을 할당하고 앱을 더 잘 제어할 수 있습니다.

App Service에 배포

개발 팀마다 요구 사항이 다르기 때문에 클라우드 서비스에 대한 효율적인 배포 파이프라인 구현에 어려움을 겪을 수 있습니다. App Service는 자동 배포와 수동 배포를 모두 지원합니다.

자동화된 배포

자동화된 배포 또는 연속 통합은 최종 사용자에게 최소한의 영향을 주면서 빠르고 반복적인 패턴으로 새 기능 및 버그 수정을 푸시하는 데 사용되는 프로세스입니다.

Azure는 여러 원본에서 직접 자동화된 배포를 지원합니다. 다음 옵션을 사용할 수 있습니다.

  • Visual Studio에서 직접 배포: Visual Studio를 사용하는 환경이라면 가장 빨리 로컬에서 빌드 후 그 결과를 Azure Web App에 배포할 수 있습니다. 프로젝트 게시 메뉴를 제공하여 게시 프로파일을 사용하여 바로 업로드 가능합니다.
  • Azure DevOps: 코드를 Azure DevOps에 푸시하고, 클라우드에서 코드를 빌드하고, 테스트를 실행하고, 코드에서 릴리스를 생성하고, 마지막으로 코드를 Azure 웹앱에 푸시할 수 있습니다. 박용준 강사는 모두 이 방법을 사용합니다.
  • GitHub: Azure는 GitHub에서 직접 자동화된 배포를 지원합니다. 자동화된 배포를 위해 GitHub 리포지토리를 Azure에 연결하면 GitHub의 프로덕션 분기에 푸시하는 모든 변경 내용이 자동으로 배포됩니다. 최근 마이크로소프트의 강좌들은 GitHub를 대부분 사용합니다.
  • Bitbucket: GitHub와 유사하므로 Bitbucket을 사용하여 자동화된 배포를 구성할 수 있습니다.

수동 배포

코드를 Azure에 수동으로 푸시하는 데 사용할 수 있는 몇 가지 옵션이 있습니다.

  • Git: App Service 웹앱은 원격 리포지토리로 추가할 수 있는 Git URL 기능을 제공합니다. 원격 리포지토리에 푸시하면 앱이 배포됩니다.
  • CLI: webapp up은 앱을 패키지하고 배포하는 az 명령줄 인터페이스의 기능입니다. 다른 배포 방법과 달리 az webapp up에서는 App Service 웹앱이 아직 만들어지지 않은 경우 새 웹앱을 자동으로 만들 수 있습니다.
  • Zip 배포: curl 또는 유사한 HTTP 유틸리티를 사용하여 애플리케이션 파일의 ZIP을 App Service에 보냅니다.
  • FTP/S: FTP 또는 FTPS는 App Service를 포함한 많은 호스팅 환경에 코드를 푸시하는 기존 방법입니다. 아주 오래전의 초창기 웹앱 시절에 많이 사용해 본 옵션입니다.

배포 슬롯 사용

가능하면 새 프로덕션 빌드를 배포할 때 배포 슬롯을 사용합니다. 표준 App Service 플랜 계층 이상을 사용하는 경우 스테이징 환경에 앱을 배포한 다음 스테이징 슬롯과 프로덕션 슬롯을 교환할 수 있습니다. 교환 작업을 수행하면 프로덕션 규모와 일치하도록 하는 데 필요한 작업자 인스턴스가 발생하므로 가동 중지 시간을 없앨 수 있습니다.

DotNetNote 웹앱 만들고 게시하기 데모

  1. Azure Portal에 로그인하고, 상단 메뉴에서 "새로 만들기" 버튼을 클릭합니다.
  2. "웹앱"을 검색하고, "웹앱"을 선택합니다.
  3. "웹앱 만들기" 페이지에서, 필요한 정보들을 입력합니다.
    • 구독: Azure 구독을 선택합니다.
    • 리소스 그룹: 새로운 리소스 그룹을 생성하거나, 기존 리소스 그룹을 선택합니다.
    • 이름: 앱 이름을 입력합니다.
    • 게시: "코드"를 선택합니다.
    • OS: "Windows"를 선택합니다.
    • 리전: 앱을 호스팅할 리전을 선택합니다.
    • App Service 계획/요금 책: 새로 만들거나, 기존 계획을 선택합니다.
    • 스토리지: 새로 만들거나, 기존 스토리지를 선택합니다.
    • Azure 지원 및 경고: 필요한 경우, 선택합니다.
  4. "검토 + 만들기" 버튼을 클릭합니다.
  5. 앱이 만들어지면, 앱 개요 페이지에서 "게시 프로파일 가져오기" 버튼을 클릭합니다.
  6. "게시 프로파일 가져오기" 창이 표시되면, 원하는 게시 대상을 선택하고 "다운로드" 버튼을 클릭합니다.
  7. Visual Studio에서 DotNetNote 프로젝트를 열고, 솔루션 탐색기에서 프로젝트를 선택합니다.
  8. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고, "게시" 메뉴를 선택합니다.
  9. "게시 대상" 창에서 "프로필에서 가져오기"를 선택하고, 다운로드 받은 게시 프로파일 파일을 선택합니다.
  10. "게시" 버튼을 클릭하여 앱을 게시합니다.
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com