GraphQL은 앱이 필요한 데이터를 정확히 요청하여 과도한 데이터 가져오기(overfetching)와 부족한 데이터 가져오기(underfetching)를 방지합니다. 🎯
전통적인 REST API는 필요 이상의 데이터를 가져오거나(overfetching), 관련 데이터를 위해 여러 번 요청해야 하는(underfetching) 한계가 있습니다. 🚧
GraphQL은 단일 요청으로 필요한 모든 데이터를 정확히 가져와 REST의 문제를 해결하며, 웹 및 모바일 앱의 효율성을 크게 향상시킵니다. ✨
GraphQL API는 데이터의 구조를 정의하는 '타입 정의(Type Definitions)'와 실제 데이터를 반환하는 '리졸버(Resolvers)'라는 두 가지 핵심 요소로 구성됩니다. 🏗️
타입 정의(Type Definitions)는 API가 다룰 수 있는 데이터 유형과 클라이언트가 요청할 수 있는 내용을 설명하는 데이터의 청사진(메뉴판) 역할을 합니다. 📜
리졸버(Resolvers)는 쿼리나 뮤테이션이 발생했을 때 실행되어, 타입 정의에 따라 실제 데이터를 가져오거나 반환하는 함수(요리사)입니다. 🧑🍳
기본적인 GraphQL 쿼리는 type Query { 필드명: 반환타입 } 형태로 정의되며, 코드 편집기에서 하이라이팅을 위해 #graphql 주석을 사용할 수 있습니다. 📝
GraphQL은 String, Boolean, Int, Float, ID의 다섯 가지 내장 스칼라 타입(기본 데이터 타입)을 제공하여 스키마 필드를 정의하는 데 사용됩니다. 🔢
개발자는 type 키워드를 사용하여 type Post { id: ID, title: String }와 같은 사용자 정의 복합 타입을 정의하고, 이를 Query 타입에 등록하여 사용할 수 있습니다. 🧩
오퍼레이션 인자(Operation Arguments)는 쿼리나 뮤테이션에 값을 전달하여 런타임에 동작을 맞춤 설정할 수 있게 해주며, 동적인 데이터 요청을 가능하게 합니다. ⚙️
GraphQL 서버 설정은 npm init, graphql, nodemon, apollo-server 패키지 설치, package.json 설정(type: module, dev 스크립트), 그리고 ApolloServer와 startStandaloneServer를 사용한 index.js 코드 작성을 포함합니다. 🚀