Resolver 유형
Spring Boot에서 GraphQL 쿼리 요청을 처리하기 위해선 세 유형의 Resolver(interface타입)을 구현할 수 있습니다.
- GraphQLResolver<T>
- query, mutation 요청 구현
- 스키마의 input 타입에 대하여 보다 복잡한 요청이 필요할 때 사용
- GraphQLQueryResolver
- query 요청을 담당
- GraphQLMutationResolver
- mutation 요청을 담당
그런데 GraphQLResolver<T>의 복잡한 요청이란 무엇일까요? 나머지 두 Resolver 와 어떻게 다른 걸까요?
GraphQLResolver<T> 알아보기
예시)
GraphQL 스키마
type Person {
name: String!
age: Int
complexValue: Int!
}
type Query {
hello: String!
bye: String!
person(who: String!): Person!
}
Resolver 구현
@Component
public class PersonResolver implements GraphQLResolver<Person> {
public int getComplexValue(Person person) {
System.out.println("Fetching value for person '" + person.getName() + "'");
return veryComplexFetchingOfValue(person.getName());
}
// private 입니다.
private int veryComplexFetchingOfValue(String name) {
if (name.equals("Muuu")) {
return 42;
}
return 3;
}
}
GraphQLResolver<T> 인터페이스는 Object Resolver 라고도 하는데, 이를 정의하고자 할 때는 resolve 하고 싶은 대상에 기반한 인터페이스를 구현해야 합니다.
위 예시에선 GraphQLResolver<Person>을 구현하고 있는데, 이는 해당 resolver가 정의한 Person 객체로부터의 모든 resolver임을 뜻하며 이를 사용하여 Person에 대한 query 또는 mutation 요청을 받아 로직을 수행할 수 있습니다.
정리
- GrapyQLResolver<Person>에 Person이 들어간 것은 쿼리문에서 input으로 Person을 사용하는 요청을 했을 때 이 인터페이스 구현체에서 처리하게 된다는 의미입니다.
- 이를 반영한 첫번째 메서드에서 Person 타입의 parameter가 들어간 것을 볼 수 있습니다.
- 즉, 복잡한 요청이란 요청하는 쿼리문을 query, mutation 구분 없이 특정 input 타입을 기준으로 구분하는 것을 의미하고 이 때 GraphQLResolver<T>를 이용 한다고 보면 될 것 같습니다!
참고 링크 : https://karl.run/2018/09/05/spring-boot-schema-first-graphql/
'GraphQL' 카테고리의 다른 글
Spring Boot서버에서 GraphQL요청 처리하기 (0) | 2021.05.17 |
---|---|
GraphQL 명명 Convention (0) | 2021.05.17 |
GraphQL 사용하면서 느낀 장단점(+ Spring Boot) (0) | 2021.05.17 |
댓글