GraphQL을 사용하면 서버 개발자는 특정 엔드포인트를 구현하거나 최적화하는 작업보다는 사용 가능한 데이터를 서술하는 데에 보다 집중할 수 있게 됩니다.
단순히 스키마를 서술하고, 해당 스키마로 부터 데이터를 불러올 수 있는 쿼리 언어를 서술하는 역할만을 맡지 않습니다. GraphQL은 실행 알고리즘에 따라 각 쿼리를 결과로 변환합니다.
이 알고리즘의 핵심은 꽤 간단합니다. 쿼리의 모든 필드가 순회되면서 각 필에서 대하여 리졸버가 실행됩니다.
query {
author(id: "abc") {
posts {
title
content
}
}
}
서버는 제일 먼저, 쿼리 내의 각 필드마다 대응하는 타입을 연관 지을 수 있습니다.
query: Query {
author(id: "abc"): Author {
posts: [Post] {
title: String
content: String
}
}
}
이제 서버 측에서는 각 필드에 필요한 리졸버를 쉽게 파악할 수 있습니다. 쿼리 실행은 쿼리 타입에서 시작하여 너비-우선 탐색으로 이루어집니다. 각각의 필드 리졸버를 거친 다음 모든 결과를 모아서 올바른 형태로 정리한 뒤 이를 반환 합니다.
만약 배열 데이터의 필드를 만났을 때 일일히 리졸버를 반복하며 값을 모을까요? 모든 리졸버 실행을 기다렸다가 한번에 in 조회로 값을 모을 수 있을 것입니다.