[python] Marshmallow와 FastAPI를 함께 사용하여 실시간 데이터 처리하기

이번 블로그 포스트에서는 Marshmallow와 FastAPI를 함께 사용하여 실시간 데이터를 처리하는 방법에 대해 알아보겠습니다.

Marshmallow란?

Marshmallow는 파이썬의 객체 직렬화 및 역직렬화 라이브러리로, 데이터를 직렬화하여 JSON 형식으로 변환하거나 역으로 JSON 데이터를 객체로 변환할 수 있습니다. Marshmallow를 사용하면 데이터를 쉽게 유효성 검사하거나 필요한 필드만을 추출할 수 있습니다.

FastAPI란?

FastAPI는 파이썬의 빠른 웹 프레임워크로, ASGI(Asynchronous Server Gateway Interface)를 기반으로 비동기 작업을 처리할 수 있습니다. FastAPI는 높은 성능과 직관적인 API 설계를 지원하며, 자동 문서화 기능을 제공하여 개발자들에게 많은 편의성을 제공합니다.

Marshmallow와 FastAPI의 통합

이제 Marshmallow와 FastAPI를 함께 사용하여 실시간 데이터를 처리하는 방법에 대해 알아보겠습니다. 먼저, FastAPI에서 POST 요청을 받아와 Marshmallow를 사용하여 데이터를 유효성 검사하고 필요한 필드만 추출하는 예시 코드를 작성해보겠습니다.

from fastapi import FastAPI
from pydantic import BaseModel
from marshmallow import Schema, fields, ValidationError, validate

app = FastAPI()

class User(BaseModel):
    name: str
    age: int
    email: str

class UserSchema(Schema):
    name = fields.Str(required=True, validate=validate.Length(min=1, max=50))
    age = fields.Int(required=True, validate=validate.Range(min=0, max=150))
    email = fields.Email(required=True)

@app.post("/users/")
def create_user(user: User):
    try:
        data = UserSchema().dump(user)  # 데이터 유효성 검사와 필요한 필드만을 추출합니다.
        # 데이터 처리 로직 작성하기
        return {"message": "User created successfully", "data": data}
    except ValidationError as error:
        return {"message": "Validation error occurred", "errors": error.messages}

위 코드에서는 FastAPI의 app 객체를 사용하여 POST 메서드의 /users/ 엔드포인트를 등록하였습니다. 사용자 정보를 담고 있는 User 클래스를 정의하고, Marshmallow의 UserSchema 클래스를 사용하여 데이터 유효성 검사 및 필드 추출을 위한 스키마를 정의하였습니다.

create_user 메서드에서는 받아온 사용자 정보를 UserSchema를 사용하여 유효성 검사를 수행하고, 필요한 필드만을 추출하여 data 변수에 저장합니다. 이후에는 데이터 처리 로직을 작성하여 비즈니스 로직에 맞게 데이터를 처리하고, 결과를 반환합니다.

마치며

이번 포스트에서는 Marshmallow와 FastAPI를 함께 사용하여 실시간 데이터를 처리하는 방법에 대해 알아보았습니다. Marshmallow를 사용하여 데이터를 유효성 검사하고 필요한 필드만을 추출하여 FastAPI로 전달하면, 빠르고 안정적인 데이터 처리를 할 수 있습니다. FastAPI와 Marshmallow의 강력한 조합을 활용하여 더욱 효율적인 개발을 할 수 있도록 노력해봅시다.