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 | docker login --username AWS --password-stdin .dkr.ecr..amazonaws.com
그 다음, 이미지를 ECR에 태그하고 푸시합니다:
docker tag fastapi-app:latest .dkr.ecr..amazonaws.com/fastapi-app:latest
docker push .dkr.ecr..amazonaws.com/fastapi-app:latest
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를 개발해 보세요!