컴포저블 디렉티브 사용하기
어떤 디렉티브가 다른 디렉티브의 동작을 수정할 수 있도록 합니다.
이 기능을 통해, 타입 불일치로 인해 일반적으로 사용할 수 없는 디렉티브(즉, 필드의 출력과 다른 입력을 가지기 때문에 필드에 적용할 수 없는 디렉티브)도 사용 가능하게 됩니다.
예를 들어, 필드 capabilities는 [String](문자열 배열)을 반환하지만, 디렉티브 @strUpperCase는 String을 받습니다. 따라서 다음 쿼리를 실행하면 타입 불일치로 인해 오류가 발생합니다:
query {
user(by: {id: 1}) {
capabilities @strUpperCase
}
}컴포저블 디렉티브를 사용하면, 디렉티브 @underEachArrayItem(요소 배열을 반복 처리하고 중첩된 디렉티브를 각 요소에 적용하는)을 활용하여 @strUpperCase가 실행되기 전 준비를 갖추고, 단일 요소(String 타입)를 받을 수 있게 됩니다.
위의 쿼리는 다음과 같이 구현할 수 있습니다:
query {
user(by: {id: 1}) {
capabilities
@underEachArrayItem
@strUpperCase
}
}메타 디렉티브
각 메타 디렉티브는 여러 디렉티브를 동시에 영향(또는 "중첩")시킬 수 있습니다. 어떤 디렉티브가 영향을 받는지는 인수 affectDirectivesUnderPos로 지정하며, 이는 양의 정수 배열을 받아 각각이 영향받는 디렉티브의 상대 위치를 정의합니다.
기본적으로 인수 affectDirectivesUnderPos의 기본값은 [1]이며, 이는 바로 옆의 디렉티브에 영향을 준다는 것을 의미합니다.
아래 예시에서는:
@underEachArrayItem이 메타 디렉티브입니다@strTranslate는@underEachArrayItem아래에 중첩되어 있습니다(암묵적 기본값affectDirectivesUnderPos: [1])
{
someField
@underEachArrayItem
@strTranslate
}아래 예시에서는, 대신:
@strTranslate와@strUpperCase가@underEachArrayItem아래에 중첩되어 있습니다(인수affectDirectivesUnderPos의 상대 위치[1, 2]로 지정됨)
{
someField
@underEachArrayItem(affectDirectivesUnderPos: [1, 2])
@strTranslate
@strUpperCase
}메타 디렉티브는 메타 디렉티브 안에 중첩될 수도 있습니다.
아래 예시에서는:
@underEachArrayItem이 최상위 메타 디렉티브입니다@underJSONObjectProperty는@underEachArrayItem아래에 중첩되어 있습니다@strUpperCase는@underJSONObjectProperty아래에 중첩되어 있습니다
query UppercaseEntriesInsideObject {
entries: _echo(value: [
{
text: "Hello my friends"
},
{
text: "How do you like this software so far?"
}
])
@underEachArrayItem
@underJSONObjectProperty(by: { key: "text" })
@strUpperCase
}설정
GraphQL 스키마에서 컴포저블 디렉티브를 활성화하거나 비활성화하려면, 설정 페이지의 「Composable Directives」 모듈로 이동하여 Enable composable directives? 체크박스를 선택하거나 해제하세요:

특정 엔드포인트에서 컴포저블 디렉티브를 활성화하거나 비활성화하려면, 해당 Schema Configuration의 「Composable Directives」 블록에서 원하는 옵션을 선택하세요:
