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를 개발해 보세요!