GraphQL 및 Gato GraphQL 소개
Gato GraphQL 가이드에 오신 것을 환영합니다. WordPress 사이트에 Gato GraphQL 플러그인을 설치하고, 설정하고, 사용하는 방법에 관한 풍부한 정보를 여기서 확인하실 수 있습니다.
GraphQL이란
GraphQL은 API 명세(specification)로, 클라이언트(브라우저의 웹사이트나 모바일 앱 등)가 필요한 데이터를 정확히 지정할 수 있으며, API를 구현한 서버가 그 내용을 정확히 반환합니다.
GraphQL 쿼리는 다음과 같은 형태입니다.
query {
posts {
id
title
content
author {
id
name
}
}
}서버로부터의 응답은 JSON 형식으로, 쿼리와 동일한 구조의 데이터를 포함합니다. 다음과 같은 형태입니다.
{
"data": {
"posts": [
{
"id": 1,
"title": "Hello world",
"content": "<p>How are you doing?</p>",
"author": {
"id": 1,
"name": "Leo"
}
},
{
"id": 2,
"title": "Scheduled post",
"content": "<p>This post is scheduled to be published in the future.</p>",
"author": {
"id": 2,
"name": "Markus"
}
},
{
"id": 3,
"title": "Lorem ipsum",
"content": "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>",
"author": {
"id": 3,
"name": "Socrates"
}
}
]
}
}GraphQL 서버는 데이터를 "뮤테이트(mutate)"(즉, 생성 및 업데이트)할 수도 있습니다. 이 경우 연산 키워드 query를 mutation으로 교체해야 합니다.
mutation {
createPost(input: {
title: "New post",
contentAs: { html: "Lorem ipsum dolor sit amet" }
}) {
id
status
}
}GraphQL 공식 사이트 graphql.org도 참고하시기 바랍니다.
Gato GraphQL이란
Gato GraphQL은 WordPress용 플러그인으로, 사이트를 GraphQL 서버로 변환하여 GraphQL 언어를 사용해 WordPress 사이트의 데이터를 가져오거나 수정할 수 있게 해줍니다.
Gato GraphQL이 추구하는 목표는 다음과 같습니다.
사용 편의성
WordPress의 철학은 기술적인 역량의 유무에 관계없이 누구나 소프트웨어를 사용할 수 있어야 한다는 것입니다. 이 플러그인은 그 철학을 실현하기 위해 API를 생성하고 상호작용하는 과정을 최대한 쉽게 만들고자 합니다.
예를 들어, Gato GraphQL은 WordPress 편집기가 제공하는 사용자 인터페이스를 통해 퍼시스티드 쿼리(persisted queries, 사전 정의된 데이터를 노출하는 엔드포인트로 REST 엔드포인트와 유사함)를 게시할 수 있습니다. 게시물을 작성하는 것처럼 누구나 접근할 수 있습니다.
빠른 성능
GraphQL 쿼리를 처리하려면 일반적으로 쿼리된 모든 엔티티의 데이터를 담은 그래프를 순회해야 합니다. 그래프의 노드 수가 많고 깊이가 깊을수록 이 과정에 걸리는 시간은 (지수 함수적으로) 증가합니다.
Gato GraphQL은 다른 접근 방식을 취합니다. 그래프 대신 컴포넌트 모델 구조를 사용해 GraphQL 쿼리를 처리하며, 쿼리 깊이에 대해 선형(지수 함수적이 아닌)으로 증가하는 프로세스로 동작합니다.
또한 GraphQL 쿼리에서 요청된 스키마 요소만 컴파일·검증·실행되고, GraphQL 스키마 전체가 대상이 되지 않습니다. 따라서 WordPress 사이트에 Custom Post Type이 3개 설치되어 있든 30개 설치되어 있든 쿼리 처리 시간은 동일합니다.
강력한 기능
API는 클라이언트와 서버 간의 주요 게이트웨이 역할을 합니다. 모든 요구 사항을 충족할 수 있도록 API가 어떤 면에서도 제한되지 않는 것이 중요합니다.
이 플러그인은 커스텀 기능, 외부 API 및 클라우드 기반 서비스를 통해 쿼리 실행 결과를 수정할 수 있습니다. 쿼리된 데이터는 필요에 따라 반복 및 조작할 수 있으며, 쿼리의 출력도 원하는 방식으로 변경할 수 있어 거의 불가능한 일이 없습니다.
보안성
GraphQL API는 적절히 관리되지 않으면 악의적인 행위자를 포함한 모든 사람에게 WordPress 사이트의 모든 데이터 접근을 노출시킬 수 있습니다. GraphQL 서버는 의도된 사용자만 데이터에 접근할 수 있도록 적절한 보안 조치를 제공해야 합니다.
이 플러그인은 보안을 매우 중시하며, 여러 보안 조치를 기본으로 구현하고 있습니다. 단일 엔드포인트 비활성화, 퍼시스티드 쿼리를 통한 데이터 노출, 설정 가능한 접근 제어 목록(사용자 로그인 여부, 특정 역할 또는 권한 보유 여부, 커스텀 규칙 기반)을 통한 데이터 접근 부여, 그리고 API를 공개 또는 비공개로 정의하는 것이 가능합니다.
미래 지향성
GraphQL은 계속 진화하는 표준이며, 커뮤니티는 미래의 명세에 추가될 새로운 기능에 대한 아이디어를 계속해서 제안하고 있습니다.
이 플러그인은 기다리는 것을 선호하지 않습니다. 스키마 네임스페이싱, 다중 쿼리 실행 등 제안된 많은 새로운 기능들을 이미 옵트인(opt-in) 기능으로 포함하고 있으며, 관리자가 명시적으로 활성화해야 합니다.