REST란 Representational State Transfer의 약자로서 자원을 이름으로 구분해서 자원의 상태(정보)를 주고받는 것을 의미한다.
더 구체적으로 알아보자면 자원에 HTTP URI를 부여하고, HTTP Method(GET,POST,PUT,DELETE)를 통해서 해당 자원에 대한 CRUD Operation을 적용한다.
참고) CRUD Operation이란?
Create : 생성(POST)
Read : 조회(GET)
Update : 수정(PUT)
Delete : 삭제(DELETE)
그래서 REST-API는 REST의 원리를 따르는 API라고도 할 수 있는데 그전에 API에 대해 알아야한다.
Application Programming Interface의 약자로서 클라이언트가 리소스를 요청할 수 있도록 서버에서 제공하는 인터페이스이다. 그리고 인터페이스는 쉽게 말해서 소통창구라고 이해하면 편한다.
그래서 REST-API는 다시 말해서 REST기반으로 API를 구현하는 것 이라고 할 수 있다.
REST-API를 이해하기 쉽고 사용하기 쉽게 만드는 것이 목적이다.
RESTful의 목적은 이해 및 호환성을 높이는 것이 목표이므로 성능이 중요한 상황에서는 꼭 RESTful하게 API를 만들지 않아도 된다.
GraphQL은 페이스북에서 만든 쿼리 언어라고 한다. 쿼리언어는 간단하게 말해서 정보를 얻기 위해 보내는 질의문을 만들기 위해 사용되는 언어이다. 대표적으로 알려져있는 쿼리 언어는 데이터베이스에서 사용되는 SQL이다. GraphQL은 클라이언트가 서버로부터 데이터를 가져오는 것이 목적이다.
GraphQL은 QUERY와 MUTATION으로 이루어져 있다. 즉 ,데이터를 조회만 할 때는 QUERY(REST-API의 GET), 데이터를 조작할 때는 MUTAION(REST-API의 POST,PUT,DELETE)을 이용한다.
- HTTP 요청 횟수를 줄일 수 있다.
GraphQL은 원하는 정보를 하나의 쿼리에 담아서 요청이 가능하므로 HTTP 요청 횟수를 줄일 수 있다.
- HTTP 응답의 사이즈를 줄일 수 있다.
REST-API는 응답의 형태가 정해져있기 때문에 필요한 정보만 요청하는 것이 힘든반면 GraphQL은 원하는 대로 정보를 요청할 수 있다.
REST-API는 보통 여러개의 엔드포인트(API가 서버에서 자원(리소스)에 접근할 수 있도록 하는 URL)를 가지고 각각의 엔드포인트가 동일한 response(응답)을 반환한다.
GraphQL은 보통 하나의 엔드포인트에서 쿼리에 따라서 다른 response(응답)을 반환한다.
아래의 이미지는 차이점을 잘 보여주는 이미지이다.

이미지 출처 : https://eocoding.tistory.com/105
참고한 사이트
https://eocoding.tistory.com/105
https://hahahoho5915.tistory.com/63
https://hceaan.tistory.com/134