
로컬에서 개발한 Flask 애플리케이션을 마이크로소프트 애저(Azure) Web App에 배포하는 전체 과정을 정리함. VS Code 확장 프로그램과 GitHub Actions를 활용하여 CI/CD 파이프라인까지 구축하는 것이 목표임.
배포 전, 로컬 환경에서 Git 설정과 가상환경 구동이 선행되어야 함.
VS Code 터미널에서 사용자 정보를 설정함. 이 정보는 커밋 내역에 남게 됨.
# 닉네임 설정
git config --global user.name "본인이름"
# 이메일 설정
git config --global user.email "본인이메일@example.com"
# 설정값 확인
git config --global user.name
VS Code의 소스 제어 탭에서 진행함.
Tip:
.env파일이나 가상환경 폴더(venvs/) 등은 보안 및 용량 관리를 위해 반드시.gitignore파일에 등록하여 업로드에서 제외해야 함.
배포 전 로컬에서 정상 작동하는지 확인.
# 가상환경 진입
./venvs/dataproject/Scripts/activate
# 앱 실행 (app.py가 있는 폴더로 이동 후)
flask run
Azure 서버가 어떤 라이브러리를 설치해야 하는지 알 수 있도록 명세서를 작성해야 함.
가상환경이 켜진 상태에서 아래 명령어를 실행함.
# 현재 설치된 라이브러리 목록을 파일로 저장
pip freeze > requirements.txt
특히 gunicorn은 배포 환경(Linux)에서 Flask를 구동하기 위해 반드시 필요함.
requirements.txt 예시
Flask==3.1.2
gunicorn # << 필수!
psycopg2-binary==2.9.11
python-dotenv==1.2.1
pandas==3.0.0
# ... (기타 의존성)
Azure 포털에 접속하지 않고 VS Code 확장 프로그램으로 리소스를 생성할 수 있음.
Azure: Sign In을 클릭하여 계정 연동.3dt026-webapp).Python 3.13 (본인 프로젝트 버전에 맞춤).Linux 권장.Korea Central (한국 중부).F1(Free) 선택 (추후 트러블슈팅에서 B1으로 업그레이드 예정).로컬의 .env 파일은 업로드되지 않으므로, Azure 포털에서 직접 환경 변수를 설정해야 함.
DB_HOST, DB_PASSWORD, DB_USER 등 로컬 .env에 있던 내용.SCM_DO_BUILD_DURING_DEPLOYMENT = true (배포 시 빌드 수행, 패키지 설치를 위해 필수).SCM_COMMAND_IDLE_TIMEOUT = 3600 (배포 중 타임아웃 방지).WEBSITES_PORT = 8000 (필요시 포트 명시).Flask의 개발용 서버(flask run)는 배포 환경에 적합하지 않음. gunicorn을 사용해야 함.
gunicorn --bind=0.0.0.0 --timeout 600 app:app
app:app: 파일명:Flask객체명 형식임.코드를 GitHub에 푸시하면 자동으로 배포되도록 설정함.
GitHub 선택.기본 인증(Basic Auth) 등 선택 후 저장.배포 과정에서 겪은 오류와 해결 방법 정리.
SCM_COMMAND_IDLE_TIMEOUT 값을 3600(초)으로 설정하여 대기 시간을 늘림.PORT 또는 WEBSITES_PORT를 8000으로 지정.gunicorn --bind=0.0.0.0 --timeout 600 app:appF1)는 하루 사용량 제한이 있음.B1(Basic)으로 업그레이드하여 해결함.ImportError).abc.py라는 파일이 있었음. 이는 파이썬 표준 라이브러리의 abc 모듈과 이름이 겹쳐서 충돌을 일으킴.my_utils.py)으로 변경 (Rename).