FastAPI 서버개발, 컨테이너 실행 App Runner 설정 및 실행

FastAPI는 현대의 API 서버 개발에 최적화된 웹 프레임워크로, 비동기 프로그래밍을 지원하며 자동 문서화 기능이 뛰어나기 때문에 많은 개발자와 기업들이 선택하고 있습니다. 본 강좌에서는 FastAPI로 간단한 서버를 구현하고, 이를 컨테이너화하여 AWS App Runner에 배포하는 과정을 알아보겠습니다.

1. FastAPI 소개

FastAPI는 Python으로 작성된 비동기 RESTful API 웹 프레임워크입니다. 다음과 같은 주요 기능을 가지고 있습니다:

  • 빠른 성능: Starlette와 Pydantic을 기반으로 하여 경량이면서도 성능이 뛰어납니다.
  • 자동 API 문서화: OpenAPI와 JSON Schema를 기반으로 하여 자동으로 API 문서를 생성합니다.
  • 엄격한 데이터 검증: Pydantic을 통해 요청 및 응답 데이터에 대한 검증을 지원합니다.

2. FastAPI 서버 개발

2.1 프로젝트 환경 설정

먼저 FastAPI와 필요한 라이브러리를 설치합니다. 다음 명령어를 사용하여 가상 환경을 설정하고 FastAPI를 설치하세요:

python -m venv venv
source venv/bin/activate  # UNIX / MacOS
venv\Scripts\activate  # Windows
pip install fastapi uvicorn

2.2 기본 FastAPI 애플리케이션 작성

이제 FastAPI 애플리케이션의 기본 구조를 작성해 보겠습니다. 다음은 간단한 API 서버의 코드입니다:

from fastapi import FastAPI

app = FastAPI()

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

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

2.3 API 실행하기

Uvicorn을 사용하여 FastAPI 애플리케이션을 실행할 수 있습니다. 다음 명령어를 사용하세요:

uvicorn main:app --reload

이제 http://127.0.0.1:8000에 접속하여 API를 테스트할 수 있습니다. 기본적으로 제공되는 OpenAPI 문서에 접근하기 위해 http://127.0.0.1:8000/docs를 입력하세요.

3. 컨테이너화와 Docker

3.1 Docker 설치

FastAPI 서버를 컨테이너화하기 위해 Docker를 설치해야 합니다. Docker를 설치한 후, 다음 Dockerfile을 작성합니다:

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9

COPY ./app /app

WORKDIR /app

RUN pip install --no-cache-dir fastapi uvicorn

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

3.2 Docker 이미지 빌드

Dockerfile이 있는 디렉토리에서 다음 명령어를 실행하여 이미지를 빌드합니다:

docker build -t fastapi-app .

3.3 Docker 컨테이너 실행

이제 Docker 이미지를 기반으로 컨테이너를 실행합니다:

docker run -d --name my-fastapi -p 8080:80 fastapi-app

이제 http://localhost:8080에서 FastAPI 서버에 접근할 수 있습니다.

4. AWS App Runner 설정 및 실행

AWS App Runner는 컨테이너화된 웹 애플리케이션을 쉽고 빠르게 배포할 수 있도록 도와주는 서비스입니다. 다음 단계에 따라 FastAPI 서버를 AWS App Runner에 배포할 수 있습니다.

4.1 AWS CLI 설치 및 설정

AWS CLI가 설치되어 있지 않다면 아래의 명령어로 설치하세요:

pip install awscli

설치가 완료되면, 다음 명령어로 AWS CLI를 설정할 수 있습니다:

aws configure

AWS Access Key, Secret Access Key, 그리고 기본 리전 등을 설정합니다.

4.2 ECR(Elastic Container Registry) 생성

FastAPI 이미지를 저장할 레포지토리를 ECR에서 생성합니다. 아래의 명령어를 사용하세요:

aws ecr create-repository --repository-name fastapi-app

레포지토리가 생성된 후, ECR URI를 확인합니다.

4.3 Docker 이미지 푸시

앞서 생성한 ECR에 로그인을 합니다:

aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com
</region></account-id></region>

그 다음, 이미지를 ECR에 태그하고 푸시합니다:

docker tag fastapi-app:latest <account-id>.dkr.ecr.<region>.amazonaws.com/fastapi-app:latest
docker push <account-id>.dkr.ecr.<region>.amazonaws.com/fastapi-app:latest
</region></account-id></region></account-id>

4.4 App Runner 서비스 생성

이제 AWS Management Console에 로그인하여 App Runner를 선택한 후, “Create Service”를 클릭합니다. ECR에서 이미지를 선택하고, 필요한 설정을 합니다.

서비스 이름, 인스턴스 수, 스케일링 정책 등을 설정한 후 “Create”를 클릭하면 App Runner가 컨테이너를 배포합니다.

4.5 서비스 접근하기

서비스가 성공적으로 배포되면 URL이 생성됩니다. 이 URL을 통해 FastAPI 서버에 접근할 수 있습니다.

5. 마무리

FastAPI를 사용하여 간단한 API 서버를 만들고, Docker를 사용하여 컨테이너로 패키징한 후, AWS App Runner를 통해 배포하는 방법에 대해 알아보았습니다. FastAPI의 강력한 기능과 AWS 서비스를 결합하면 쉽고 빠르게 API를 제공할 수 있는 백엔드를 구축할 수 있습니다.

이제 여러분도 FastAPI를 활용하여 다양한 웹 애플리케이션과 API를 개발해 보세요!

작성자: [여러분의 이름]

날짜: 2024년 11월 26일