[REST API vs GraphQL 차이점]


REST(ul) API vs GraphQL?

REST API 란?

REST API 과 GraphQL의 차이점?

  1. GraphQL API는 주로 하나의 Endpoint를 사용한다.
  2. GraphQL API는 요청할 때 사용한 Query 문에 따라 응답의 구조가 달라진다.
  3. GraphQL API는 유연하다 백엔드에서 지정해놓는 틀이 거이 없기 때문이다.
    • GraphQL 은 뷔페 음식, RESTful API는 세트메뉴와 같다. 뷔페는 내가 먹고 싶은 것만 먹을 수 있지만 세트메뉴는 내가 필요하지 않은 것도 들어있다.

RESTful 장점

RESTful 단점

  1. 표준이 존재하지 않는다.
  2. 사용할 수 있는 메소드가 4가지 밖에 없다.
  3. 구형의 브라우저가 아직 지원하지 못하는 부분이 존재한다.
  4. Overfetcing, 즉 특정 데이터만 불러오고 싶은데 불필요한 데이터가 불러온다.
  5. Underfetcing, 즉 Resource 종류 별로 요청을 해야해서 요청횟수가 많아진다.

GraphQL 장점

  1. HTTP 요청 횟수를 줄일 수 있다. - Underfetcing
    • RESTful 은 각 Resource 종류 별로 요청을 해야하고, 따라서 요청 횟수가 필요한 Resource 의 종류에 비례한다.
    • 반면 GraphQL 은 원하는 정보를 하나의 Query 에 모두 담아 요청하는 것이 가능하다.
  2. HTTP 응답의 Size 를 줄일 수 있다. - Overfetcing
    • RESTful 은 응답의 형태가 정해져있고, 따라서 필요한 정보만 부분적으로 요청하는 것이 힘들다.
    • 반면 GraphQL 은 원하는 대로 정보를 요청하는 것이 가능하다.

튜토리얼 영상

GraphQL 단점

  1. File 전송 등 Text 만으로 하기 힘든 내용들을 처리하기 복잡하다.
  2. 고정된 요청과 응답만 필요할 경우에는 Query 로 인해 요청의 크기가 RESTful API 의 경우보다 더 커진다.
  3. 재귀적인 Query 가 불가능하다. (결과에 따라 응답의 깊이가 얼마든지 깊어질 수 있는 API 를 만들 수 없다.)

REST API, GraphQL 선택 기준

GraphQL

* 서로 다른 모양의 다양한 요청들에 대해 응답할 수 있어야 할 때
* 대부분의 요청이 CRUD(Create-Read-Update-Delete) 에 해당할 때
- 사용 프로젝트 예시 : Data 양이 많은 데이터 앱들(코로나 현황앱, 기상청 기후알림 앱 등), Overfetcing&Underfetcing 피하기 위함

RESTful

* HTTP 와 HTTPs 에 의한 Caching 을 잘 사용하고 싶을 때 (GraphQL도 캐싱이 가능하다)
* File 전송 등 단순한 Text 로 처리되지 않는 요청들이 있을 때
* 요청의 구조가 정해져 있을 때
- 사용 프로젝트 예시 : 회원정보(가입 및 로그인)를 caching 해야하는 앱, 혹은 URL 파라미터가 확실한 게시판 앱 등

GraphQL-vs-REST-Infographic</img>


○ 참조 문서 및 사이트