Azure WebApp(App Service)으로 API 배포하기
요즘 AWS/Azure/GCP 등 클라우드 환경의 일반화로 굳이 서버/네트워크 장비 등 자체구매/운영 (온프레미스) 하지 않아도 된다.
그렇기에 최소한의 노력을 들여 PaaS 서비스 또는 Container를 지원하는 서비스를 사용하여 쉽게 배포/운영 할 수 있다.
Azure에서는 App Service라는 웹 어플리케이션 용 PaaS를 제공한다.
Java, Node.JS, Python 등 대부분의 웹프레임워크를 지원한다.
이 서비스를 이용하면 굳이 클라우드 환경에서 WEB/WAS/DB 등 서버를 별도 생성/구축하지 않고 웹 서비스를 구축할 수 있다.
클라우드 환경에서 VM을 활용해서 구축한다면, VM을 생성하고, OS 설치/운영하고, OS에 필요 라이브러리를 설치/구동하고, 개발 모듈을 올려서 연동하는 등 다수의 구축작업을 해야한다.
Azure App Service, Azure Functions을 활용하면 이러한 부분을 간소화해서 구축/운영할 수 있다.
0. Azure 웹앱의 동작 원리
Azure 웹앱은 기본적으로 Docker Container로 구동한다.
내부적으로 Oryx라는 Container 빌드 패키지를 사용한다.
Wep App 배포하기
다음과 같은 순서로 진행하도록 한다.
- Python Web Source Code 확보
- Azure App Service 생성
- Source Code 배포 (Azure Upload)
- 구동 확인
Azure에서 제공하는 Sample을 Github에서 다운로드 받아 사용하도록 한다. 아래는 Python Web Framework인 Flask의 Hello World이다.
MS Flask Web App
1 | git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart |
(소스코드 동작 확인) 로컬에서 정상 동작하는지 일단 확인을 해 보자.
1 | python3 -m venv .venv |
1. Azure App Service 생성/설정
Azure App Servie를 생성해준다.
App Service를 생성하는 방법은
- Azure Portal
- Azure CLI
- VS Code
- Azure SDK
필자는 Azure Portal에서 하곘다.
Azure Portal 로그인 후 좌측 상단 메뉴에서 “리소스 만들기”를 클릭한다.
그 중에서 웹 앱을 클릭한다.
웹앱 만들기에서 설정이 필요한 부분들은 아래와 같다.
- 구독/리소스그룹 : 본인의 구독과 리소스 그룹을 선택 or 생성해 주면 된다.
- 웹앱 이름 : 겹치지 않도록 이름을 설정하자. 예) “azure-webapp-python-test” 이 이름은 웹앱 생성후, “https://<웹앱이름>.azurewebsites.net”로 azure 기본 제공하는 subdomain name이 된다.
- 게시 방식 : 코드, docker 컨테이너, 정적웹앱. 우리는 가장 단순하게 “코드”를 선택하도록 하자.
- 런타임 스택 : Python 3.9를 선택. 다른버전 선택도 가능하다.
- 운영체제 : Linux. (Windows를 선택해도 무방하나, 본 포스팅은 Linux를 기반으로 진행한다.)
- 지역 : 본인이 편한 위치를 선택하면 된다.
- 가격정책플랜 : 우리는 테스트 해보는 것이기 때문에 기본으로 사용하자.
- “검토 + 만들기 “ 버튼을 누른다. 유효성이 검토되면 설정에 대한 요약페이지가 출력되고, 최종적으로 하단에 “만들기” 버튼을 또 한번 눌러 주어야 한다. 이후. “…배포 진행 중”이라는 페이지가 출력 될 것이다. 2~3분 기다리면 “배포 성공” 메세지가 출력된다.
- “리소스 이동” 버튼을 눌러준다.
웹앱이 생성 완료되면, “리소스로 이동”하여 웹앱의 왼쪽 메뉴중 “개요”에서 전반적인 웹앱의 정보를 확인한다.
우측 상단의 FTP/FTPS 등의 정보는, 배포 시 사용하는데, 민감정보이므로 노출되지 않도록 주의한다.
배포
좌측에 “배포 센터”로 이동한다.
실제 상용에서는 Stage -> Production으로 나누어서 지속배포(CI/CD)체계를 구축하나, 이 포스팅에서는 단순화하여 “로컬 Git”을 사용하여 배포하겠다.
“소스 > 로컬 Git”을 선택해준다.
“저장” 버튼을 클릭해야 적용이 된다.
저장이 완료되면 “Git Clone URI” 정보가 출력된다.
이 URI를 통해 “git push”를 실행하므로 URI를 복사해 두도록한다.
여기서 중요한점 중 하나는 사용자 이름이다. 사용자 이름은 기본적으로 다음과 같이 표기되어 있다 <웹앱 이름>$<웹앱 이름>
실제 Git Push 할 때 인증은 “$<웹앱 이름>” 부분만 사용된다. 예를 들어 표기된 사용자 이름이 “flask-test$flask-test”라면, 실제 사용되는 부분은 $를 포함한 “$flask-test” 부분이 해당된다. 이부분을 잘못 입력하면 인증실패로 git push가 실행되지 않는다. 패스워드의 경우 전체를 복사하여 사용하면 된다.
이제 Azure Portal에서 설정할 내용은 완료하였다. 다음은 Terminal 에서 Git push를 진행하면된다.
본 포스팅에서는 별도 빌드 또는 추가 설정이 필요없기 때문에 “설정/구성”을 추가로 진행하지 않았다. 그러나, 상세설정 들이 필요하다면 아래처럼 “구성” 메뉴에서 “application 설정”, “시작 명령어” 등을 상세 지정할 수 있다. “구성>애플리케이션 설정”은 Application 내부에서 사용할 별도의 설정을 지정할 수 있다.
위와 같이 하면 FTP 기본 인증 게시가 비활성화되어 있다고 에러가 난다. 아래와 같이 바꿔준다.
설정 저장이 완료되면, 아래와 같이 페이지에 “Git Clone URI” 정보가 출력된다.
이 URI로 우리는 ‘git push’를 실행하게 된다.
git push를 할 때 인증정보는 “FTP 자격증명” 메뉴에서 확인할 수 있다.
해당 탭에서 Git Clone URI를 다시 확인할 수 있으며, 사용자 이름/암호를 확인할 수 있다.
향후에는 “게시 프로필 관리”를 통해 인증이 관리되어야 한다.
Local Git 소스 배포
소스코드 폴더로 이동하여 Git Push를 진행하도록 하자. 이 때
ztna를 끄고 push를 진행해야 한다.
1 | $ git remote add azure <GIT URI> |
이제 소스코드 배포를 완료 했다. 앞서 거론했든이 Python은 별다른 빌드를 하지 않기 때문에, 별다른 설정파일 없이 웹앱을 생성할 수 있다. 이제 웹앱의 “개요”페이지에서 확인할 수 있는 웹앱 URL을 확인하고, 웹브라우저로 접속해 보기 바란다.
Reference
Azure WebApp(App Service)으로 API 배포하기
https://hamin7.github.io/2025/01/07/Azure-WebApp-Sample-Deploy/
install_url
to use ShareThis. Please set it in _config.yml
.