모범 사례 및 튜토리얼

데이터 관계 - Golang 애플리케이션의 GraphQL 및 NoSQL

지금쯤이면 이전 튜토리얼 제목의 글을 보셨을 것입니다, Golang 및 NoSQL 데이터베이스와 함께 GraphQL 사용와 함께 GraphQL을 사용하기 위한 빠른 시작입니다. 카우치베이스. 거기에서 데이터에 대한 읽기 전용 쿼리와 변형을 허용하는 GraphQL 스키마를 만드는 방법을 살펴보았습니다. 그러나 쿼리는 잠재적인 데이터 관계를 중심으로 효율적으로 설계되지 않았습니다.

다음을 사용하여 데이터 모델 간의 관계를 처리하고 정의하는 방법을 살펴보겠습니다. GraphQL, 카우치베이스, Go 프로그래밍 언어를 지원합니다.

이전 예제에서는 다음과 같이 계정과 블로그에 대해 두 개의 GraphQL 객체를 만들었습니다:

위의 예제에서 우리는 계정 필드에 블로그 유형 객체의 키는 계정 유형 객체를 추가했습니다. 이렇게 함으로써 다음과 같은 쿼리를 실행할 수 있었습니다:

위의 접근 방식은 작동하지만, 변수를 계속 전달해야 합니다. 그래프QL 쿼리.

스키마는 위의 쿼리와는 아무런 관련이 없습니다. 쿼리 객체는 스키마 자체가 아니라 쿼리 수행 방식을 담당합니다.

Couchbase를 활용하는 쿼리를 다음과 같이 정의했음을 기억하세요:

그럼 이 이야기는 어디로 갈까요?

수행하고자 하는 모든 상호 작용에 대해 쿼리를 만드는 대신 GraphQL 모델에 구워 넣는 것이 더 쉽습니다. 다시 말해, 문자열 키로 모델을 참조하는 대신 다른 모델을 참조하면 어떨까요?

다음과 같이 수정합니다. 블로그 유형 객체입니다:

우리는 여전히 가능한 각 API 필드를 정의하고 있지만, 또한 해결 함수에 대한 계정 필드에 입력합니다. 내부의 해결 함수를 사용하면 부모 객체에서 데이터를 가져올 수 있습니다. 블로그 유형 객체를 생성하고 요청이 있을 때 이를 사용하여 계정 데이터를 쿼리할 수 있습니다.

앞서 살펴본 GraphQL 쿼리는 다음과 같이 될 수 있습니다:

위의 쿼리는 이전 쿼리와 정확히 같은 의미가 아닐 수도 있지만 이 예제에서는 같은 의미입니다. 특정 블로그를 계정별로 가져오고 싶다고 가정합니다. 계정의 아이디를 제공하는 대신 해당 아이디를 통해 정보를 얻을 수 있습니다. 해결 함수를 만들었습니다.

이 접근 방식은 쿼리를 불필요하게 만들나요? 아니요, 다른 방식으로 쿼리할 필요가 있을 수 있기 때문에 불필요하지 않습니다. 하지만 이 접근 방식을 사용하면 다음과 같은 유형의 JOIN 작업을 수행합니다.

Couchbase에는 N1QL이 있으므로 JOIN 작업을 백엔드가 아닌 데이터베이스를 통해 수행하는 것이 더 낫지 않을까요? GraphQL로 NoSQL 관계를 만들었음에도 불구하고 여전히 데이터베이스에 대한 수많은 요청을 수행하고 있습니다. 저는 GraphQL이 애플리케이션 수준이 아닌 데이터베이스 수준에서 조인하는 것이 더 낫다고 주장하고 싶습니다. 요청이 적을수록 애플리케이션이 더 빨라지겠죠?

를 수정해 보겠습니다. 블로그 쿼리에서 rootQuery 객체입니다:

대신 해결 함수를 계정 필드에 블로그 유형 객체에 대한 쿼리를 통해 모든 작업을 수행합니다. 우리의 블로그 유형 객체는 다음과 같이 보일 것입니다:

이에 대한 쿼리를 작성하려면 다음과 같이 쉽게 작성할 수 있습니다:

위의 쿼리는 모든 블로그와 그와 관련된 계정 데이터를 반환합니다. 각 필드에 대해 쿼리를 수행하는 대신 N1QL을 사용하여 단일 요청으로 쿼리를 수행합니다.

그래프QL로 쉽게 모델링할 수 있는 유연한 스키마는 관계형 데이터베이스보다 이 접근 방식을 더 그럴듯하게 만들어 줍니다.

결론

방금 GraphQL과 NoSQL 데이터베이스인 Couchbase를 사용하는 Golang 애플리케이션에서 관련 데이터 유형으로 작업하는 방법을 살펴보았습니다. GraphQL 관계를 사용하면 다음을 만들 수 있습니다. 해결 함수를 사용하거나 N1QL을 사용하여 더 복잡한 쿼리를 생성하고 데이터베이스가 작업을 처리하도록 할 수 있습니다. 두 시나리오 모두 사용자는 잠재적으로 과도한 양의 API 엔드포인트에 대해 걱정할 필요 없이 원하는 것을 정확하게 요청할 수 있습니다.

저의 이전 예제 를 사용하면 Golang 데이터 유형과 Couchbase를 사용하는 GraphQL에 대해 더 깊이 있게 이해할 수 있습니다. 여기서 더 나아가 제가 작성한 다른 예제를 보실 수도 있습니다, Golang을 사용하여 GraphQL 시작하기.

데이터 관계 및 Go에서 Couchbase 사용에 대해 자세히 알아보려면 다음을 확인하세요. 카우치베이스 개발자 포털.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 Nic Raboy, 개발자 옹호자, Couchbase

닉 라보이는 최신 웹 및 모바일 개발 기술을 옹호하는 사람입니다. 그는 Java, JavaScript, Golang 및 Angular, NativeScript, Apache Cordova와 같은 다양한 프레임워크에 대한 경험이 있습니다. Nic은 웹 및 모바일 개발을 보다 쉽게 이해할 수 있도록 자신의 개발 경험에 대해 글을 쓰고 있습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.