스키마 설정
스키마 설정컴포저블 디렉티브 사용하기

컴포저블 디렉티브 사용하기

어떤 디렉티브가 다른 디렉티브의 동작을 수정할 수 있도록 합니다.

이 기능을 통해, 타입 불일치로 인해 일반적으로 사용할 수 없는 디렉티브(즉, 필드의 출력과 다른 입력을 가지기 때문에 필드에 적용할 수 없는 디렉티브)도 사용 가능하게 됩니다.

예를 들어, 필드 capabilities[String](문자열 배열)을 반환하지만, 디렉티브 @strUpperCaseString을 받습니다. 따라서 다음 쿼리를 실행하면 타입 불일치로 인해 오류가 발생합니다:

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? 체크박스를 선택하거나 해제하세요:

Composable Directives 설정
Composable Directives 설정

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

Schema Configuration의 Composable Directives
Schema Configuration의 Composable Directives