[git] Graphql 4 ( 데이터 Fetching )

데이터 Fetching

그래프 큐엘을 통해서 들어오는 query, mutation 등을 resolver와 매칭 시켜준다.

Resolver란 ?

스키마의 필드를 어떤 데이터로 채워서 반환해줄지 결정해주는 함수이다. 즉, “Resolver”는 식별자를 “해결” 해주는 역할을 한다.


const users = [{ ... }]
// schema
type Query { 
	users: [User!]!
}
// resolver
const resolvers = { 
	Query :{
		users : () => return users;
	}
}

위의 resolvers 라는 객체는 resolver map 이라고 부른다. 이 resolver map은 특정 스키마 타입 <-> 각각의 resolver를 매핑 시켜주는 역할을 하게 된다.

리졸버 체인

쿼리를 통해서 특정 타입을 가져올때, 해당 객체가 다른 객체를 참조하고 있을 수 있다. 간단하게 예를 들자면,

type Library {
	branch: String!
	books: [Book!]
}

type Book {
	title: String!
	author: Author!
}
type Author {
  name: String!
}

type Query {
  libraries: [Library]
}

도서관들에 대한 정보를 가져오기 위해서 쿼리를 날린다고 가정했을때, 해당 타입의 객체는 Book 객체를, 그리고 Book 객체는 Author객체를 참조하고 있다.

누군가 아래의 쿼리를 날린다고 가정을 해보자.

query {
	libraries {
		books {
			author {
				name
			}
		}
	}
}

이때 리졸버의 동작이 연쇄적으로 chaining되기 때문에, resolver chiain이라고 부른다.

Query.libraries() -> Library.books() -> Book.author() -> Author.name()

리졸버는 위의 체이닝이 연쇄적으로 일어나게 된다.

이것은.. 연관관계가 아닌가 싶은데…

리졸버 인자 (arguments)

각각의 리졸버 함수는 4개의 인자를 받을 수 있다.

(parent, args, context, info)

Default Resolvers

(parent, 스키마의 구현.

#그래퓨큐엘/apollo-server/fetch