내향성 쿼리란?
GraphQL을 사용하기 위해서는 우리가 서버에 쿼리할 수 있는 schema에 대한 정보가 필요하다. schema에 대한 정보가 없다면 어떤 데이터를 받아올 수 있는지를 알 수 없기 때문이다. GraphQL은 introspective query를 통해 schema에 대한 정보를 제공한다. introspective query를 사용하면 우리는 편하게 GraphQL을 사용할 수 있게 된다. 우리가 GraphiQL 사이트에서 ctrl+space를 누르면 자동완성이 되었었는데, 이 자동완성 정보들 또한 내향성 쿼리를 통해 제공된다. 즉, 정리하면 우리는 introspective query를 통해 어떤 schema가 서버에서 제공되는지 알 수 있다.
내향성 쿼리의 종류와 네이밍
내향성 쿼리는 __schema 또는 __type이라는 필드로 시작되는 쿼리이다. 보통 프로그래밍에서 private 한 함수를 나타내기 위해 _을 앞에 쓰는 것처럼 GraphQL은 _을 두번 붙인 __을 예약어로 사용해 내향성 쿼리를 나타낸다. 즉 앞에 __가 붙여져 있으면 내향성 쿼리란 것을 뜻한다.
내향성 쿼리의 내부 살펴보기
내부에는 우리가 쿼리할 수 있는 정보들을 담고 있다. 예를 들어 다음의 쿼리를 실행해보자. 이 쿼리는 스키마의 타입들에 대해 이름과 설명, 해당 타입에 포함되는 필드들을 출력하는 쿼리이다.
query QuerySchemas {
__schema {
types{
name
description
fields{
name
description
}
}
}
}
위 쿼리의 결과는 다음과 같다. Root 타입에 속한 필드들 중에 우리가 그림1에서 쿼리했던 film이 있는 것을 확인할 수 있다.
위 그림1에서의 자동완성 또한 이러한 값들을 이용해 자동완성을 시킨다.
하나의 타입에 대한 필드 알아보기
위의 쿼리에서는 모든 타입에 대한 쿼리를 출력했다. 만약 하나의 타입에 대한 정보만이 필요하다면 __type(name: $name) 필드를 사용하면 된다.
query QuerySchemas($name : String) {
__type(name : $name){
fields{
name
description
}
}
}
예를들어 Root 타입 필드들을 조회하고 싶다면 다음과 같이 사용하면 된다. 그러면 Root 타입의 필드들만 모두 출력된다.