[python] SQLAlchemy를 사용한 GraphQL API 개발

GraphQL은 쿼리 언어로서, 클라이언트가 원하는 데이터를 서버로 요청할 수 있는 기술입니다. 이번 글에서는 SQLAlchemy를 활용하여 Python으로 GraphQL API를 개발하는 방법에 대해 알아보겠습니다.

1. SQLAlchemy 설치 및 설정

먼저, SQLAlchemy를 설치해야 합니다. 다음 명령어를 사용하여 설치할 수 있습니다:

pip install sqlalchemy

SQLAlchemy는 다양한 데이터베이스 시스템과 호환되기 때문에, 사용할 데이터베이스에 맞는 드라이버도 설치해야합니다.

2. 데이터베이스 모델 생성

데이터베이스 모델을 생성하기 위해 SQLAlchemy의 ORM(Object Relational Mapper)을 사용합니다. ORM을 사용하면 데이터베이스의 테이블을 Python 클래스로 매핑할 수 있습니다.

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    age = Column(Integer)

위의 예제에서는 User 클래스를 users 테이블과 매핑하였습니다. 각각의 컬럼은 클래스의 속성으로 정의됩니다.

3. GraphQL 스키마 생성

GraphQL API를 사용하기 위해서는 GraphQL 스키마를 정의해야 합니다. 스키마는 어떤 타입의 쿼리와 뮤테이션을 사용할 수 있는지 정의합니다.

import graphene
from graphene_sqlalchemy import SQLAlchemyObjectType, SQLAlchemyConnectionField

class UserObject(SQLAlchemyObjectType):
    class Meta:
        model = User

class Query(graphene.ObjectType):
    users = graphene.List(UserObject)
    
    def resolve_users(self, info):
        return User.query.all()

schema = graphene.Schema(query=Query)

위의 예제에서는 UserObject 클래스를 User 모델과 매핑하여 GraphQL에서 사용할 수 있도록 합니다. 또한, Query 클래스를 만들어 users 필드를 정의하고 해당 필드의 값을 반환하는 resolve_users 메서드를 구현합니다. 마지막으로 schema를 생성하여 스키마를 완성합니다.

4. Flask와 함께 사용하기

마지막으로, Flask와 GraphQL을 함께 사용하여 API를 구성합니다.

from flask import Flask
from flask_graphql import GraphQLView

app = Flask(__name__)
app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql', schema=schema, graphiql=True))

if __name__ == '__main__':
    app.run()

위의 예제에서는 Flask 애플리케이션을 생성하고, /graphql URL에 GraphQLView를 등록합니다. schema는 이전에 생성한 스키마를 사용하고, graphiql=True로 설정하여 GraphiQL 웹 인터페이스를 사용할 수 있도록 합니다.

이제 python app.py 명령어를 실행하여 애플리케이션을 실행하고, http://localhost:5000/graphql에 접속하여 GraphQL API를 사용할 수 있습니다.

결론

이번 글에서는 SQLAlchemy를 사용하여 GraphQL API를 개발하는 방법에 대해 알아보았습니다. SQLAlchemy의 강력한 ORM 기능을 활용하여 데이터베이스 모델을 정의하고, GraphQL 스키마를 생성하여 API를 구성할 수 있습니다. GraphQL을 사용하면 클라이언트가 필요한 데이터만 요청할 수 있기 때문에 효율적인 API 개발이 가능합니다. SQLAlchemy와 GraphQL의 조합은 웹 개발에서 많은 유용성을 발휘할 수 있습니다.