GraphQL은 2012년에 페이스북에서 개발되었고, 2015년에 오픈소스로 공개되었다.
GraphQL은 RESTful API와 달리, 클라이언트가 필요한 데이터를 정확하게 요청할 수 있는 쿼리 언어이다. 이를 통해 클라이언트는 서버로부터 불필요한 데이터를 받지 않고 필요한 데이터만을 요청할 수 있다. 따라서 GraphQL은 효율적인 데이터 전송 및 처리를 가능하게 한다.
💡 Query는 무엇인가요?
쿼리는 데이터베이스에서 정보를 가져오기 위해 사용되는 명령어나 질의문을 의미한다.
일반적으로 데이터베이스에 저장된 데이터를 검색하거나 필터링하는 데 사용된다.
RESTful API는 클라이언트와 서버 사이의 데이터 통신 방식 중 하나로, 클라이언트가 요청하는 데이터에 대한 사전 협약된 응답을 반환한다. 즉, 클라이언트는 서버에서 제공하는 API 문서를 참조하여 요청할 수 있는 URI와 리소스 타입, HTTP 메소드, 응답 포맷 등을 미리 알고 있어야 한다.

💡 RESTful API의 단점
Overfetching과 Underfetching이 발생한다.
즉, 한번의 API 호출로 필요한 모든 데이터 요청을 처리하지 못한다는 의미이다.
여러 번의 API 호출이 필요하므로 요청 횟수가 증가하거나, 불필요한 데이터까지 응답 받는 상황이 만들어진다.
반면, GraphQL은 클라이언트가 요청한 쿼리에 따라 서버에서 동적으로 응답을 생성한다. 클라이언트는 필요한 데이터만을 요청할 수 있으며, 서버는 해당 요청에 대해 필요한 데이터만을 반환한다. 따라서 GraphQL은 RESTful API보다 유연하게 데이터를 다룰 수 있다.
클라이언트는 서버에서 반환하는 데이터의 구조를 미리 알 필요가 없다. 그리고 클라이언트는 하나의 쿼리로 여러 리소스를 요청할 수 있기 때문에, RESTful API보다 적은 요청으로도 원하는 데이터를 가져올 수 있다.

아래 이미지를 보면 조금 더 명확한 차이를 알 수 있다.

기본 문법

인자를 활용한 문법

작업 타입과 작업 이름을 명시한 문법
query), 뮤테이션(mutation), 구독(subscription)
변수를 활용한 문법
$variableName 으로 변경하고, VARIABLES에 변수를 선언.

Reference
https://www.redhat.com/ko/topics/api/what-is-a-rest-api
https://graphql.org/
https://graphql-kr.github.io/learn/