[python] FastAPI와 AWS S3를 사용한 이미지 업로드 서비스 구현

이미지를 업로드하고 AWS S3에 저장하는 이미지 업로드 서비스를 FastAPI로 구현하는 방법에 대해 알아보겠습니다.

1. FastAPI 시작하기

먼저, FastAPI 프레임워크를 사용하여 이미지 업로드 서비스를 구현하기 위해 아래와 같이 FastAPI를 설치합니다.

$ pip install fastapi
$ pip install uvicorn

2. 이미지 업로드 서비스 구현

이미지를 업로드하고 AWS S3에 저장하기 위해 main.py 파일을 생성하고 아래와 같이 코드를 작성합니다.

from fastapi import FastAPI, UploadFile, File
import boto3
from botocore.exceptions import NoCredentialsError

app = FastAPI()

# AWS S3 설정
AWS_ACCESS_KEY = 'your_access_key'
AWS_SECRET_KEY = 'your_secret_key'
S3_BUCKET = 'your_bucket_name'
s3 = boto3.client('s3', aws_access_key_id=AWS_ACCESS_KEY, aws_secret_access_key=AWS_SECRET_KEY)


@app.post("/upload/")
async def upload_image(file: UploadFile = File(...)):
    try:
        # 이미지 파일을 AWS S3에 업로드
        s3.upload_fileobj(file.file, S3_BUCKET, file.filename)
        return {"message": "이미지가 성공적으로 업로드되었습니다."}
    except NoCredentialsError:
        return {"error": "AWS 인증 정보가 유효하지 않습니다."}

3. 서버 실행

uvicorn 명령어로 FastAPI 서버를 실행합니다.

$ uvicorn main:app --reload

4. 이미지 업로드 테스트

아래와 같이 curl 명령어를 사용하여 이미지를 업로드할 수 있습니다.

$ curl -X POST -F "file=@/path/to/your/image.jpg" http://localhost:8000/upload/

5. 결론

이제 FastAPI를 사용하여 이미지 업로드 서비스를 구현하고 AWS S3에 이미지를 저장하는 방법을 알아보았습니다. FastAPI와 AWS S3를 이용하면 더욱 확장 가능한 이미지 업로드 서비스를 구축할 수 있습니다.

이상으로 튜토리얼을 마치겠습니다. 감사합니다.

FastAPI 공식 문서 AWS 공식 문서 Stack Overflow