아키텍처
아키텍처표준 뮤테이션과 중첩 뮤테이션에 단일 코드 소스 사용하기

표준 뮤테이션과 중첩 뮤테이션에 단일 코드 소스 사용하기

GraphQL 서버는 두 가지 동작을 지원합니다.

  1. 기본값인 뮤테이션의 표준 동작
  2. 옵트인 방식의 중첩 뮤테이션

그 결과, 기본적으로 QueryRootMutationRoot 타입을 노출하며, 중첩 뮤테이션에 대해서는 단일 Root 타입 노출로 전환합니다.

리졸버를 제공할 때, 각 솔루션에 대해 두 개의 리졸버를 제공하고 싶지는 않을 것입니다. Root의 필드를 해석하는 데 사용되는 동일한 리졸버가 QueryRootMutationRoot의 필드도 해석할 수 있는 편이 더 바람직합니다.

구현 세부 사항

서버는 필드를 해석하기 위해 FieldResolver라는 객체를 사용하고, 실제 뮤테이션을 실행하기 위해 MutationResolver라는 객체를 사용합니다. 동일한 MutationResolver 객체는 서로 다른 필드를 구현하는 여러 FieldResolvers에서 참조할 수 있으므로, 코드는 한 번만 구현되고 SOLID 접근 방식에 따라 여러 곳에서 사용됩니다.

필드가 뮤테이션인지 아닌지는 FieldResolver가 해당 필드에 대해 MutationResolver 객체를 선언하는지 여부로 판단하며, 이는 resolveFieldMutationResolverClass 함수를 통해 수행됩니다.

예를 들어, 필드 Root.replyCommentAddCommentToCustomPostMutationResolver 객체를 제공합니다. 이 동일한 객체는 필드 Comment.reply에 의해서도 사용됩니다.

또한, FieldResolver를 코딩할 때 루트 필드는 Root 타입에만 추가됩니다. 표준 GraphQL 동작에서 서버는 이 구성을 가져와, 해당 필드가 뮤테이션인지 아닌지에 따라 MutationRoot 또는 QueryRoot에 자동으로 추가할 수 있습니다.

그 결과, 표준 동작과 중첩 뮤테이션 모두를 지원하는 코드에 단일 소스를 사용하고 있기 때문에, 추가 노력 없이 중첩 뮤테이션이 포함된 쿼리를 실행할 수 있습니다.