GraphQL은 2015년 Facebook이 오픈소스로 공개한 API 쿼리 언어 및 런타임이다. 클라이언트가 필요한 데이터를 정확히 요청할 수 있어 Over-fetching/Under-fetching 문제를 해결한다.
REST vs GraphQL
REST — Over-fetching (필요 이상으로 가져옴):
GET /users/1
→ { id, name, email, phone, address, created_at, ... }
(name만 필요했는데 모든 필드를 받음)
GraphQL — 정확히 필요한 것만:
query {
user(id: 1) {
name
email
}
}
→ { name: "Alice", email: "alice@example.com" }
스키마 정의
graphql
type User {
id: ID!
name: String!
email: String!
posts: [Post!]!
}
type Post {
id: ID!
title: String!
content: String!
author: User!
}
type Query {
user(id: ID!): User
users: [User!]!
}
type Mutation {
createUser(name: String!, email: String!): User!
deleteUser(id: ID!): Boolean!
}
Apollo Server (Node.js)
javascript
const { ApolloServer, gql } = require('@apollo/server');
const resolvers = {
Query: {
user: (_, { id }) => users.find(u => u.id === id),
users: () => users
},
Mutation: {
createUser: (_, { name, email }) => {
const user = { id: Date.now(), name, email };
users.push(user);
return user;
}
}
};
const server = new ApolloServer({ typeDefs, resolvers });
관련 개념
참고문헌
- •GraphQL 공식 문서: graphql.org