[python] Django와 GraphQL 연동 방법은 어떻게 되는가?

Django는 Python으로 작성된 웹 애플리케이션 프레임워크이며, GraphQL은 데이터 쿼리 언어 및 런타임입니다. Django와 GraphQL을 연동하여 강력한 웹 애플리케이션을 개발할 수 있습니다.

필수 패키지 설치

Django와 GraphQL를 연동하기 위해서는 몇 가지 패키지를 설치해야 합니다. 가상 환경에서 다음 명령어를 실행하여 설치합니다.

pip install django graphene-django

GraphQL 설정

  1. Django 프로젝트의 settings.py 파일을 엽니다.
  2. INSTALLED_APPS'graphene_django'를 추가합니다.

    INSTALLED_APPS = [
        # ...
        'graphene_django',
        # ...
    ]
    
  3. settings.py 파일의 맨 아래에 다음 내용을 추가합니다.

    GRAPHENE = {
        'SCHEMA': 'myproject.schema.schema',
    }
    

    myproject는 본인의 프로젝트명으로 변경해야 합니다.

  4. Django 프로젝트의 루트 디렉토리에 schema.py 파일을 생성합니다.
  5. schema.py 파일에 다음 내용을 작성합니다.

    import graphene
    
    class Query(graphene.ObjectType):
        # 여기에 Query 타입 필드들을 추가합니다.
        pass
    
    schema = graphene.Schema(query=Query)
    

    Query 타입 필드들은 실제 데이터를 조회하기 위한 GraphQL 쿼리들을 정의하는 곳입니다.

  6. Django 프로젝트의 urls.py 파일을 엽니다.
  7. 다음 내용을 추가합니다.

    from django.urls import path
    from graphene_django.views import GraphQLView
    
    urlpatterns = [
        # ...
        path('graphql', GraphQLView.as_view(graphiql=True)),
        # ...
    ]
    

    이제 Django 애플리케이션의 http://localhost:8000/graphql로 접속하면 GraphQL IDE를 사용할 수 있습니다.

GraphQL 스키마 작성

schema.py 파일에서는 GraphQL 스키마를 작성해야 합니다. 필요한 데이터에 따라 Query 필드를 정의하고, 해당 필드의 리졸버 함수를 작성합니다. 리졸버 함수는 실제 데이터를 조회하고 반환하는 로직을 구현합니다. 예를 들어, User 객체를 조회하는 GraphQL 쿼리를 작성하려면 다음과 같이 작성할 수 있습니다.

class Query(graphene.ObjectType):
    users = graphene.List(UserType)

    def resolve_users(self, info):
        return User.objects.all()

UserTypeUser 객체를 GraphQL 타입으로 변환하는 역할을 합니다.

GraphQL 데이터 수정

GraphQL은 데이터를 조회하는 것뿐만 아니라, 데이터를 수정하기 위한 기능도 제공합니다. Mutation을 사용하여 데이터를 생성, 수정, 삭제할 수 있습니다. schema.py 파일에서 Mutation 필드를 정의하고 해당 필드의 리졸버 함수를 작성합니다. 예를 들어, 새로운 User를 생성하는 GraphQL Mutation을 작성하려면 다음과 같이 작성할 수 있습니다.

class CreateUser(graphene.Mutation):
    class Arguments:
        username = graphene.String(required=True)
        email = graphene.String(required=True)
 
    success = graphene.Boolean()
 
    def mutate(self, info, username, email):
        user = User(username=username, email=email)
        user.save()
        return CreateUser(success=True)
 
class Mutation(graphene.ObjectType):
    create_user = CreateUser.Field()

위의 코드에서 CreateUserUser 객체를 생성하고, Mutationcreate_user 필드를 추가하는 역할을 합니다. 필요한 경우 CreateUser에서 데이터의 유효성 검사를 수행할 수도 있습니다.

마무리

Django와 GraphQL을 연동하여 강력하고 유연한 웹 애플리케이션을 개발할 수 있습니다. 이 문서에서는 Django와 GraphQL 연동 방법을 간단하게 소개했지만, 더욱 깊이있는 사용법과 고급 기능을 익히고 싶다면 각 패키지의 공식 문서를 참고하시기 바랍니다. Happy coding!