[파이썬] aiohttp GraphQL과 `aiohttp` 연동

GraphQL은 API를 개발하는 데 사용되는 강력한 쿼리 언어와 런타임입니다. aiohttp는 asyncio 기반의 Python 웹 프레임워크로, 비동기 웹 애플리케이션을 구축하는 데 사용됩니다.

이 블로그 포스트에서는 aiohttp와 GraphQL을 함께 사용하여 비동기 웹 애플리케이션과 GraphQL API를 구축하는 방법을 다루겠습니다.

aiohttp 설치하기

먼저, aiohttp를 설치해야 합니다. 다음 명령어를 사용하여 aiohttp를 설치합니다:

pip install aiohttp

GraphQL 서버 설정하기

GraphQL 서버를 구축하기 위해 aiohttp-graphql라이브러리를 사용할 수 있습니다. 다음 명령어를 사용하여 aiohttp-graphql을 설치합니다:

pip install aiohttp-graphql

aiohttp-graphql은 aiohttp 애플리케이션에 GraphQL 인터페이스를 추가하는 데 사용됩니다. 다음과 같이 간단한 예제를 살펴보겠습니다:

from aiohttp import web
from aiohttp_graphql import GraphQLView
import graphene

class Query(graphene.ObjectType):
    hello = graphene.String()

    def resolve_hello(self, info):
        return "Hello, World!"

schema = graphene.Schema(query=Query)
app = web.Application()
app.router.add_route('*', '/graphql', GraphQLView(schema=schema, graphiql=True))

web.run_app(app)

위 코드에서는 aiohttp로 간단한 GraphQL 서버를 설정하고 실행하는 방법을 보여줍니다. Query 클래스는 hello 필드를 가지며, 해당 필드는 “Hello, World!”를 반환하는 간단한 예제입니다. GraphQLView를 사용하여 GraphQL 인터페이스를 생성하며, graphiql=True를 통해 GraphiQL 인터페이스를 사용할 수 있도록 설정합니다.

GraphQL 스키마 작성하기

GraphQL 스키마는 데이터 모델링과 쿼리 정의에 사용됩니다. graphene 라이브러리를 사용하여 간단한 스키마를 작성할 수 있습니다. 다음과 같은 예제를 살펴보겠습니다:

import graphene

class Query(graphene.ObjectType):
    hello = graphene.String()

    def resolve_hello(self, info):
        return "Hello, World!"

schema = graphene.Schema(query=Query)

위 코드에서는 Query 클래스를 정의하고, hello 필드를 가진 스키마를 생성합니다. resolve_hello 함수는 hello 필드에 대한 실제 데이터를 반환합니다.

GraphQL 쿼리 실행하기

GraphQL 쿼리를 실행하려면 aiohttp를 사용하여 HTTP POST 요청을 보내야 합니다. 다음과 같은 예제를 살펴보겠습니다:

import aiohttp

async def execute_graphql_query(query):
    data = {'query': query}
    async with aiohttp.ClientSession() as session:
        async with session.post('http://localhost:8080/graphql', json=data) as response:
            result = await response.json()
            return result

위 코드에서는 execute_graphql_query 함수를 정의하여 query를 인자로 받고, 해당 쿼리를 GraphQL 서버에 전송하는 역할을 합니다. aiohttp의 ClientSession을 사용하여 비동기 HTTP POST 요청을 보내고, 응답을 JSON 형식으로 받아옵니다.

결론

이러한 방법을 사용하여 aiohttp와 GraphQL을 함께 사용하여 강력한 비동기 웹 애플리케이션과 GraphQL API를 구축할 수 있습니다. aiohttp-graphql을 사용하면 간단하게 GraphQL 인터페이스를 구축할 수 있으며, graphene을 활용하여 스키마를 정의할 수 있습니다. aiohttp의 asyncio 기능과 GraphQL의 강력한 쿼리 언어를 결합하여 더 유연하고 확장 가능한 웹 애플리케이션을 개발할 수 있습니다.