☁️ Azure 웹앱 서비스 구축 가이드

Geondong Kim·2026년 2월 2일

클라우드 컴퓨팅

목록 보기
13/13
post-thumbnail

이 가이드의 Part 1에서 생성한 PostgreSQL 데이터베이스와 연동하는 과정을, Part2에서 VS Code를 활용하여 Flask 애플리케이션을 Azure에 배포하는 과정을 다룹니다.

☁️ Azure 웹앱 서비스 구축 가이드 Part 1: PostgreSQL DB 생성

이 가이드는 Azure 클라우드 환경에서 Azure Database for PostgreSQL - 유연한 서버(Flexible Server)를 생성하고, 로컬 환경(DBeaver)에서 접속 테스트를 수행하는 과정을 다룹니다.

비용 효율적인 개발/테스트 용도로 최저가 구성을 목표로 합니다.

1. 사전 준비 (Prerequisites)

  • Azure 계정: 활성화된 Azure 구독이 필요합니다.
  • DBeaver: 데이터베이스 접속 테스트를 위한 SQL 클라이언트 도구입니다.

2. 리소스 그룹 생성 (Resource Group)

Azure의 모든 리소스는 '리소스 그룹'이라는 논리적 컨테이너 안에 생성됩니다. 관리를 위해 그룹을 먼저 만듭니다.

  1. Azure Portal에 로그인합니다.
  2. 상단 검색창에 "리소스 그룹"을 검색하고 선택합니다.
  3. 좌측 상단의 [+ 만들기] 버튼을 클릭합니다.
  4. 기본 사항 탭에서 다음 내용을 입력합니다.
    • 구독: 본인의 구독 선택
    • 리소스 그룹: 3dt005-rg
    • 지역: Korea Central (한국 중부) - 가까운 리전을 선택합니다.
  5. [검토 + 만들기][만들기]를 클릭하여 생성을 완료합니다.

3. Azure Database for PostgreSQL 생성

웹 애플리케이션의 데이터를 저장할 데이터베이스 서버를 생성합니다.

  1. Azure Portal 검색창에 "Azure Database for PostgreSQL"을 검색하고 선택합니다.
  2. [+ 만들기] 버튼을 클릭합니다.
  3. 배포 옵션에서 "유연한 서버(Flexible Server)" 아래의 [만들기]를 클릭합니다.
    • 참고: 유연한 서버는 비용 최적화 및 제어가 용이하여 현재 권장되는 옵션입니다.

3.1 기본 설정 (Basics)

가장 중요한 설정 단계입니다. 비용 절감을 위해 구성을 신중히 선택하세요.

  • 리소스 그룹: 앞서 만든 3dt005-rg 선택
  • 서버 이름: 3dt005-boarddb (전체 Azure에서 고유해야 함)
  • 지역: Korea Central (리소스 그룹과 동일하게 설정)
  • PostgreSQL 버전: 16 (또는 최신 버전)
  • 워크로드 유형: 개발 (또는 '소규모 데이터베이스') 선택
  • 컴퓨팅 + 스토리지: [서버 구성] 클릭 후 아래와 같이 설정 (최저가 구성)
    • 컴퓨팅 계층: 버스트 가능(Burstable)
    • 컴퓨팅 크기: Standard_B1ms (1 vCore, 2GiB RAM)
    • 스토리지: 32GB (최소)
    • [저장] 클릭
  • 인증:
    • 인증 방법: PostgreSQL 인증만 선택
    • 관리자 사용자 이름: azureuser
    • 암호: 7452를 포함한 복잡한 암호 (예: P@ssword7452)
      • 주의: Azure는 보안 정책상 대문자, 소문자, 숫자, 특수문자를 혼합해야 합니다.

3.2 네트워킹 설정 (Networking) - 중요! ⭐

로컬 PC(DBeaver)에서 접속하기 위해 방화벽을 열어야 합니다.

  • 연결 방법: 공용 액세스(허용된 IP 주소) 및 프라이빗 엔드포인트 선택
  • 방화벽 규칙:
    • [+ 현재 클라이언트 IP 주소 추가] 버튼 클릭 (내 PC에서 접속 허용)
    • (선택 사항) Azure 내의 앱 서비스에서 접속하려면 'Azure 내의 모든 Azure 서비스에서 이 서버에 대한 공용 액세스 허용'을 체크합니다.

3.3 검토 및 만들기

  1. 설정 내용을 확인하고 [검토 + 만들기]를 클릭합니다.
  2. 유효성 검사가 통과되면 [만들기]를 클릭합니다.
  3. 배포가 완료될 때까지 기다립니다. (약 5~10분 소요)

4. 연결 정보 확인

생성된 데이터베이스의 접속 주소를 확인합니다.

  1. 배포 완료 화면에서 [리소스로 이동]을 클릭합니다.
  2. 개요(Overview) 메뉴에서 다음 정보를 메모장 등에 복사해 둡니다.
    • 서버 이름 (호스트): 3dt005-boarddb.postgres.database.azure.com (예시)
    • 관리자 로그인 이름: azureuser

5. DBeaver 접속 테스트

로컬 PC의 DBeaver에서 Azure DB에 정상적으로 접속되는지 확인합니다.

  1. DBeaver 실행 > 좌측 상단 [새 데이터베이스 연결] 아이콘 클릭.
  2. PostgreSQL 선택 > [다음] 클릭.
  3. Main 탭 설정:
    • Host (Server): 아까 복사한 서버 이름 (3dt005-boarddb...azure.com)
    • Database: postgres (기본 생성되는 DB)
    • Username: azureuser
    • Password: 설정한 비밀번호
  4. SSL 탭 설정:
    • Azure PostgreSQL은 기본적으로 SSL 연결을 요구합니다.
    • Use SSL 체크박스 확인 (보통 기본값으로 접속 가능하나, 실패 시 SSL moderequire로 설정).
  5. [Test Connection] 클릭.
    • "Connected" 메시지가 뜨면 성공입니다.
  6. *[완료]**를 눌러 저장합니다.

6. Python (app.py) 연결 준비

이제 확보한 정보를 바탕으로 파이썬 웹 애플리케이션(app.py)의 DB 연결 설정 코드를 준비합니다. .env 파일을 활용하는 것이 보안상 좋습니다.

.env 파일 예시:

DB_HOST=3dt005-boarddb.postgres.database.azure.com
DB_NAME=postgres
DB_USER=azureuser
DB_PASSWORD=설정한비밀번호
DB_PORT=5432

app.py 연결 함수 예시:

def get_db_connection():
    conn = psycopg2.connect(
        host=os.getenv('DB_HOST'),
        database=os.getenv('DB_NAME'),
        user=os.getenv('DB_USER'),
        password=os.getenv('DB_PASSWORD'),
        port=os.getenv('DB_PORT'),
        sslmode='require' # Azure 접속 시 필수 옵션
    )
    return conn

다음 단계: 이제 데이터베이스가 준비되었습니다. 다음 파트에서는 이 DB를 사용하는 Flask 웹 애플리케이션을 Azure App Service에 배포하는 과정을 다룹니다.


☁️ Azure 웹앱 서비스 구축 가이드 Part 2: Flask 웹앱 배포

이 가이드는 로컬에서 개발한 Flask 애플리케이션을 Azure App Service에 배포하고, 앞서 구축한 PostgreSQL 데이터베이스와 연결하여 실제 서비스 가능한 상태로 만드는 과정을 다룹니다.

1. 사전 준비 (Prerequisites)

  • VS Code (Visual Studio Code) 설치
  • Azure App Service 확장 설치 (VS Code 마켓플레이스에서 Azure App Service 검색 및 설치)
  • Part 1에서 생성한 DB 정보 (호스트 주소, ID, 비밀번호)

2. 프로젝트 배포 준비 (로컬 설정)

Azure 서버(Linux 환경)에서 파이썬 애플리케이션이 구동되려면 필요한 라이브러리 목록이 명시되어 있어야 합니다.

2.1 가상환경 활성화 및 라이브러리 확인

터미널에서 프로젝트 폴더로 이동하여 가상환경을 활성화합니다.

# 가상환경 경로로 이동 및 활성화 (Windows 기준)
cd c:\\Users\\EL035\\dataschool\\SQL\\venvs\\dataproject
.\\Scripts\\activate

# 프로젝트 폴더로 이동
cd ..\\..\\myboard

2.2 Gunicorn 설치 및 requirements.txt 생성

Azure(Linux)는 프로덕션 환경에서 Flask 내장 서버 대신 Gunicorn WSGI 서버를 사용합니다. 반드시 설치 목록에 포함되어야 합니다.

  1. Gunicorn 설치 (아직 없다면):

    pip install gunicorn
  2. 패키지 목록 추출:

    pip freeze > requirements.txt

📄 requirements.txt 예시 (필수 항목)
파일을 열어 Flask, psycopg2-binary, gunicorn 등이 포함되어 있는지 확인합니다.

Flask==3.1.2
gunicorn
psycopg2-binary==2.9.11
python-dotenv==1.2.1
# ... 기타 라이브러리들

3. Azure App Service 생성 (VS Code)

VS Code의 Azure 확장을 사용하면 포털에 접속하지 않고도 손쉽게 웹앱 리소스를 생성할 수 있습니다.

  1. VS Code 좌측의 Azure 아이콘을 클릭합니다.
  2. App Services 항목에서 우클릭 후 [Create New Web App... (Advanced)]를 선택합니다. (고급 옵션을 통해 리소스 그룹을 지정하는 것을 권장합니다.)
  3. 단계별 설정 입력:
    • 이름: 3dt005-webapp (전세계 유일한 이름이어야 함)
    • 리소스 그룹: 3dt005-rg (Part 1에서 만든 그룹 선택)
    • 런타임 스택: Python 3.12 (로컬 개발 버전과 맞춤)
    • OS: Linux 권장
    • 지역: Korea Central (한국 중부)
    • App Service 플랜: Create new... -> 이름 입력 -> 요금 계층에서 B1 (Basic) 선택.
      • 참고: 무료(F1) 티어는 60분/일 제한이 있어 실습용으로는 B1이 안정적입니다.
  4. 생성이 완료될 때까지 기다립니다.

4. 환경 변수 및 빌드 설정 (Azure Portal)

배포 전에 데이터베이스 연결 정보와 빌드 설정을 Azure에 등록해야 합니다. 보안상 .env 파일은 업로드하지 않으므로 이 단계가 필수적입니다.

4.1 포털 접속 및 이동

  1. Azure Portal에 접속합니다.
  2. 생성된 3dt005-webapp 리소스로 이동합니다.

4.2 빌드 설정 확인 (SCM_DO_BUILD_DURING_DEPLOYMENT)

서버에서 배포 시 라이브러리를 자동으로 설치하도록 설정합니다.

  1. 좌측 메뉴의 [설정] > [환경 변수]를 클릭합니다.
  2. 앱 설정(App settings) 탭에서 SCM_DO_BUILD_DURING_DEPLOYMENT 값을 찾습니다.
    • 없다면 [추가]를 눌러 생성합니다.
    • 값(Value)이 *true로 되어 있는지 확인합니다. (기본값)

4.3 데이터베이스 연결 정보 등록

로컬의 .env 파일에 있던 내용을 Azure 환경 변수로 옮겨 적습니다.

  1. [환경 변수] > [추가] 버튼을 클릭합니다.
  2. 아래 내용을 하나씩 입력하고 추가합니다.
    • DB_HOST: 3dt005-boarddb.postgres.database.azure.com (Part 1에서 확인한 엔드포인트)
    • DB_PORT: 5432
    • DB_NAME: postgres
    • DB_USER: azureuser
    • DB_PASSWORD: 설정한_비밀번호
  3. 모두 추가했다면 하단의 [적용(Apply)] 버튼을 꼭 눌러야 저장됩니다.

5. 코드 배포 (Deploy)

이제 준비된 코드를 Azure 서버로 전송합니다.

  1. VS Code > Azure 탭 > App Services를 펼칩니다.
  2. 3dt005-webapp을 우클릭하고 [Deploy to Web App...]을 선택합니다.
  3. 배포할 폴더로 프로젝트 폴더(myboard)를 선택합니다.
  4. "배포하시겠습니까?" 팝업이 뜨면 [Deploy]를 클릭합니다.
  5. 우측 하단에 배포 진행 상황이 표시됩니다.

6. 배포 확인 및 모니터링

배포가 완료되면 웹사이트가 정상적으로 작동하는지 확인합니다.

6.1 실시간 로그 확인 (Live Log Stream)

배포 직후 서버 내부에서 오류가 없는지 확인하는 가장 좋은 방법입니다.

  1. VS Code Azure 탭에서 3dt005-webapp 우클릭.
  2. [Start Streaming Logs] 클릭.
  3. 터미널 창에 서버 로그가 올라옵니다. "Application is ready to serve" 같은 메시지가 보이면 성공입니다.

6.2 웹사이트 접속

  1. Azure Portal의 웹앱 개요(Overview) 탭으로 이동합니다.
  2. 기본 도메인(Default domain) 주소(https://3dt005-webapp.azurewebsites.net)를 복사합니다.
  3. 브라우저 주소창에 입력하여 접속합니다.
    • Flask 게시판 화면이 뜨고 DB 데이터가 조회된다면 성공입니다!

7. [심화] GitHub Actions를 이용한 지속적 배포 (CI/CD)

매번 VS Code에서 수동으로 배포하는 대신, GitHub에 코드를 푸시(Push)하면 자동으로 배포되도록 설정할 수 있습니다.

  1. GitHub 리포지토리 준비: 로컬 코드를 GitHub 리포지토리(myboard)에 Push 해둡니다.
  2. Azure Portal > 3dt005-webapp > [배포] > [배포 센터(Deployment Center)] 이동.
  3. 설정:
    • 소스: GitHub 선택
    • 조직: 본인 아이디 (geondongkim)
    • 리포지토리: myboard
    • 분기(Branch): main
    • 인증 유형: 기본 인증 (또는 사용자 할당 ID)
  4. *[저장]**을 클릭합니다.
  5. 이제 GitHub의 main 브랜치에 코드가 업데이트될 때마다 Azure가 자동으로 변경 사항을 감지하고 배포를 수행합니다.

Tip: 배포 센터 설정을 완료하면 GitHub 리포지토리에 .github/workflows 폴더와 yml 파일이 자동으로 생성됩니다. 이 파일이 배포 스크립트입니다.

0개의 댓글