FastAPI와 AWS DynamoDB를 연동하여 NoSQL 데이터베이스 사용하기

NoSQL 데이터베이스는 관계형 데이터베이스와 달리 유연하고 확장 가능한 데이터 저장 방식을 제공합니다. 이번 포스트에서는 FastAPI와 AWS DynamoDB를 연동하여 NoSQL 데이터베이스를 사용하는 방법에 대해 알아보겠습니다.

1. AWS 계정 및 DynamoDB 설정

먼저, AWS 계정을 생성하고 AWS Management Console에 로그인합니다. DynamoDB 서비스를 선택하고, 새로운 테이블을 생성합니다. 테이블 이름과 기본 키를 설정해야합니다. DynamoDB에서는 기본 키로 파티션 키 또는 파티션 키와 정렬 키를 함께 사용할 수 있습니다. 이 예제에서는 단순하게 파티션 키만 사용하도록 하겠습니다.

2. FastAPI 프로젝트 설정

FastAPI를 사용하기 위해 Python 가상 환경을 설정하고, 필요한 패키지를 설치합니다. 가상 환경을 설정하는 방법은 생략하겠습니다.

# main.py

from fastapi import FastAPI

app = FastAPI()

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

위의 코드는 FastAPI 프로젝트의 main.py 파일에 작성되어 있는 예시입니다. 간단한 루트 엔드포인트를 정의하였습니다. 이제 FastAPI와 DynamoDB를 연동하여 데이터베이스를 사용해보겠습니다.

3. Boto3를 사용하여 DynamoDB 연동하기

Boto3는 파이썬에서 AWS 서비스를 사용하기 위한 SDK입니다. 먼저 Boto3를 설치합니다.

pip install boto3

그리고 다음과 같이 DynamoDB와 연동할 코드를 작성합니다.

# main.py

import boto3

ddb = boto3.resource('dynamodb', region_name='YOUR_AWS_REGION')
table = ddb.Table('YOUR_DYNAMODB_TABLE_NAME')

@app.get("/items/{item_id}")
async def get_item(item_id: str):
    response = table.get_item(Key={'id': item_id})
    item = response.get('Item')
    return item

위의 코드에서 YOUR_AWS_REGION은 AWS 리전(region)의 이름을, YOUR_DYNAMODB_TABLE_NAME은 DynamoDB 테이블의 이름을 각각 적절하게 지정해야 합니다.

이제 /items/{item_id} 엔드포인트를 통해 item_id에 해당하는 항목을 가져오는 API를 만들었습니다. DynamoDB의 get_item 함수를 사용하여 해당 항목을 검색하고 반환합니다.

4. 테스트하기

이제 FastAPI 앱을 실행하고, /items/{item_id} 엔드포인트에 요청해보겠습니다.

uvicorn main:app --reload

FastAPI가 정상적으로 실행되었다면, 브라우저 또는 API 테스트 도구를 통해 /items/{item_id} 엔드포인트에 GET 요청을 보내면 DynamoDB에서 해당 항목을 가져와 반환하는 것을 확인할 수 있습니다.

결론

이번 포스트에서는 FastAPI와 AWS DynamoDB를 연동하여 NoSQL 데이터베이스를 활용하는 방법에 대해 알아보았습니다. Boto3를 사용하여 DynamoDB와의 연결을 설정하고, FastAPI에서 해당 데이터를 검색하는 API를 생성했습니다. 이를 통해 NoSQL 데이터베이스를 활용하여 유연하고 확장 가능한 애플리케이션을 개발할 수 있습니다.

#FastAPI #DynamoDB #NoSQL