[python] Marshmallow와 AWS RDS를 함께 사용하여 관계형 데이터베이스 처리하기

이번 글에서는 Python의 Marshmallow 라이브러리와 AWS RDS를 함께 사용하여 관계형 데이터베이스를 처리하는 방법에 대해 알아보겠습니다.

개요

Marshmallow는 Python의 직렬화 라이브러리로, 데이터를 다른 형식으로 변환하거나 저장하는 등의 작업을 수행할 수 있습니다. 관계형 데이터베이스와 함께 사용하면 데이터베이스 모델과 데이터의 직렬화 및 역직렬화를 쉽게 처리할 수 있습니다.

AWS RDS (Relational Database Service)는 Amazon에서 제공하는 관계형 데이터베이스 서비스입니다. RDS를 사용하면 관리 및 운영에 대한 부담 없이 신속하게 관계형 데이터베이스를 생성, 관리, 확장할 수 있습니다.

설치

먼저, Marshmallow와 AWS SDK를 설치해야 합니다. 아래 명령을 터미널에서 실행하여 필요한 패키지를 설치합니다.

pip install marshmallow
pip install boto3

Marshmallow 스키마 작성

Marshmallow를 사용하여 데이터베이스 모델을 직렬화하기 위해 스키마를 작성해야 합니다. 예를 들어, 사용자(User) 모델에 대한 스키마를 만들어 보겠습니다.

from marshmallow import Schema, fields

class UserSchema(Schema):
    id = fields.Int()
    username = fields.Str()
    email = fields.Email()

위의 예제에서는 User 모델의 id, username, email 속성을 정의한 UserSchema 클래스를 작성하였습니다.

AWS RDS 구성

AWS RDS에 데이터베이스를 생성 및 구성해야 합니다. AWS 콘솔 또는 AWS CLI를 사용하여 데이터베이스를 생성합니다. 생성된 데이터베이스의 엔드포인트 주소, 포트, 인증 정보 등을 기록해두어야 합니다.

Marshmallow 스키마와 AWS RDS 연동

Marshmallow 스키마와 AWS RDS를 연동하여 데이터베이스를 처리하기 위해서는 AWS SDK를 사용해야 합니다. 아래는 데이터를 AWS RDS에 저장하는 코드 예제입니다.

import boto3

# AWS RDS 연결 설정
rds_client = boto3.client('rds', region_name='your_region', aws_access_key_id='your_access_key', aws_secret_access_key='your_secret_key')

# 데이터베이스에 데이터 저장
def save_user_to_db(user_data):
    serialized_user = UserSchema().dumps(user_data)
    response = rds_client.execute_statement(
        secretArn='your_secret_arn',
        resourceArn='your_database_arn',
        database='your_database_name',
        sql='INSERT INTO users (data) VALUES (:data)',
        parameters=[
            {'name': 'data', 'value': {'stringValue': serialized_user}}
        ]
    )
    return response

위의 코드에서 your_region, your_access_key, your_secret_key, your_secret_arn, your_database_arn, your_database_name에 실제 값을 입력해주어야 합니다. 데이터를 직렬화하여 serialized_user 변수에 저장한 후, AWS RDS 클라이언트의 execute_statement 메서드를 사용하여 데이터를 데이터베이스에 저장합니다.

Marshmallow 스키마와 AWS RDS에서 데이터 읽기

AWS RDS에서 데이터를 읽어와 Marshmallow 스키마와 연동하는 방법은 다음과 같습니다.

import boto3

# AWS RDS 연결 설정
rds_client = boto3.client('rds', region_name='your_region', aws_access_key_id='your_access_key', aws_secret_access_key='your_secret_key')

# 데이터베이스에서 데이터 읽기
def get_user_from_db(user_id):
    response = rds_client.execute_statement(
        secretArn='your_secret_arn',
        resourceArn='your_database_arn',
        database='your_database_name',
        sql='SELECT data FROM users WHERE id = :user_id',
        parameters=[
            {'name': 'user_id', 'value': {'stringValue': user_id}}
        ]
    )
    serialized_user = response['records'][0][0]['stringValue']
    user_data = UserSchema().loads(serialized_user)
    return user_data

위의 코드에서도 your_region, your_access_key, your_secret_key, your_secret_arn, your_database_arn, your_database_name에 실제 값을 입력해주어야 합니다. 데이터베이스에서 데이터를 읽은 후, Marshmallow 스키마의 loads 메서드를 사용하여 데이터를 역직렬화합니다.

결론

이번 글에서는 Marshmallow와 AWS RDS를 함께 사용하여 관계형 데이터베이스를 처리하는 방법에 대해 알아보았습니다. Marshmallow를 사용하면 데이터의 직렬화와 역직렬화를 간편하게 처리할 수 있으며, AWS RDS를 통해 데이터베이스를 관리하면서 유연하고 신속한 데이터 처리가 가능합니다.

더 자세한 내용은 Marshmallow와 AWS RDS의 공식 문서를 참조하시기 바랍니다: