GraphQL VS REST API

박종억·2022년 12월 15일
0
post-thumbnail

GraphQL과 REST: 4가지 주요 차이점


GraphQL은 선언적 데이터 가져오기를 허용하여 클라이언트가 API에서 필요한 데이터를 지정할 수 있는 권한을 부여하는 API용 쿼리 언어로 잘 알려져 있습니다. GraphQL을 사용하면 시간이 지남에 따라 API를 더 쉽게 발전시킬 수 있습니다. GraphQL은 2012년 Facebook에서 개발한 후 2015년에 오픈 소스화되었습니다.

REST API는 World Wide Web 아키텍처의 개발 및 설계를 안내하기 위해 구축된 소프트웨어 아키텍처 스타일로 정의됩니다. REST API는 분산 시스템의 아키텍처가 작동하는 방식에 대한 일련의 제약 조건을 정의합니다.

이 블로그에서는 GraphQL과 REST API의 주요 차이점을 강조하여 비즈니스 요구 사항에 가장 적합한 것이 무엇인지 교육적인 결정을 내리는 데 도움을 줍니다.

목차

GraphQL이란 무엇입니까?

GraphQL 대 REST: GraphQL 로고

이미지 출처

GraphQL은 API 작업에 사용할 수 있는 쿼리 언어입니다. 클라이언트가 HTTP 요청을 만들고 응답을 받을 수 있습니다.

이름에서 알 수 있듯이 GraphQL 의 모든 정보 세트 는 그래프의 맥락에서 볼 수 있습니다. GraphQL 스키마 시스템 에서 정의된 노드 는 객체를 묘사하는 데 사용됩니다. 이러한 노드 사이의 에지는 그래프의 노드 사이의 연결을 나타내는 데 사용됩니다.

이렇게 하면 쿼리 간의 명확한 관계가 보장되고 개체 간의 연결성이 향상됩니다. GraphQL은 또한 사용자가 단일 요청을 사용하여 다양한 리소스에서 데이터를 요청할 수 있도록 합니다.

데이터 가져오기를 여러 번 요청하는 것과는 달리 GraphQL을 사용하여 단일 엔드포인트에 임시 쿼리를 만들고 필요한 모든 데이터에 액세스할 수 있습니다.

GraphQL 대 REST: GraphQL 아키텍처

이미지 출처

GraphQL을 사용하면 사용자가 서버에서 수신할 정확한 데이터 유형을 지정할 수도 있습니다. 이 예측 가능한 데이터 구조는 매우 효율적이고 읽기 쉽습니다. GraphQL은 이해하기 매우 쉽습니다. 선언적 특성으로 인해 최상의 결과를 얻을 수 있습니다. 

REST 란 무엇입니까?

GraphQL 대 REST: REST 다이어그램

이미지 출처

REST API는 애플리케이션을 통합하는 유연하고 가벼운 방법을 제공합니다. REST API를 사용하면 일부 항목을 검색할 수 있으며 요청한 서비스에서 결과가 반환됩니다. REST API에는 다음 구성 요소가 있습니다.

  • 헤더 : 헤더는 인증 모드와 콘텐츠 유형을 나타냅니다.
  • 방법 : REST API를 호출하는 데 사용할 수 있는 다양한 방법이 있으며 가장 일반적인 방법은 POSTGET 입니다. GET 방법은 정보를 수집하는 데 사용되며 POST 방법은 웹의 리소스에 정보를 보내는 데 사용할 수 있습니다.
  • 끝점 : 끝점은 요청을 배치할 리소스의 URL로 정의됩니다. 예를 들어 https://api.powerbi.com/v1.0/myorg/ 입니다.
  • The Data or Body : 리소스에 보내야 하는 JSON 형태의 텍스트 데이터를 말한다.

다음은 REST API의 원활한 기능에 필수적인 몇 가지 REST 설계 원칙입니다.

  • 클라이언트-서버 분리 : REST API 설계에서 서버 및 클라이언트 애플리케이션은 서로 완전히 독립적이어야 합니다. 클라이언트 측에서 사용할 수 있는 유일한 정보는 요청된 리소스의 URI여야 합니다. 마찬가지로 서버 애플리케이션은 HTTP를 통해 요청된 데이터를 전달하는 것 외에는 클라이언트 애플리케이션을 변경해서는 안 됩니다.
  • 상태 비저장 : REST API는 상태 비저장입니다. 즉, 각 요청에는 이를 처리하는 데 필요한 모든 정보가 포함되어야 합니다. 이는 REST API에 서버 측 세션이 필요하지 않음을 의미할 수도 있습니다. 서버 애플리케이션은 클라이언트 요청과 관련된 데이터를 저장할 수 없습니다.
  • 캐시 가능성 : 가능할 때마다 리소스는 서버 또는 클라이언트 측에서 캐시 가능해야 합니다. 서버 응답에는 전달된 리소스에 대해 캐싱이 허용되는지 여부에 대한 정보도 포함되어야 합니다. 서버 측의 확장성을 높이는 동시에 클라이언트 측의 성능 향상을 목표로 해야 합니다.
  • 균일한 인터페이스 : 동일한 리소스에 대한 모든 API 요청은 요청 출처에 관계없이 동일하게 보여야 합니다. REST API는 이메일 주소나 사용자 이름과 같은 동일한 데이터가 하나의 URI(Uniform Resource Identifier) 에만 속하도록 해야 합니다 . 리소스가 너무 커서는 안 되지만 클라이언트가 필요로 하는 모든 정보를 포함해야 합니다.
  • 계층화된 시스템 아키텍처 : REST API에서 응답 및 호출은 서로 다른 계층을 거칩니다. 클라이언트 및 서버 응용 프로그램이 서로 직접 연결되어 있다고 가정하면 안 됩니다. 통신 루프에는 다양한 중개자가 포함될 수 있습니다. 따라서 REST API는 서버나 클라이언트가 중간 응용 프로그램과 통신하는지 또는 최종 응용 프로그램과 통신하는지 알 수 없도록 설계해야 합니다.

REST가 있을 때 GraphQL이 개발된 이유는 무엇입니까?

GraphQL이 REST API의 실행 가능한 대안으로 개발된 주된 이유는 다음과 같습니다.

  • 2010년대 초반에는 모바일 사용이 붐을 이루었고 이로 인해 네트워크가 부실하고 전력이 낮은 장치에 몇 가지 문제가 발생했습니다. REST API는 이러한 문제를 처리하는 데 최고가 아니었습니다.
  • 모바일 사용이 증가함에 따라 클라이언트 애플리케이션을 실행하는 프런트 엔드 플랫폼 및 프레임워크의 수도 증가했습니다. REST의 경직성으로 인해 모든 클라이언트의 요구 사항에 쉽게 맞출 수 있는 단일 API를 개발하는 것은 매우 어려웠습니다.
  • GraphQL이 대안으로 개발된 주된 이유는 모바일 애플리케이션과 현대 웹에서 사용되는 대부분의 데이터가 그래프 형태를 가지고 있기 때문 입니다. 예를 들어 뉴스 기사에는 댓글이 있으며 이러한 댓글에는 사용자가 만들거나 신고하는 스팸 플래그 또는 좋아요와 같은 기능이 있을 수 있습니다. 이것은 그래프가 어떻게 보이는지 설명합니다.

GraphQL과 REST의 주요 차이점

GraphQL과 REST는 HTTP 와 같은 인터넷 프로토콜을 통한 데이터 전송이라는 동일한 기능에 초점을 맞춘 두 가지 설계 방식입니다 . 그러나 구현은 분기되는 곳입니다. 다음은 GraphQL과 REST의 주제를 밝히기 위해 분석할 수 있는 몇 가지 요소입니다.

GraphQL 대 REST: 유용성

GraphQL과 REST 사용성은 버전 관리와 예측 가능성 측면에서 크게 다릅니다 . GraphQL의 중요한 이점은 높은 예측 가능성입니다.

이를 통해 API에 요청을 보내고 원치 않는 포함 없이 필요한 정확한 결과를 얻을 수 있습니다. GraphQL 쿼리는 사용성을 크게 향상시키는 예측 가능한 결과를 반환합니다.

반면에 REST의 동작은 사용된 HTTP 및 URI 메서드에 따라 다릅니다. 이로 인해 API 소비자가 엔드포인트를 호출할 때 예상되는 사항을 알 수 없게 될 수 있습니다.

버전 관리 측면에서 REST에는 이에 대한 표준화되고 명확한 지침이 없습니다. 이는 모든 공급자가 접근 방식을 자유롭게 구현할 수 있음을 의미합니다. 스펙트럼의 다른 쪽 끝에는 GraphQL이 있습니다. 버전 관리에 대한 매우 간단한 접근 방식을 따릅니다 . API를 버전화하지 마십시오 .

따라서 버전 관리 및 예측 가능성 측면에서 GraphQL과 REST API를 비교한다면 GraphQL의 단순성은 REST보다 우위에 있습니다. 

GraphQL 대 REST: 성능

GraphQL 대 REST 성능 측면 에서 RESTful 서비스 의 Over-fetching 및 Under-fetching 성향 은 GraphQL에 확실한 이점을 제공합니다. REST API는 적중될 때마다 규정된 데이터를 반환하도록 설계된 본질적으로 엄격한 데이터 구조를 가지고 있기 때문에 원치 않는 데이터가 누적되거나 관련 데이터를 가져오기 전에 여러 호출을 강제로 수행할 수 있습니다. 이러한 부적절성으로 인해 서버가 요청된 정보를 반환하는 데 걸리는 시간이 늘어날 수 있습니다.

반대로 GraphQL은 단일 API 요청에서 필요한 것을 검색할 수 있는 유연한 스타일을 사용합니다. 필요한 정보의 구조를 정의한 후 동일한 구조가 서버에서 반환되므로 과잉 가져오기 및 부족 가져오기를 방지할 수 있습니다.

일반적으로 성능 플래그에 대한 GraphQL 대 REST 토론에서는 GraphQL이 승자이지만 REST API가 더 나은 대안인 몇 가지 사용 사례가 있습니다. 예를 들어 API 호출을 촉진하기 위해 캐싱이 필요한 경우 입니다.

GraphQL 대 REST: 보안

보안 측면에서 GraphQL과 REST에 대해 이야기할 때 크레딧은 REST에 기울고 있는 것 같습니다. REST는 API에 보안을 적용하는 여러 가지 방법을 제공합니다.

예를 들어 HTTP 인증 과 같은 여러 API 인증 방법을 구현하여 REST API 보안을 보장할 수 있습니다 . 여기에서 민감한 데이터는 JSON 웹 토큰을 통해 HTTP 헤더로 전송되며 여기서 민감한 데이터는 JSON 데이터 구조로 전송되거나 OAuth 2.0 메커니즘을 통해 전송됩니다.

GraphQL은 또한 API의 보안을 보장하기 위한 몇 가지 조치를 제공하지만 REST만큼 성숙하지는 않습니다. 예를 들어 GraphQL이 데이터 유효성 검사 통합을 지원하지만 사용자는 맨 위에 권한 부여 및 인증 조치를 적용하는 방법을 알아내야 합니다. 

GraphQL 대 REST: 인기도

인기 측면에서 GraphQL 대 REST 논쟁은 REST API에 치중합니다. 예를 들어 API 2020 보고서 에 따르면 설문 조사에 참여한 API 소비자 및 실무자의 약 82% 가 REST 기반 OpenAPI 인증을 사용하는 반면 18% 만이 GraphQL을 사용합니다.

GraphQL 대 REST: API 2020 보고서 상태

이미지 출처

하지만 GraphQL의 인기는 꾸준히 치솟고 있습니다. State of JavaScript 2019 Report 에 따르면 조사 대상자의 5% 만이 2016년에 JavaScript를 사용했지만 2019년에는 38.7% 로 증가했습니다.

GraphQL 대 REST: JavaScript 2019 보고서의 상태

이미지 출처

GraphQL 대 REST: 데이터 가져오기

GraphQL과 REST의 데이터 가져오기 측면에서 REST API는 여러 엔드포인트에 액세스하여 데이터를 수집합니다. 계층 구조를 사용하여 다른 경로 또는 끝점을 사용합니다.

/user/id 가 사용자 데이터를 가져오는 하나의 끝점인 것처럼 /user /id/posts 는 사용자의 모든 게시물을 가져오는 또 다른 끝점이며 /user/id/followers 는 사용자의 팔로워 목록을 가져옵니다.

반면에 GraphQL에서는 데이터 요구 사항이 포함된 쿼리를 GraphQL 서버에 보내기만 하면 서버가 JSON 개체로 응답합니다.

REST는 무엇에 좋은가요?

다음은 REST API를 활용하는 것이 좋은 옵션인 몇 가지 사용 사례입니다.

  • 오류 보고 및 모니터링 : REST를 사용하면 API 응답을 기반으로 모니터링 시스템을 구축할 수 있습니다. GraphQL은 항상 200 OK 상태 응답 을 반환하므로 이 기능에 대한 기능을 제공하지 않습니다 .
  • 존재하지 않는 HTTP 캐싱 메커니즘 : 요즘 모든 브라우저는 리소스 다시 가져오기를 쉽게 방지하기 위해 HTTP 캐시 구현을 제공합니다. 또한 두 리소스가 동일한지 식별하는 데 사용됩니다. GraphQL은 모든 요청에 ​​대해 동일한 URL을 사용하기 때문에 주어진 객체에 대해 전역적으로 고유한 식별자를 얻을 수 없습니다. 이를 위해 GraphQL에서 캐시를 설정해야 합니다.
  • 리소스 공격 : GraphQL을 사용하면 원할 때마다 원하는 것을 정확하게 쿼리할 수 있습니다. 그러나 이로 인해 심각한 보안 문제가 발생할 수 있습니다. 예를 들어, 악의적인 당사자가 비용이 많이 드는 중첩 쿼리를 제출하여 데이터베이스 또는 서버에 과부하를 주려고 하는데 서버에 적절한 보호 장치가 없는 경우 DoS(서비스 거부) 공격의 희생양이 될 수 있습니다 .

GraphQL은 무엇에 좋은가요?

다음은 GraphQL을 유용하게 활용할 수 있는 몇 가지 사용 사례입니다.

  • GraphQL을 통해 사용자는 적절한 양의 데이터를 가져와서 특정 보기를 쉽게 렌더링할 수 있습니다.
  • GraphQL은 모바일 대응 플랫폼 구축을 목표로 하는 비즈니스에 가장 적합합니다 . 모바일 응답 플랫폼은 간단한 아키텍처로 인해 GraphQL에서 제공할 수 있는 짧은 대기 시간으로 애플리케이션이 응답할 것으로 기대합니다.
  • GraphQL은 유형 시스템을 사용하여 SDL(Schema Definition Language) 구문을 사용하여 API 체계를 정의합니다 . 클라이언트가 데이터에 액세스할 수 있는 방법을 정의하기 위해 서버와 클라이언트 간의 계약 역할을 합니다. 이를 통해 프론트엔드를 모의 데이터로 쉽게 테스트할 수 있으므로 프론트엔드 및 백엔드 팀이 독립적으로 작업할 수 있습니다. 스키마는 유형 오류를 조기에 포착할 수 있으므로 유형 안전성도 제공합니다.

GraphQL의 장점

GraphQL의 장점 중 일부는 다음과 같습니다.

  • 일괄 처리 및 캐싱을 쿼리하는 데 도움이 됩니다.
  • GraphQL은 문서를 API와 자동으로 동기화합니다.
  • 계층적이고 제품 중심적입니다.
  • 단일 API 호출로 데이터를 가져올 수 있습니다.
  • GraphQL은 쿼리가 시스템 컨텍스트 내에서 실행됨을 의미하는 강력한 유형의 언어입니다.
  • 선언적 쿼리 언어를 제공합니다.

GraphQL의 단점 

GraphQL의 몇 가지 단점은 다음과 같습니다.

  • 복잡한 앱에 대한 누락된 디자인 패턴.
  • 작은 응용 프로그램에는 과잉입니다.
  • 복잡한 쿼리의 성능 문제.
  • HTTP 캐싱을 따르는 대신 단일 엔드포인트를 사용합니다.

REST의 장점

REST의 주요 이점 중 일부는 다음과 같습니다.

  • 프로토콜은 다양한 프로젝트에서 쉽게 개발할 수 있습니다.
  • 프로세스 인스턴스를 명시적으로 생성할 수 있습니다.
  • 개발자는 사용자별 요구 사항을 충족할 수 있는 API를 구축할 수 있습니다.
  • REST API는 구축 및 적용이 매우 쉽습니다.
  • 이를 통해 어려움 없이 소프트웨어를 확장할 수 있습니다.

REST의 단점

REST의 주요 단점 중 일부는 다음과 같습니다.

  • 제한된 필드를 얻을 수 있는 방법은 없습니다.
  • 열악한 데이터 검색 시설.
  • 쿼리 유효성 검사를 사용할 수 없습니다.
  • 중첩된 리소스를 조작할 수 없습니다.
  • 클라이언트와 서버 간의 이전 상호 작용 상태를 유지하지 않습니다.

GraphQL 대 REST API: 요약표

다음은 더 나은 아이디어를 제공하기 위해 GraphQL과 REST API 주제에 대한 몇 가지 주요 차이점에 대한 요약 표입니다.

Sr.NoGraphQL쉬다
1.GraphQL은 클라이언트 기반 아키텍처를 활용합니다.REST는 서버 기반 아키텍처를 활용합니다.
2.GraphQL은 데이터를 나타내는 방법으로 JSON만 지원합니다.REST는 사용자가 편리하게 사용할 수 있도록 다양한 데이터 형식을 지원합니다.
삼.GraphQL에는 자동 캐싱 메커니즘이 없습니다.REST는 GraphQL과 달리 작업 중에 자동으로 캐싱을 구현합니다.
4.API 버전 관리는 GraphQL에서 사용할 수 없습니다.REST는 다양한 API 버전을 지원합니다.
5.GraphQL은 API 통합 시 일반적인 문제를 해결하는 데 있어 유연성과 효율성을 제공하는 쿼리 언어로 정의됩니다.REST는 API 개발을 위한 기존 표준으로 크게 볼 수 있는 아키텍처 스타일로 정의됩니다.
6.GraphQL은 노출된 서비스의 전체 기능을 제공하는 단일 엔드포인트를 통해 HTTP를 통해 배포됩니다.REST는 각 URL이 단일 리소스를 노출할 수 있는 URL 집합을 통해 배포됩니다.
7.GraphQL의 오류 식별은 복잡하며 HTTP 상태 코드 처리를 포함합니다.반면 REST는 HTTP 상태 코드를 사용하여 오류를 쉽게 식별할 수 있습니다.
8.GraphQL은 문서화를 위해 GraphiQl만을 사용합니다.REST는 API 및 OpenAPI 청사진과 같은 자동화된 문서화를 위한 다양한 옵션을 제공합니다.

GraphQL과 REST API: 어느 것이 더 낫습니까?

지금까지 GraphQL과 REST에 대한 논의를 마무리하기 위해 이 질문에 대한 대답은 주관적이며 특정 프로젝트 요구 사항 에 따라 크게 달라집니다 .

예를 들어, 데이터를 가져오기 위해 여러 번 왕복할 필요가 없는 최신 디자인 스타일을 사용하여 API 개발에 새로운 것을 주입하려는 경우 GraphQL이 최선의 선택일 수 있습니다.

그러나 강력한 기본 인증 또는 캐싱을 제공하는 입증된 기술을 사용하려는 경우 REST를 사용해야 합니다.

요구 사항에 가장 적합한 옵션을 선택하려면 각 API 디자인 스타일 아래에 있는 장단점과 제약 조건을 파악하는 것이 중요합니다. REST와 GraphQL을 모두 사용하는 혼합 및 일치 접근 방식을 배포할 수도 있습니다.

어떤 선택을 하든 API 가치 사슬의 모든 참여자, 즉 API 소비자(개발자), API 제공자 및 최종 사용자(고객) 의 요구를 충족하는 API 제품을 설계하는 데 집중해야 합니다 .

결론

이 블로그에서는 GraphQL 대 REST 토론의 중요한 요소에 대해 설명하여 더 잘 이해할 수 있도록 도와줍니다. GraphQL 대 REST에 대해 알아보기 전에 REST 및 GraphQL에 대한 간략한 소개를 제공합니다.

REST API 와 같은 다양한 무료 데이터 소스 세트에서 복잡한 데이터를 추출 하는 것은 어려운 작업이 될 수 있습니다.

출처: https://hevodata.com/learn/graphql-vs-rest/

profile
Small To Big

0개의 댓글