초보자를 위한 GraphQL 튜토리얼: 정의, 기능 및 예
GraphQL이란 무엇입니까?
GraphQL 기존 데이터로 쿼리를 실행하기 위해 Facebook이 개발한 애플리케이션 계층 서버 측 기술입니다. GraphQL은 RESTful API 호출을 최적화할 수 있습니다. 이는 데이터를 가져오고 업데이트하는 선언적인 방법을 제공합니다. GraphQL은 서버에서 클라이언트로 데이터를 로드하는 데 도움이 됩니다. 이를 통해 프로그래머는 원하는 요청 유형을 선택할 수 있습니다.
GraphQL을 사용하는 이유는 무엇입니까?
GraphQL을 사용하는 이유는 다음과 같습니다.
- 사람이 읽을 수 있는 쿼리를 제공합니다.
- GraphQL에서는 많은 데이터베이스를 처리하는 것이 매우 쉽습니다.
- 마이크로서비스와 복잡한 시스템에 적합합니다.
- 단일 API 호출로 데이터를 가져올 수 있습니다.
- 쿼리 일괄 처리 및 캐싱에 도움이 됩니다.
- 가져오는 문제에 직면하거나 초과하거나 부족하지 않습니다.
- 귀하의 필요에 맞게 요청을 조정합니다.
- 적절한 형식의 스키마를 검색하는 데 도움이 됩니다.
- GraphQL은 API 변경 사항에 맞춰 문서를 자동으로 동기화합니다.
- 버전 관리 없이 API 발전이 가능합니다.
- GraphQL 필드는 재사용을 위해 더 높은 구성 요소 수준으로 공유할 수 있는 여러 쿼리에 사용됩니다.
- 노출할 기능과 작동 방식을 선택할 수 있습니다.
- 신속한 애플리케이션 프로토타이핑에 사용할 수 있습니다.
GraphQL의 응용
GraphQL의 중요한 애플리케이션은 다음과 같습니다.
- Relay 및 기타 클라이언트 프레임워크를 제공합니다.
- GraphQL은 모바일 앱의 성능을 향상시키는 데 도움이 됩니다.
- 과도한 가져오기 문제를 줄여 서버 측 클라우드 서비스를 낮추고 클라이언트 측 네트워크 사용량을 줄일 수 있습니다.
- 클라이언트 애플리케이션이 긴 쿼리 형식에 필요한 필드를 지정해야 할 때 사용할 수 있습니다.
- GraphQL은 이전 API 또는 기존 API에 기능을 추가해야 할 때 완벽하게 활용될 수 있습니다.
- 복잡한 API를 단순화해야 할 때 사용됩니다.
- 객체 지향 프로그래밍에 일반적으로 사용되는 파사드 패턴을 혼합하고 매쉬합니다.
- 여러 곳의 데이터를 하나의 편리한 API로 집계해야 하는 경우.
- GraphQL을 기존 API의 추상화로 사용하여 사용자 요구에 따라 응답 구조를 지정할 수 있습니다.
GraphQl을 배우기 전에 무엇을 배워야 할까요?
이 GraphQL 튜토리얼은 다음을 기반으로 합니다. Express and NodeJ. 따라서 NodeJS에 대한 기본적인 이해가 있어야 GraphQL을 아주 쉽게 배울 수 있습니다.
GraphQL 주요 구성요소
이제 이 GraphQL 튜토리얼에서는 GraphQL의 주요 구성 요소를 배워 보겠습니다.
위 그림에서 볼 수 있듯이 GraphQL의 세 가지 주요 구성 요소는 1) Query, 2) Resolver, 3) Schema입니다.
질문
쿼리는 클라이언트 시스템 애플리케이션에서 수행한 API 요청입니다. 이는 증가를 지원하고 배열을 가리킵니다. 쿼리는 값을 읽거나 가져오는 데 사용됩니다.
쿼리 부분:
다음은 Query의 중요한 부분입니다.
- 들:
필드는 단순히 우리가 서버에 특정 정보를 요청하고 있음을 나타냅니다. 다음은 graphQL 쿼리의 필드에 대한 GraphQL 예입니다.
query { team { id name } } "data": { "team":[ { "id": 1, "name": "Avengers" } , … ] } }
위의 GraphQL 예에서는 서버에 팀이라는 필드와 id 및 name과 같은 하위 필드를 요청합니다. GraphQL 서버는 우리가 요청한 데이터를 반환합니다.
- 인수
In REST, URL 세그먼트와 쿼리 매개변수로 단일 인수 집합만 전달할 수 있습니다. 특정 프로필을 얻으려면 일반적인 REST 호출은 다음과 같습니다.
GET /api'team?id=2 Content-Type: application JSON { "id": 2, "name": "Justice League." }
해결
리졸버는 GraphQL 작업을 데이터로 변환하기 위한 지침을 제공합니다. 리졸버 함수를 정의하여 쿼리를 데이터로 해결합니다.
특정 필드에 따라 데이터를 가져오는 프로세스와 위치를 서버에 표시합니다. 또한 확인자는 데이터베이스 스키마와 API 스키마를 분리합니다. 분리된 정보는 데이터베이스에서 얻은 콘텐츠를 수정하는 데 도움이 됩니다.
개요
GraphQL 스키마는 GraphQL 구현의 중심입니다. 여기에는 연결 중인 클라이언트가 사용할 수 있는 기능이 설명되어 있습니다.
GraphQL의 특징
GraphQL의 중요한 기능은 다음과 같습니다.
- 이는 필수가 아닌 선언적 쿼리 언어를 제공합니다.
- 계층적이고 제품 중심적입니다.
- GraphQL은 강력한 타입입니다. 즉, 쿼리는 특정 시스템의 컨텍스트 내에서 실행됩니다.
- GraphQL의 쿼리는 서버가 아닌 클라이언트에서 인코딩됩니다.
- OSI 모델의 애플리케이션 계층의 모든 기능을 갖추고 있습니다.
GraphQL 클라이언트
GraphQL 클라이언트는 해당 GraphQL 서버에 POST 요청을 보내는 코드입니다. GraphQL API를 직접 쿼리할 수 있지만 좋은 접근 방식은 Relay를 사용하여 전용 클라이언트 라이브러리를 활용하는 것입니다.
이 Java스크립트 라이브러리는 GraphQL을 사용하여 React 애플리케이션을 만들기 위해 Facebook에서 개발했습니다. GraphQL 클라이언트는 Drupal과 같은 CMS, 단일 페이지 애플리케이션, 모바일 애플리케이션 등이 될 수 있습니다.
GraphQL 서버
GraphQL 서버는 GraphQL 사양의 서버 측 구현입니다. 이는 귀하의 데이터를 클라이언트 프로그램이 쿼리할 수 있는 GraphQL API로 묘사합니다. 데이터베이스.
GraphQL 게이트웨이
게이트웨이는 다른 백엔드 서비스에 대처하기 위해 별도의 서비스를 구축할 수 있는 마이크로서비스 패턴입니다. 이는 실행 가능한 문서를 제공하고 단일 요청으로 둘 이상의 소스에서 데이터를 수집하는 편리한 방법을 제공합니다.
GraphQL의 변수는 무엇입니까?
A GraphQL의 변수 클라이언트 쿼리에서 동적 값을 분리하고 쿼리를 고유한 사전으로 전달하는 데 사용됩니다. GraphQL의 변수는 개별 인수를 사용하여 클라이언트가 작성한 쿼리나 변형을 재사용하는 데에도 사용할 수 있습니다. graphQL에서는 쿼리 문자열에 동적 인수를 직접 전달할 수 없습니다. 그 이유는 클라이언트 측 코드가 프로그램을 실행할 때 쿼리 문자열을 동적으로 조작해야 하기 때문입니다.
GraphQL은 쿼리에서 동적 값을 인수분해하는 좋은 방법이 하나 있습니다. 이를 별도의 사전으로 전달합니다. 이러한 값을 변수라고 합니다. 변수로 작업할 때마다 다음 세 가지 작업을 수행해야 합니다.
- 쿼리의 정적 값을 변수 이름으로 바꿉니다.
- GraphQL 쿼리에서 허용되는 변수 중 하나로 변수 이름을 선언합니다.
- 전송별 변수 사전에 값을 전달합니다.
모두 함께 보면 다음과 같습니다.
query HeroNameAndFriends($episode: Episode) { hero(episode: $episode) { name friends { name } } } { "episode": "JEDI" } { "data": { "hero": { "name": "R2-D2", "friends": [ { "name": "Luke Skywalker" }, { "name": "Han Solo" }, { "name": "Leia Organa" } ] } } }
위의 GraphQL 예제에서 볼 수 있듯이 새 쿼리를 생성할 필요 없이 단순히 다른 변수를 전달했습니다.
돌연변이란 무엇입니까?
돌연변이는 GraphQL에서 데이터 세트를 변경하는 방법입니다. 데이터 저장소의 데이터를 수정하고 값을 반환합니다. 돌연변이는 데이터를 삽입, 업데이트 또는 삭제하는 데 도움이 됩니다. 일반적으로 변형은 스키마 부분으로 정의됩니다.
GraphQL 변이를 설계할 때 고려해야 할 사항
GraphQL을 설계할 때 중요한 점은 다음과 같습니다.
- 명명: 우선, 돌연변이 동사의 이름을 지정해야 합니다. 그런 다음 해당되는 경우 명사 또는 "객체"입니다. 돌연변이 이름을 지정할 때 camelCase를 사용하세요.
- 특성: 가능한 한 돌연변이 특이적이어야 합니다. 돌연변이는 사용자가 취한 의미론적 작업을 나타내야 합니다.
- 입력 개체: 클라이언트에서 변형을 실행하기 위한 인수로 고유하고 필수 입력 개체 유형을 사용하세요.
- 고유한 페이로드 유형: 모든 변형에 대해 고유한 페이로드 유형을 사용해야 합니다. 특정 페이로드 유형에 변형 출력을 필드로 추가할 수도 있습니다.
- 중첩: 의미가 있는 곳이면 어디든 돌연변이에 중첩을 사용하세요. GraphQL API를 완벽하게 활용할 수 있습니다.
GraphQL과 REST의 차이점
다음 표는 다음의 중요한 차이점을 보여줍니다. GraphQL과 REST.
GraphQL | REST |
---|---|
이는 클라이언트 중심 아키텍처를 따릅니다. | 이는 서버 기반 아키텍처를 따릅니다. |
GraphQL은 스키마 측면에서 구성될 수 있습니다. | REST는 엔드포인트 측면에서 구성될 수 있습니다. |
GraphQL은 성장하는 커뮤니티입니다. | REST는 매우 큰 커뮤니티입니다. |
GraphQL의 개발 속도는 빠릅니다. | REST의 개발 속도는 느립니다. |
GraphQL의 학습 곡선은 어렵습니다. | REST의 학습 곡선은 보통 수준입니다. |
ID는 가져오는 방법과 분리됩니다. | REST에서 호출하는 엔드포인트는 특정 개체의 ID입니다. |
GraphQL에서는 서버가 사용 가능한 리소스를 결정합니다. | 리소스의 형태와 크기는 REST의 서버에 의해 결정됩니다. |
GraphQL은 모든 플랫폼에서 높은 일관성을 제공합니다. | 모든 플랫폼에서 일관성을 유지하는 것은 어렵습니다. |
GraphQL의 단점
GraphQL의 단점은 다음과 같습니다.
- 젊은 생태계
- 백엔드 부분의 리소스가 부족합니다.
- 복잡한 앱에는 디자인 패턴이 없습니다.
- 복잡한 쿼리로 인한 성능 문제.
- 소규모 애플리케이션에 대한 과잉
- GraphQL은 요청 콘텐츠를 저장할 수 있는 HTTP 캐싱 방법에 의존하지 않습니다.
- GraphQL은 파일을 이해하지 못합니다. 따라서 파일 업로드 기능은 포함되어 있지 않습니다.
- GraphQL을 사용하면 스키마 정의 언어 학습 등 많은 사전 개발 교육을 받을 수 있도록 준비하세요.
GraphQL에서 사용하는 오픈 소스 앱 및 도구
GraphQL에서 사용하는 중요한 오픈 소스 앱과 도구는 다음과 같습니다.
- 개츠비: Gastby는 둘 이상의 GraphQL API 소스에서 파생된 데이터를 사용할 수 있는 GraphQL 기반 애플리케이션입니다. 이를 사용하여 정적 및 클라이언트 기반 React 애플리케이션을 개발할 수 있습니다.
- 그라피큐엘: 브라우저와 통합되며 GraphQL의 API와도 상호작용하는 ID입니다. GraphiQL에 포함된 기능 중 일부는 돌연변이, 데이터 쿼리 및 자동 완성 쿼리입니다.
- GraphQL 플레이그라운드: 이는 돌연변이, 검증, GraphQl 쿼리, 구독 등을 처리하기 위한 내장 편집기가 있는 강력한 IDE입니다. 개발자는 이 IDE를 사용하여 스키마 구조를 시각화할 수 있습니다.
- 프리즘: Prisma는 데이터베이스를 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 통해 GraphQL API로 전환하는 데이터베이스 추상화 계층입니다.
- 비트: 재사용 가능한 코드를 구성 요소로 변환하는 오픈 소스 도구이자 플랫폼입니다. 개발자는 이를 활용하여 다양한 프로젝트를 공유하고 개발할 수 있습니다.
요약
- GraphQL은 기존 데이터로 쿼리를 실행하기 위해 Facebook에서 개발한 애플리케이션 계층 서버 측 기술입니다.
- GraphQL을 사용하면 단일 API 호출로 데이터를 가져올 수 있습니다.
- GraphQL은 모바일 앱의 성능을 향상시키는 데 도움이 됩니다.
- 중요한 GraphQL 쿼리 구성 요소는 1) 쿼리, 2) 확인자, 3) 스키마입니다.
- GraphQL은 강력한 타입입니다. 즉, 쿼리는 특정 시스템의 컨텍스트 내에서 실행됩니다.
- GraphQL 클라이언트는 해당 GraphQL 서버에 POST 요청을 보내는 코드입니다.
- GraphQL 서버는 GraphQL 사양의 서버 측 구현입니다.
- 게이트웨이는 다른 백엔드 서비스에 대처하기 위해 별도의 서비스를 구축할 수 있는 마이크로서비스 패턴입니다.
- GraphQL에는 쿼리에서 동적 값을 인수분해하는 한 가지 좋은 방법이 있습니다.
- 돌연변이는 GraphQL에서 데이터 세트를 변경하는 방법입니다.
- GraphQL을 설계할 때 중요한 점은 1) 이름 지정, 2) 특정성, 3) 입력 개체 고유 페이로드 유형, 4) 중첩입니다.
- GraphQL은 스키마 측면에서 구성될 수 있는 반면 REST는 엔드포인트 측면에서 구성될 수 있습니다.
- GraphQL의 단점은 백엔드 부분에 리소스가 부족하다는 것입니다.