FastAPI 서버개발, 컨테이너 구동 Cloud Run 설정 및 실행

FastAPI는 현대적인 웹 API를 구축하는 데 유용한 프레임워크로, 비동기 Python 기능을 활용하여 성능을 극대화합니다. 이 글에서는 FastAPI를 사용하여 간단한 웹 애플리케이션을 개발하고, 이를 Google Cloud Run에 배포하는 과정을 자세히 설명합니다. Cloud Run은 컨테이너화를 통해 서버리스 방식의 애플리케이션 배포를 가능하게 하며, 매우 유연합니다.

1. FastAPI 설치 및 기본 서버 구축

FastAPI를 설치하고 기본 서버를 만드는 과정부터 시작하겠습니다. FastAPI는 Python 3.6 이상에서 사용할 수 있습니다. 다음 명령어를 통해 FastAPI를 설치하세요:

pip install fastapi uvicorn

이제 간단한 FastAPI 서버를 설정해보겠습니다.

1.1 FastAPI 서버 코드

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

위 코드를 main.py라는 파일에 저장한 후, 다음 명령어로 서버를 실행합니다:

uvicorn main:app --reload

서버가 성공적으로 시작되면 http://127.0.0.1:8000에서 “Hello World” 메시지를 확인할 수 있습니다.

2. Docker로 FastAPI 애플리케이션 컨테이너화

이제 FastAPI 애플리케이션을 Docker 컨테이너로 패키징하는 방법을 알아보겠습니다. 먼저, Docker를 설치해야 합니다. 시스템에 맞는 Docker를 설치한 후, 다음 단계를 진행해주세요.

2.1 Dockerfile 작성

프로젝트 루트 디렉토리에 Dockerfile이라는 파일을 생성하고 다음 내용을 추가합니다:

FROM python:3.9

# 작업 디렉토리 생성
WORKDIR /app

# requirements.txt 복사
COPY requirements.txt .

# 의존성 설치
RUN pip install --no-cache-dir -r requirements.txt

# 앱 코드 복사
COPY . .

# Uvicorn으로 앱 실행
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]

위의 Dockerfile에서는 Python 3.9 이미지를 기반으로 FastAPI 애플리케이션을 실행하도록 설정했습니다. 의존성을 설치하고, FastAPI 애플리케이션을 실행하는 Uvicorn을 명령어로 지정합니다.

2.2 requirements.txt 파일 작성

다음으로 requirements.txt 파일을 생성하여 FastAPI와 Uvicorn을 설치할 수 있도록 합니다. 이 파일의 내용은 다음과 같습니다:

fastapi
uvicorn

2.3 Docker 이미지 빌드 및 실행

Dockerfile과 requirements.txt 파일이 준비되었으면, 다음 명령어를 통해 Docker 이미지를 빌드합니다:

docker build -t fastapi-app .

빌드가 완료되면 아래의 명령어로 컨테이너를 실행합니다:

docker run -d -p 8080:8080 fastapi-app

이제 http://localhost:8080에서 FastAPI 애플리케이션을 확인할 수 있습니다.

3. Google Cloud Run에 배포

이제 우리의 FastAPI 애플리케이션을 Google Cloud Run에 배포해보겠습니다. 이를 위해 먼저 Google Cloud Console에 로그인하고 새로운 프로젝트를 생성합니다.

3.1 Google Cloud SDK 설치 및 초기화

Google Cloud SDK가 필요합니다. 아래의 명령어를 통해 설치하고 초기화합니다:

curl https://sdk.cloud.google.com | bash
gcloud init

초기화 과정에서 생성할 프로젝트를 선택하거나 새로 생성합니다.

3.2 Google Container Registry에 이미지 푸시

Google Cloud Run에 배포하기 전에 이미지를 Google Container Registry에 푸시해야 합니다. 다음 명령어를 실행합니다:

gcloud auth configure-docker

이후 이미지를 푸시하기 위한 태그를 설정합니다:

docker tag fastapi-app gcr.io/YOUR_PROJECT_ID/fastapi-app

설정한 태그로 이미지를 푸시합니다:

docker push gcr.io/YOUR_PROJECT_ID/fastapi-app

여기서 YOUR_PROJECT_ID 부분은 Google Cloud Console에서 확인할 수 있는 자신의 프로젝트 ID로 대체해야 합니다.

3.3 Cloud Run 서비스 생성

이제 Cloud Run에서 서비스를 생성할 수 있습니다. 다음 명령어를 실행하세요:

gcloud run deploy fastapi-app --image gcr.io/YOUR_PROJECT_ID/fastapi-app --platform managed --region us-central1 --allow-unauthenticated

배포가 완료되면 Cloud Run에서 생성된 URL을 통해 FastAPI 애플리케이션에 접근할 수 있습니다.

4. Cloud Run에서 FastAPI 애플리케이션 확인

Cloud Run에 배포한 FastAPI 애플리케이션을 브라우저에서 확인해보세요. 배포 후 제공되는 URL로 이동하면 “Hello World” 메시지를 확인할 수 있습니다. 또한, /items/{item_id} 엔드포인트도 동일하게 작동하는 것을 확인할 수 있습니다.

5. 마무리

FastAPI를 사용하여 간단한 웹 애플리케이션을 구축하고, 이를 Docker로 컨테이너화한 후 Google Cloud Run에 배포하는 방법을 살펴보았습니다. 이러한 흐름은 실제 개발에서 유용한 경험이 될 것입니다. 앞으로 더 복잡한 FastAPI 애플리케이션을 개발하면서 다양한 기능과 모듈을 적용해보면 좋겠습니다.

이 글이 FastAPI와 Cloud Run에 대한 이해를 돕는 데 도움이 되었길 바랍니다. 성공적인 개발을 기원합니다!

© 2023 Your Name. All rights reserved.