resolver는 schema의 단일 필드에 대한 값을 만들어 내는 함수입니다. GraphQL은 쿼리를 필드 단위로 순회하면서 각 필드에 맞는 resolver를 호출합니다 — 이 순회가 바로 resolver 체인입니다.
resolver의 네 가지 인자
모든 resolver는 (parent, args, context, info)를 받습니다:
resolver는 schema의 단일 필드에 대한 값을 만들어 내는 함수입니다. GraphQL은 쿼리를 필드 단위로 순회하면서 각 필드에 맞는 resolver를 호출합니다 — 이 순회가 바로 resolver 체인입니다.
모든 resolver는 (parent, args, context, info)를 받습니다:
user.posts를 resolve할 때의 User 객체).{ id: "1" }).const resolvers = {
Query: {
// top-level: parent is undefined; read args, use context for data access
user: (_parent, args, ctx) => ctx.db.users.findById(args.id),
},
User: {
// runs for EACH user; parent is the resolved user object
posts: (parent, _args, ctx) => ctx.db.posts.findByAuthor(parent.id),
// no resolver needed for 'name' -> the default resolver reads parent.name
},
};
필드에 명시적 resolver가 없으면 GraphQL은 단순히 parent[fieldName]을 읽는 default resolver를 사용합니다. 그래서 평범한 객체의 scalar 필드는 보통 코드가 필요 없습니다.
resolver가 필드 단위로, 위에서 아래로, parent 체인을 따라 실행된다는 것을 이해하면, 중첩 데이터가 어떻게 조립되는지와 순진한 중첩 resolver가 왜 N+1 문제를 일으키는지 — 자연스러운 후속 면접 질문 — 를 모두 설명할 수 있습니다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기