FastAPI 서버개발, 컨테이너 이미지 업로드 ECR 이용하기

최근 들어 마이크로서비스 아키텍처가 인기를 끌면서 RESTful API를 이용한 서버 개발이 중요한 기술로 자리잡고 있습니다. FastAPI는 이러한 RESTful API를 쉽게 만들 수 있는 현대적인 웹 프레임워크로, 비동기 처리를 지원하며, 빠르게 성능을 최적화할 수 있는 장점이 있습니다. 본 강좌에서는 FastAPI를 사용하여 백엔드 서버를 개발하고 AWS Elastic Container Registry(ECR)를 이용하여 컨테이너 이미지를 업로드하는 방법을 상세히 설명하겠습니다.

1. FastAPI란?

FastAPI는 Python3.6 이상에서 사용할 수 있는 빠른 웹 프레임워크입니다. 높은 성능과 쉬운 사용법, 데이터 검증, Swagger UI 자동 생성을 제공하여 RESTful API를 효율적으로 구축할 수 있게 도와줍니다.

주요 특징:

  • 비동기 프로그래밍 지원
  • 데이터 유효성 검사 및 직렬화
  • 자동 API 문서화
  • 고성능: Starlette와 Pydantic 기반

2. FastAPI 환경 설정

FastAPI를 사용하기 위해서는 Python이 설치되어 있어야 하며, 다음과 같은 패키지를 설치해야 합니다.

pip install fastapi uvicorn boto3

이후 가장 간단한 FastAPI 애플리케이션을 생성하여 실행해 보겠습니다.

2.1 첫 번째 FastAPI 애플리케이션

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello, FastAPI!"}

위 코드를 main.py라는 파일에 저장한 후, 서버를 실행해보세요.

uvicorn main:app --reload

브라우저에서 http://127.0.0.1:8000에 접속하면 “Hello, FastAPI!” 메시지를 확인할 수 있습니다.

3. ECR에 대해 알아보기

AWS Elastic Container Registry(ECR)는 Docker 이미지를 저장하고 관리할 수 있는 완전 관리형 컨테이너 레지스트리 서비스입니다. ECR은 이미지 배포와 버전 관리를 간단하게 할 수 있도록 도와줍니다.

3.1 ECR 설정하기

  1. AWS Management Console에서 ECR 서비스로 이동합니다.
  2. 레지스트리를 생성합니다.
  3. IAM 사용자에게 ECR 권한을 부여합니다.
  4. 레지스트리 URI를 복사합니다.

4. FastAPI 애플리케이션 Dockerize

이제 FastAPI 애플리케이션을 Docker 이미지로 패키징해보겠습니다. Dockerfile을 생성하고 아래와 같이 작성합니다.

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

COPY ./main.py /app/main.py

# 설치할 추가 패키지가 있다면 아래에 추가하세요.
RUN pip install -U pip
RUN pip install -U boto3

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

4.1 Docker 이미지 빌드하기

Docker 이미지를 빌드하려면 다음 명령어를 사용합니다.

docker build -t fastapi-app .

5. ECR에 Docker 이미지 푸시하기

ECR에 Docker 이미지를 업로드하기 위해서는 먼저 로그인해야 합니다. AWS CLI를 사용하여 인증을 수행할 수 있습니다.

aws ecr get-login-password --region YOUR_REGION | docker login --username AWS --password-stdin YOUR_AWS_ACCOUNT_ID.dkr.ecr.YOUR_REGION.amazonaws.com

이후 ECR에서 컨테이너 이미지를 푸시할 수 있습니다.

docker tag fastapi-app:latest YOUR_AWS_ACCOUNT_ID.dkr.ecr.YOUR_REGION.amazonaws.com/YOUR_REPOSITORY_NAME:latest
docker push YOUR_AWS_ACCOUNT_ID.dkr.ecr.YOUR_REGION.amazonaws.com/YOUR_REPOSITORY_NAME:latest

6. FastAPI와 ECR의 통합

이제 FastAPI로 구축한 백엔드 서버와 AWS ECR을 통한 이미지 업로드가 완료되었습니다. ECR에 푸시한 이미지를 기반으로 AWS 서비스와 통합하여 다양한 어플리케이션을 개발할 수 있습니다.

7. 마무리

이 강좌를 통해 FastAPI를 사용하여 RESTful API 서버를 개발하고, AWS Elastic Container Registry를 통해 Docker 이미지를 업로드하는 방법을 알게 되었습니다. FastAPI의 사용법과 AWS의 다양한 기능을 활용하여 실제로 동작하는 어플리케이션을 구축해 보세요. 추가적인 질문이나 피드백이 있으면 댓글로 남겨주시기 바랍니다. 감사합니다!