GraphQL은 API를 위한 쿼리 언어이자, 타입이 정의된 schema에 대해 그 쿼리에 응답하는 런타임입니다. 클라이언트는 원하는 필드를 정확히 기술한 하나의 요청을 보내고, 서버는 딱 그 형태만 반환합니다 — 그 이상도 이하도 아닙니다.
/users, /users/1/posts)을 노출하지만, GraphQL은 단일 /graphql endpoint를 노출하고 쿼리 본문으로 데이터를 선택합니다.# One request fetches a user AND their posts' titles — no second round trip
query {
user(id: "1") { # pick the user by id
name # only the fields we list come back
posts { # nested: follow the relationship in the same query
title
}
}
}
응답은 쿼리를 정확히 그대로 반영합니다: { "data": { "user": { "name": "...", "posts": [{ "title": "..." }] } } }.
면접관이 이 질문을 하는 이유는 여러분이 핵심 trade-off를 이해하는지 보기 위함입니다: GraphQL은 over/under-fetching을 없애고 클라이언트에 유연성을 주지만, 그 대가로 서버 측 복잡성(resolver, caching, query-cost 제어)이 커집니다. 문법만이 아니라 왜 그것이 존재하는지 아는 것은 적절한 도구를 고를 수 있다는 신호입니다.