GraphQL이란 무엇인가?
GraphQL은 복잡한 데이터 구조와 그 위에 인터페이스를 구축하는 데 매우 적합한 API와 소통하는 대안적인 방법입니다. 데이터를 별개의 독립적인 조각으로 취급하는 대신, GraphQL은 데이터 조각들이 어떻게 연결되고 서로 관련되어 있는지를 보여주어 정보를 요청하고 수신하는 것을 쉽게 만듭니다.
GraphQL을 데이터베이스와 직접 대화하는 것처럼 API와 대화할 수 있는 쿼리 언어로 생각해 보세요. GraphQL을 사용하면 데이터베이스에 최대한 가까이 접근할 수 있어 원하는 데이터와 그 데이터를 얻는 방법을 선택할 수 있으며, 이는 성능에 큰 이점을 제공합니다.
GraphQL은 Facebook에 의해 만들어졌습니다 복잡한 데이터 구조로 확장하는 문제를 해결하기 위해. 그들의 성공적인 채택 덕분에 점점 더 많은 기업들이 API에 GraphQL을 사용하는 이점을 깨닫기 시작했습니다.
REST와의 주요 차이점
GraphQL API는 생각보다 작업하기 쉽습니다. REST API에 익숙하다면 다음의 기본적인 차이점을 염두에 두세요:
기능 | REST | GraphQL |
---|---|---|
엔드포인트 | 다양한 작업을 위해 여러 엔드포인트에 요청을 보냅니다 | 모든 요청은 단일 엔드포인트(예: /graphql)로 전송됩니다 |
데이터 검색 | 특정 엔드포인트에서 GET 메서드를 사용하여 데이터를 검색합니다 | 필요한 데이터를 정확히 요청하기 위해 쿼리를 사용하여 과도한 데이터 검색이나 부족한 데이터 검색을 줄입니다 |
데이터 수정/작업 | POST, PUT, PATCH 또는 DELETE와 같은 HTTP 메서드를 사용하여 데이터를 수정하거나 처리합니다. | 작업을 수행하기 위해 변경을 사용합니다(예: 파티 생성, 착륙 비용 계산) |
응답 형식 | 고정된 응답 형식이 모든 미리 정의된 필드를 반환하며, 필요 여부와 관계없이 반환됩니다 | 유연한 응답을 통해 포함할 필드를 정확히 지정할 수 있어 불필요한 데이터 전송을 줄입니다 |
데이터 연결 | 관련 데이터를 가져오기 위해 여러 요청이 종종 필요합니다 | 중첩 쿼리를 통해 단일 요청으로 관련 데이터를 검색할 수 있습니다(예: 파티 세부정보와 배송 항목을 함께). 사용자는 또한 단일 GraphQL 요청 내에서 여러 변경을 관리하기 위한 워크플로를 구축할 수 있어 복잡성을 줄이고 효율성을 향상시킵니다 |
GraphQL의 장점
더 빠른 응답
GraphQL은 정확한 데이터 검색, 단일 엔드포인트 사용, 배치 및 캐싱 개선 기능을 통해 더 빠른 응답을 제공합니다.
정확한 데이터 검색
REST의 일반적인 문제는 데이터의 과도한 검색 또는 부족한 검색입니다. 즉, 필요 없는 정보를 너무 많이 받거나 필요한 정보를 충분히 받지 못하는 경우입니다. GraphQL은 필요한 데이터만 요청할 수 있도록 하여 이 문제를 해결합니다—더도 말고 덜도 말고. 이러한 구체성은 성능을 향상시킬 뿐만 아니라 API와 상호작용하는 사람들에게 프로세스를 단순화하여 시스템을 더 효율적이고 사용자 친화적으로 만듭니다.
이것이 유용한 예시:
- 프론트엔드 개발자가 UI 구성 요소에 필요한 데이터를 정확히 가져올 수 있어 서버에 대한 왕복 횟수를 줄이고 성능을 향상시킵니다.
- HS 코드 분류, 포장, 배송 평가 및 landed cost 견적을 checkout의 항목에 대해 가져오고 싶다고 가정해 보세요. GraphQL API를 통해 통합된 경우, 필요한 모든 워크플로를 포함하여 단일 호출로 필요한 모든 것을 얻을 수 있습니다(필요 없는 것은 제외). 반면 REST API를 사용하면 먼저 Classify REST API를 호출한 후, Rating REST API를 별도로 호출하고, 마지막으로 그 분류와 배송 평가를 Landed Cost REST API에 대한 세 번째 호출에 연결해야 합니다. 이러한 모든 REST API는 가능한 모든 정보를 반환하므로 필요한 데이터를 찾기 위해 응답을 파싱해야 합니다. 이러한 속도 절약은 쇼핑객이 떠나기 전에 빠르게 완전한 landed cost를 반환하는 데 영향을 미칩니다.
단일 엔드포인트
GraphQL API는 일반적으로 단일 엔드포인트를 가지며, REST API는 종종 다양한 리소스와 작업을 위해 여러 엔드포인트를 가집니다. 이는 API를 관리하고 이해하기 쉽게 만듭니다.
배치 및 캐싱
GraphQL의 쿼리 배치 기능과 캐싱 전략 지원은 성능을 크게 향상시킵니다. 이러한 기능은 네트워크와 서버의 부하를 줄여 사용자에게 더 빠르고 신뢰할 수 있는 상호작용을 제공합니다.
잘 정의된 스키마
GraphQL API는 강력하게 타입이 지정된 스키마를 기반으로 합니다. 이 스키마는 사용 가능한 데이터의 구조와 수행할 수 있는 작업을 정의합니다. 이는 사용 가능한 데이터와 접근 방법에 대한 명확성을 제공하여 개발자 생산성을 향상시키고 오류를 줄일 수 있습니다. 예를 들어, 프론트엔드 팀은 새로운 REST 엔드포인트를 기다리지 않고도 필요한 것을 정확히 얻기 위해 그래프를 탐색할 수 있습니다.
기존 클라이언트를 중단하지 않고 개선할 수 있는 능력
GraphQL에서 새로운 기능을 추가하거나 기존 기능을 수정하는 것은 유연한 쿼리 구조 덕분에 현재 통합을 방해하지 않습니다. 이 기능은 기존 클라이언트와의 호환성을 깨지 않고 개선할 수 있도록 보장합니다.
최신 문서
GraphQL의 탐색 기능 덕분에 문서는 모든 변경 사항과 함께 자동으로 생성되고 업데이트됩니다. 이는 개발자에게 제공되는 모든 정보가 최신 상태임을 보장하여 통합 문제와 구식 문서와 관련된 지원 티켓을 줄입니다. 이는 REST API 문서에서 일반적으로 직면하는 문제입니다.
우리의 GraphQL 문서와 REST 문서를 검토하여 차이를 확인하세요.
비유
레스토랑에 가서 원하는 대로 요리를 주문할 수 있는 메뉴가 있는 레스토랑과 정해진 세트 메뉴만 선택할 수 있는 다른 레스토랑을 상상해 보세요. GraphQL은 첫 번째 레스토랑과 같습니다:
- 정확히 원하는 것을 얻기: GraphQL을 사용하면 필요한 데이터만 요청할 수 있습니다. 더도 말고 덜도 말고. 예를 들어, 요리의 이름과 가격만 원하고 전체 재료 목록은 원하지 않는다고 가정해 보세요. REST API를 사용하면 전체 요리 세부 정보를 받아야 하고 필요 없는 부분은 무시해야 합니다.
- 맞춤형 요리 구성: 우리의 GraphQL API는 쉽게 결합하여 더 맞춤형 솔루션을 만들 수 있습니다. 이는 뷔페 스타일의 레스토랑에서 이미 있는 재료를 사용하여 필요에 맞게 독특한 요리를 만들 수 있는 것과 유사합니다. 반면, REST API는 바구니에 포장된 미리 만들어진 상품이 있는 제과점과 같습니다. 이미 만들어진 것만 주문할 수 있으며 원하는 조각만 가져갈 수는 없습니다.
- 대기 시간 감소: 필요한 모든 정보를 단일 요청으로 받을 수 있으므로, 서버에게 애피타이저, 메인 코스, 디저트를 한 번에 가져다 달라고 요청하는 것과 같습니다. 코스 사이에 기다릴 필요가 없습니다. 대부분의 REST API는 서로 다른 정보를 얻기 위해 여러 요청을 보내야 합니다.
- 주문 변경 용이: 앱의 데이터 요구 사항이 변경되면 GraphQL을 사용하면 조정이 더 쉽습니다. 필요한 것에 대한 쿼리만 변경하면 됩니다. REST의 경우, 주방(백엔드)이 메뉴를 위한 새로운 요리(엔드포인트)를 만드는 것을 기다려야 할 수도 있으며, 이는 더 많은 시간이 소요됩니다.
GraphQL은 REST API보다 데이터 검색에 더 많은 유연성, 효율성 및 단순성을 제공합니다. 특히 요구 사항이 변경되거나 증가할 때 더욱 그렇습니다.
Zonos가 GraphQL을 사용하는 방법
지난 몇 년 동안 플랫폼을 현대화하면서, Zonos는 REST 대신 API의 새로운 기능을 GraphQL을 사용하여 구축하기로 결정했습니다. 우리는 데이터가 복잡하고 상호 연결되어 있기 때문에 이렇게 결정했습니다. 이는 Facebook이 GraphQL을 만들게 된 데이터와 유사합니다. 이러한 복잡성은 개발자가 데이터를 가져오고 사용하는 방식이 구현 간에 극적으로 다르기 때문에 확장 가능한 REST API를 구축하는 데 어려움을 줍니다. REST는 유연하지 않습니다.
GraphQL은 개발자가 API를 구현할 때 원하는 데이터와 그 데이터를 얻는 방법을 정확히 선택할 수 있도록 하여 이 문제를 깔끔하게 해결합니다. 이를 통해 Zonos가 모든 상황에 대해 맞춤형 작업을 수행할 필요 없이 개발자가 자신의 워크플로에 맞게 데이터를 통합할 수 있습니다.
GraphQL을 사용하고 플랫폼을 현대화한 결과, 우리의 API는 더 성능이 향상되었고, Zonos를 시스템에 통합하는 속도가 빨라졌으며, Zonos가 새로운 기능을 더 빠르게 제공할 수 있게 되었습니다.
더 나은 기능
Zonos는 지속적으로 새로운 기능을 개발하며, GraphQL은 이러한 업데이트를 가장 먼저(그리고 보통 유일하게) 받습니다. 반면, 우리의 REST API는 수명이 다한 것으로 간주되며 많은 새로운 기능에 직접 접근할 수 없습니다.
GraphQL에 한정된 기능의 예:
- Inclusive pricing
- 라벨 API
- 새로운 Checkout 및 Hello
- API 응답의 박스 크기
- 대시보드 보고
- 가능할 경우 DDP 견적 요청 기능, 그러나 해당 서비스 수준에서 DDP가 불가능할 경우 DDU 견적 반환
- 세금, 세금 및 수수료의 상세 내역(항목 수준 정보, 특정 수수료)—대시보드는 GraphQL에 의해 구동되며 모든 상점에 대해 이 데이터를 표시하지만, REST API 응답은 이 수준의 세부 정보를 포함하지 않습니다.
- 테스트 모드(곧 출시 예정)
왜 GraphQL인가
REST보다 GraphQL을 통해 통합하는 것을 추천하는 이유를 알아보세요.
Zonos에서는 통합을 위한 두 가지 주요 API 유형인 GraphQL과 REST를 제공합니다. REST API는 더 오래된 기술로 많은 사람들에게 더 익숙할 수 있지만, 우리는 더 많은 유연성과 빠른 혁신을 가능하게 하기 위해 GraphQL로 전환했습니다. 두 가지 모두 여전히 지원되지만, 이 가이드는 GraphQL이 우리의 통합의 미래일 뿐만 아니라 일반적인 통합의 미래이자 오늘날의 요구를 충족시키기 위한 더 강력한 도구인 이유를 설명합니다.