GraphQL과 RESTful API의 차이점, 장단점을 정리해본 글

GraphQL과 RESTful API는 모두 웹 어플리케이션에서 서버와 클라이언트 간의 데이터 교환을 위해 사용되는 기술이다.

GraphQL

페이스북에 의해 개발된 쿼리 언어이다.
클라이언트가 필요한 데이터의 구조를 지정하여 서버에 요청할 수 있게 해준다.

장점

  • 네트워크 사용 최적화: 여러 데이터를 하나의 endpoint 요청으로도 가져올 수 있어서 네트워크 사용을 최적화 할 수 있다.
  • 직관성: 타입을 사전에 정의하여 데이터의 구조를 명확히 할 수 있고, 데이터를 받아오기 전에 구조를 먼저 파악 할 수 있기 때문에 직관적이다.
  • 데이터 오버패칭 감소: 필요한 데이터만 정확하게 요청할 수 있으며, 불필요한 데이터는 받지 않아도 된다.

단점

  • 캐싱: HTTP 캐싱을 사용하기 어려워서 별도의 전략이 필요하다.
  • 복잡성: 복잡한 쿼리가 서버에 부담이 될 수 있다.
    복잡한 쿼리가 왜 문제가 되는가?
    -복잡한 쿼리는 서버에 부담을 줄 수 있는데, GraphQL의 특성 상 클랑이언트 측에서 필요한 데이터를 정의해서 서버에 요청하는 시스템이다 보니 쿼리 구조를 복잡하고 중첩되도록 설정할 수 있으며, 그럴경우 서버에서 DB에 여러차례 접근해아하는 경우도 발생 할 수 있다. 이럴경우 복잡한 처리를 위해 컴퓨터의 메모리를 과도하게 사용하게 될 수도 있다.

RESTful API

Representational State Transfer 의 약자. 웹 아키텍쳐의 한 형태이며 REST 원칙을 따르는 웹 서비스 인터페이스를 의미한다.

장점

  • 명시성: url에 필요한 자료의 내용이 포함되어서 다른 의미로 명시적이다.
  • 일관성: HTTP 메소드를 사용하여 API 설계에 일관성을 줄 수 있다.
  • 캐싱 용이: HTTP 프로토콜을 그대로 사용하여 캐싱 기능을 쉽게 사용할 수 있다.
  • 확장성: endpoint안에 들어갈 데이터를 미리 선언하지 않기 때문에 수정과 확장이 용이하다.

단점

  • 오버페칭 및 언더페칭: 필요한 데이터보다 적거나 많이 받을 수 있다.
  • 관리: 데이터를 가져오기 위해서 여러 엔드포인트를 호출하고 관리해야 한다.

GraphQL과 RESTful의 차이 정리

  • GraphQL은 하나의 엔드포인트로 통신할 수 있고 RESTful은 여러개의 엔드포인트를 통해서 통신하게 된다.
  • api 구성에 따라서 원하지 않는 데이터도 받아와야만 하는 RESTful과는 달리 GraphQL은 선언적인 쿼리 사용으로 원하는 데이터만 받아올 수 있다.
  • 같은 엔드포인트에서도 GraphQL은 다른 결과를 받을 수 있다. RESTful은 같은 엔드포인트에서 같은 데이터를 받는다.

그래서 어떤것을 사용하는게 좋을까

GraphQL의 경우에는 클라이언트가 어떤 데이터를 필요로하는지 정확하게 알고, 해당 데이터만 요청해야하는 상황에 적합하고, RESTful의 경우는 간단하고 표준화된 방식을 선호할때 사용하는게 좋다고 할 수 있지 않을까?