IT 공부

REST와 GraphQL

Choony 2024. 1. 8. 01:43

REST와 GraphQL은 인터넷을 통한 데이터 교환을 위한 API를 설계하는 두 가지 접근 방식이다.

REST를 사용하면 클라이언트 애플리케이션이 HTTP METHOD(GET, PUT, UPDATE, DELETE ..)를 사용하여 서버와 데이터를 교환할 수 있으며, 이는 인터넷의 표준 통신 프로토콜이다. 반면 GraphQL은 클라이언트 애플리케이션이 원격 서버로부터 데이터를 요청하는 방법에 대한 사양을 정의하는 API 쿼리 언어이다. 

 

REST와 GraphQL의 공통점

  • 기반 통신 프로토콜이 HTTP 이다.
  • 둘 다 유사한 데이터 형식을 지원하면 대부분 JSON이 사용된다.
  • 모두 캐싱을 지원한다.

REST와 GraphQL의 차이점

  • REST 요청 작동에 사용되는 요소는 다음과 같다.
    • HTTP METHOD
    • HTTP METHOD를 작동시킬 리소스를 식별하는 URL
  • GraphQL 요청 작동에 사용되는 요소는 다음과 같다.
    • 읽기 전용 데이터를 가져오기 위한 쿼리
    • 데이터 수정을 위한 변형
  • 내부적으로 GraphQL은 모든 클라이언트 요청을 POST HTTP 요청으로 전송한다.
  • REST는 URL과 METHOD의 조합으로 다양한 Endpoint를 가진다.
  • GraphQL은 단 하나의 Endpoint 만으로 데이터를 요청하고 응답받을 수 있다.

 

GraphQL의 장점

REST의 단점인 Over-Fetching과 Under-Fetching 문제를 해결할 수 있다.

  • Over-Fetching
    • 오버 패칭은 클라이언트에서 데이터를 요청했을 때, 실제로 사용되는 데이터 외에 사용되지 않는 데이터들도 함께 불러옴으로 써 리소스의 낭비가 발생하는것을 말한다.
  • Under-Fetching
    • 언더 패칭은 클라이언트에서 화면을 구성하기 위해 데이터를 요청할 때, 하나의 API에서 필요한 데이터를 모두 내려주는 것이 아닐 수 있기 때문에 여러 개의 API에 데이터를 요청해야 하는 것을 말한다.

 

GraphQL의 Query와 Mutation

RESTful API를 구현할 때 사용하는 HTTP method인 GET, PUT, PATCH, DELETE, POST와 같은 메서드들과 마찬가지로 GraphQL 에는 QueryMutation이 있다. Query는 CRUD 중 R(READ)를 담당하고, Mutation은 C(CREATE), U(UPDATE), D(DELETE) 를 담당한다.

GraphQL이 Query로 동작한다고 하더라도, HTTP Method는 기본적으로 POST라는 점을 잊으면 안된다.
물론 GET으로 가게끔 할 순 있지만 권장하지 않는다. 이유는 GET으로 하게될 경우 Request Body가 아닌 쿼리 파라미터로 받게 되는데 GraphQL query 문을 쿼리로 받게 되면 너무 길어져 HTTP 상태코드 414(URI Too Long)가 내려올 수 있기 때문이다. 그렇기에 웬만하면 POST만을 사용하기를 권장한다.

 

https://velog.io/@jyleedev/Spring-GraphQL-Postman-%EC%98%88%EC%A0%9C-%EC%8B%A4%EC%8A%B5

포스트맨에서 이런식으로 요청하면 되고 

https://velog.io/@jyleedev/Spring-GraphQL-Postman-%EC%98%88%EC%A0%9C-%EC%8B%A4%EC%8A%B5

body에서 QUERY를 지정하여 요청을 보내면 된다.

https://velog.io/@jyleedev/Spring-GraphQL-Postman-%EC%98%88%EC%A0%9C-%EC%8B%A4%EC%8A%B5