GraphQL
기술노트
📜 GraphQL
GraphQL은 페이스북(현 메타)에서 개발한 API를 위한 쿼리 언어(Query Language)이자, 해당 쿼리를 처리하기 위한 런타임 환경입니다. 클라이언트가 서버로부터 필요한 데이터만 정확하게 요청하고 응답받을 수 있도록 해주는 것이 가장 큰 특징입니다.
REST API가 정해진 메뉴만 제공하는 식당이라면, GraphQL은 원하는 재료와 양을 직접 선택해서 주문할 수 있는 샐러드 바와 같습니다.
🤔 GraphQL은 왜 필요한가?
기존의 REST API는 서버가 미리 정의해둔 고정된 데이터 구조를 응답으로 보내줍니다. 이로 인해 두 가지 문제가 발생할 수 있습니다.
- 오버페칭 (Over-fetching) : 클라이언트가 필요하지 않은 정보까지 서버가 모두 보내주는 문제입니다. (예: 사용자의 이름만 필요한데, 주소, 나이 등 모든 정보를 받음)
- 언더페칭 (Under-fetching) : 클라이언트가 원하는 정보를 얻기 위해 여러 번의 API 요청을 해야 하는 문제입니다. (예: 게시글 정보를 받은 뒤, 각 댓글 정보를 얻기 위해 다시 여러 번 요청함)
GraphQL은 클라이언트가 쿼리를 통해 필요한 데이터의 구조를 직접 정의함으로써, 이러한 문제들을 해결합니다.
⚙️ GraphQL의 특징
- 하나의 엔드포인트 (Single Endpoint) : REST API처럼 여러 개의 URL을 갖지 않고, 보통 `/graphql` 이라는 단일 엔드포인트로 모든 요청을 처리합니다.
- 강력한 타입 시스템 (Strongly Typed) : API의 모든 데이터는 스키마 정의 언어(SDL)를 통해 명확한 타입으로 정의됩니다. 이를 통해 API의 구조를 쉽게 파악하고, 오류를 사전에 방지할 수 있습니다.
- 클라이언트 중심 : 클라이언트가 데이터의 요구사항을 결정하므로, 프론트엔드 개발의 유연성과 효율성이 크게 향상됩니다.
💡 개발자 핵심 Point
- GraphQL은 클라이언트가 필요한 데이터의 형태를 직접 정의하여 요청하는 새로운 API 패러다임입니다.
- 다양한 종류의 데이터를 한 번의 요청으로 가져와야 하는 모바일 앱이나 복잡한 UI를 가진 웹 애플리케이션에 특히 유용합니다.
- REST API를 완전히 대체하는 것이 아니라, 서로 다른 장단점을 가진 상호 보완적인 관계입니다. 간단한 CRUD API는 REST가 더 적합할 수 있고, 복잡한 데이터 조회가 필요할 때는 GraphQL이 더 효율적일 수 있습니다.
- GraphQL을 시작하려면 스키마(Schema), 쿼리(Query), 뮤테이션(Mutation), 리졸버(Resolver)와 같은 핵심 개념에 대한 이해가 필요합니다.