[python] Marshmallow를 사용한 데이터 조회 및 페이징 처리 방법

Marshmallow는 파이썬의 직렬화 및 역직렬화 라이브러리로, 데이터를 객체와 JSON 데이터간에 변환하는 작업을 쉽게 처리할 수 있습니다. 이번 블로그에서는 Marshmallow를 사용하여 데이터를 조회하고 페이징 처리하는 방법에 대해 알아보겠습니다.

1. Marshmallow 설치하기

먼저 Marshmallow를 설치해야 합니다. 아래의 커맨드를 사용하여 Marshmallow를 설치할 수 있습니다.

pip install marshmallow

2. Schema 정의하기

Marshmallow는 데이터 객체를 직렬화 및 역직렬화하기 위해 Schema를 사용합니다. Schema는 데이터 객체의 필드와 해당 필드의 유효성 검사 규칙을 정의합니다.

from marshmallow import Schema, fields

class UserSchema(Schema):
    id = fields.Integer()
    name = fields.String()
    email = fields.Email()

위의 코드에서는 UserSchema라는 클래스를 정의하고, id, name, email 필드를 포함하도록 했습니다. fields 모듈은 다양한 유형의 필드를 제공하며, 필요에 따라 사용할 수 있습니다.

3. 데이터 조회 및 페이징 처리

데이터를 조회하고 페이징 처리하기 위해서는 아래와 같은 단계를 따를 수 있습니다.

3.1. 데이터 조회하기

먼저 데이터베이스에서 데이터를 조회해야 합니다. 예를 들어, 아래 코드는 SQLAlchemy를 사용하여 User 테이블에서 모든 사용자를 조회하는 예제입니다.

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

# 데이터베이스 연결 설정
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()

# 데이터 조회
users = session.query(User).all()

3.2. 데이터 직렬화하기

조회한 데이터를 Marshmallow Schema에 따라 직렬화해야 합니다. 아래 코드는 UserSchema를 사용하여 users 데이터를 직렬화하는 예제입니다.

user_schema = UserSchema(many=True)
serialized_data = user_schema.dump(users)

many=True 옵션을 사용하여 여러 개의 객체를 직렬화할 수 있습니다.

3.3. 페이징 처리하기

조회한 데이터를 페이징 처리해야 하는 경우, limitoffset 값을 적절히 설정하여 데이터를 가져올 수 있습니다. 아래 코드는 10개의 데이터를 가져오고 10개씩 페이징 처리하는 예제입니다.

page = 1
per_page = 10
start_index = (page - 1) * per_page
end_index = start_index + per_page

paged_data = serialized_data[start_index:end_index]

start_indexend_index 값을 계산하여 페이징 처리된 데이터를 가져옵니다.

결론

이번 블로그에서는 Marshmallow를 사용하여 데이터 조회 및 페이징 처리하는 방법에 대해 알아보았습니다. Marshmallow의 강력한 직렬화 및 역직렬화 기능을 활용하여 데이터를 효율적으로 처리할 수 있습니다. 사용자 정의 Schema를 만들어 필요에 따라 유효성 검사 규칙을 추가할 수도 있습니다.