스키마 설정
스키마 설정멀티 필드 디렉티브 사용하기

멀티 필드 디렉티브 사용하기

멀티 필드 디렉티브란 하나의 필드뿐만 아니라 여러 필드에 적용할 수 있는 디렉티브입니다. 활성화하면 모든 디렉티브에 인수 affectAdditionalFieldsUnderPos가 추가되며, 디렉티브를 적용할 추가 필드의 상대적 위치를 지정할 수 있습니다.

예를 들어, 다음 쿼리에서 디렉티브 @strTranslate는 필드 content에만 적용됩니다:

{
  posts {
    excerpt
    content @strTranslate
  }
}

필드 excerpt에도 디렉티브 @strTranslate를 적용하려면, 디렉티브 인수 affectAdditionalFieldsUnderPos에 값 [1]을 추가합니다(1은 디렉티브 @strTranslate로부터 필드 excerpt까지의 상대적 위치입니다):

{
  posts {
    excerpt
    content
      @strTranslate(
        affectAdditionalFieldsUnderPos: [1]
      )
  }
}

추가할 수 있는 필드 수에는 제한이 없습니다. 다음 쿼리에서는 dateStr도 번역 대상에 포함됩니다:

{
  posts {
    dateStr
    excerpt
    content
      @strTranslate(
        affectAdditionalFieldsUnderPos: [1, 2]
      )
  }
}

디렉티브가 기본적으로 적용되는 필드(위의 모든 쿼리에서 content 등)는 인수에 지정할 필요가 없습니다.

위 쿼리에서 디렉티브 @strTranslate로부터 이전 필드까지의 상대적 위치는 다음과 같습니다:

  • 위치 2: dateStr
  • 위치 1: excerpt
  • 위치 0: content <= 암묵적으로, 항상 적용됨

사용 사례

이 기능에는 두 가지 주요 사용 사례가 있습니다:

  1. 성능
  2. 확장 기능

성능

외부 API에 대한 호출을 실행하는 디렉티브의 경우, 요청 수가 적을수록 더 빠르게 처리됩니다.

이는 디렉티브 @strTranslate의 경우에 해당합니다. 이 디렉티브는 Google Translate API에 연결됩니다. 일반적으로 게시글 목록의 필드 contentexcerpt를 번역하려면 다음 쿼리를 사용합니다:

query {
  posts {
    excerpt @strTranslate
    content @strTranslate
  }
}

@strTranslate를 두 번 추가하면, 이 쿼리는 Google Translate API에 두 번 요청을 실행합니다(excerpt의 모든 값을 번역하기 위해 한 번, content의 모든 값을 위해 한 번).

Multi-Field Directives 기능을 사용하면, 아래 쿼리도 contentexcerpt 두 필드의 모든 값을 번역하지만, Google Translate API에는 단 한 번의 요청만 실행합니다:

query {
  posts {
    excerpt
    content
      @strTranslate(
        affectAdditionalFieldsUnderPos: [1]
      )
  }
}

확장 기능

추가 필드를 받는 디렉티브는 추가적인 계산을 제공할 수 있습니다.

예를 들어, 디렉티브 @export는 일반적으로 로그인한 사용자의 이름과 같이 단일 필드의 값을 내보냅니다:

query GetLoggedInUserName {
  me {
    name @export(as: "userName")
  }
}

인수 affectAdditionalFieldsUnderPos를 사용하면, @export는 여러 필드를 받아 해당 필드들을 항목으로 포함하는 딕셔너리를 내보냅니다:

query GetLoggedInUserNameAndSurname {
  me {
    name
    surname
      @export(
        as: "userProps"
        affectAdditionalFieldsUnderPos: [1]
      )
  }
}

@export는 변수 $userProps에 다음 값을 생성합니다:

{
  "name": "Leo",
  "surname": "Loso"
}

설정

GraphQL 스키마에서 멀티 필드 디렉티브를 활성화하거나 비활성화하려면, 설정 페이지의 「Multi-Field Directives」 모듈로 이동하여 Enable multi-field directives? 체크박스를 선택하거나 해제합니다:

Multi-Field Directives 설정
Multi-Field Directives 설정

특정 엔드포인트에서 멀티 필드 디렉티브를 활성화하거나 비활성화하려면, 해당 Schema Configuration의 블록 「Multi-Field Directives」에서 원하는 옵션을 선택합니다:

Schema Configuration의 Multi-Field Directives
Schema Configuration의 Multi-Field Directives