FastAPI 서버개발, AWS, GCP 또는 Azure에 FastAPI 애플리케이션 배포하기

FastAPI는 Python으로 작성된 현대적인 웹 프레임워크로, 빠르고 효율적으로 API를 구축할 수 있는 강력한 기능을 제공합니다. 이 글에서는 FastAPI 서버를 개발한 후, 이를 AWS, GCP 및 Azure와 같은 클라우드 플랫폼에 배포하는 방법에 대해 자세히 설명하겠습니다.

1. FastAPI 소개

FastAPI는 Python으로 RESTful API를 만들기 위해 설계된 웹 프레임워크입니다. 주요 특징으로는 다음과 같습니다:

  • 비동기 프로그래밍 지원: FastAPI는 비동기 프로그래밍을 지원하며, 이를 통해 높은 성능을 발휘할 수 있습니다.
  • 자동화된 문서화: OpenAPI 및 JSON Schema를 기반으로 API 문서화를 자동으로 생성합니다.
  • 타입 힌트 지원: Python의 타입 힌트를 사용하여 코드의 가독성을 높이고, 입력 및 출력 데이터의 유효성을 검증합니다.

1.1 FastAPI 설치

FastAPI를 설치하려면 pip를 사용할 수 있습니다. Terminal 또는 Command Prompt에 다음 명령어를 입력합니다:

pip install fastapi uvicorn

2. FastAPI 애플리케이션 개발

FastAPI를 사용하여 간단한 애플리케이션을 만들어 보겠습니다. 이 예제에서는 간단한 사용자 관리 API를 작성합니다.

2.1 기본 애플리케이션 구조


- app/
    - main.py
    - models.py
    - schemas.py

2.2 models.py

from sqlalchemy import Column, Integer, String
from database import Base

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    email = Column(String, unique=True, index=True)

2.3 schemas.py

from pydantic import BaseModel

class UserCreate(BaseModel):
    name: str
    email: str

class UserOut(BaseModel):
    id: int
    name: str
    email: str

    class Config:
        orm_mode = True

2.4 main.py

from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from database import SessionLocal, engine
from models import User
from schemas import UserCreate, UserOut

app = FastAPI()

@app.post("/users/", response_model=UserOut)
def create_user(user: UserCreate, db: Session = Depends(get_db)):
    db_user = User(name=user.name, email=user.email)
    db.add(db_user)
    db.commit()
    db.refresh(db_user)
    return db_user

2.5 데이터베이스 연결 설정

이 예제에서는 SQLAlchemy를 사용하여 데이터베이스와 연결합니다. database.py 파일을 생성하고 데이터베이스 연결을 설정합니다.

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"

engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

3. FastAPI 애플리케이션 배포

애플리케이션이 준비되면, 이를 클라우드 서비스에 배포하는 첫 단계로 플랫폼을 선택해야 합니다. AWS, GCP, Azure 각각의 장단점이 있으며, 필요한 요구 사항에 따라 적절한 플랫폼을 선택해야 합니다.

3.1 AWS에 FastAPI 배포하기

AWS에서 FastAPI 애플리케이션을 배포하기 위해 Amazon EC2 인스턴스를 사용할 수 있습니다. 배포 과정은 다음과 같습니다:

  1. EC2 인스턴스 생성: AWS Management Console에 로그인하여 EC2 대시보드로 이동한 후 인스턴스를 만듭니다. 적절한 AMI(Amazon Machine Image)와 인스턴스 유형을 선택하십시오.
  2. SSH로 EC2 인스턴스에 접속: 생성한 인스턴스에 SSH로 접속하여 애플리케이션 파일을 전송합니다.
  3. Dependencies 설치: 접속 후, 필요한 패키지를 설치합니다:
  4. sudo apt update
    sudo apt install python3-pip
    pip3 install fastapi uvicorn sqlalchemy sqlite
  5. 애플리케이션 실행: uvicorn을 사용하여 애플리케이션을 실행합니다:
  6. uvicorn main:app --host 0.0.0.0 --port 8000

3.2 GCP에 FastAPI 배포하기

Google Cloud Platform(GCP)을 사용하여 FastAPI 애플리케이션을 배포하는 과정은 다음과 같습니다:

  1. Google Cloud Console에 로그인: GCP 프로젝트를 생성하고, Cloud Shell을 엽니다.
  2. App Engine 설정: App Engine에 대해 Python 환경을 설정합니다:
  3. gcloud app create --project YOUR_PROJECT_ID
  4. requirements.txt 파일 생성: 필요한 패키지를 명시합니다:
  5. fastapi
    uvicorn
    sqlalchemy
  6. app.yaml 파일 설정: GCP에서의 배포를 설정합니다:
  7. runtime: python39
    entrypoint: uvicorn main:app --host=0.0.0.0 --port=8080
    
    handlers:
    - url: /.*
      script: auto
  8. GCP에 배포: 다음 명령어를 사용하여 애플리케이션을 GCP에 배포합니다:
  9. gcloud app deploy

3.3 Azure에 FastAPI 배포하기

Azure에 FastAPI 애플리케이션을 배포하는 과정은 다음과 같습니다:

  1. Azure Portal에 로그인: App Service를 생성합니다.
  2. App Service의 환경 설정: Linux와 Python 스택을 선택합니다.
  3. 배포 준비: Azure CLI 또는 Git을 사용하여 코드를 푸시합니다.
  4. requirements.txt 파일 생성: GCP와 같이 dependencies를 명시합니다:
  5. fastapi
    uvicorn
    sqlalchemy
  6. 애플리케이션 실행: Azure Portal의 Console에서 uvicorn 명령어를 통해 애플리케이션을 실행합니다:
  7. uvicorn main:app --host=0.0.0.0 --port=8000

4. 결론

FastAPI는 현대적인 웹 애플리케이션에 적합한 강력한 프레임워크입니다. AWS, GCP, Azure와 같은 클라우드 플랫폼에 배포하는 과정은 각 플랫폼에 따라 다르지만, 기본 원리는 유사합니다. 이 글에서는 FastAPI 애플리케이션을 개발하는 방법과 AWS, GCP, Azure로 배포하는 방법에 대해 설명했습니다. 자신에게 맞는 플랫폼에서 효율적으로 FastAPI 애플리케이션을 운영할 수 있을 것입니다.

5. 추가 References