멀티 필드 디렉티브 사용하기
멀티 필드 디렉티브란 하나의 필드뿐만 아니라 여러 필드에 적용할 수 있는 디렉티브입니다. 활성화하면 모든 디렉티브에 인수 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<= 암묵적으로, 항상 적용됨
사용 사례
이 기능에는 두 가지 주요 사용 사례가 있습니다:
- 성능
- 확장 기능
성능
외부 API에 대한 호출을 실행하는 디렉티브의 경우, 요청 수가 적을수록 더 빠르게 처리됩니다.
이는 디렉티브 @strTranslate의 경우에 해당합니다. 이 디렉티브는 Google Translate API에 연결됩니다. 일반적으로 게시글 목록의 필드 content와 excerpt를 번역하려면 다음 쿼리를 사용합니다:
query {
posts {
excerpt @strTranslate
content @strTranslate
}
}@strTranslate를 두 번 추가하면, 이 쿼리는 Google Translate API에 두 번 요청을 실행합니다(excerpt의 모든 값을 번역하기 위해 한 번, content의 모든 값을 위해 한 번).
Multi-Field Directives 기능을 사용하면, 아래 쿼리도 content와 excerpt 두 필드의 모든 값을 번역하지만, 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? 체크박스를 선택하거나 해제합니다:

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