GraphQL에 대해서나 장점은 검색하면 잘 나오기 때문에 생각나는 정도로만 적었다.
Relay 기초 세팅 정도는 사이트에 잘 나와있어서 실제 사용 예시만 적었다.
완벽한 정답은 아님
GraphQL이란?
- API 통신 쿼리 언어이다
- 쿼리 언어라고 하면 조금 어렵게 다가올 수도 있을 것 같은데 그냥 REST API의 단점을 보완한 API 호출 방식이라고 생각하면 쉬울 듯하다.
장점(프론트 기준)
- 단일 API 호출로 원하는 데이터를 받아올 수 있다.
- 받아올 데이터를 먼저 정의해두기 때문에 직관적이고 명시적이다.
- 데이터 수정, 삭제, 업데이트의 메소드가 하나로 이루어져 있다.
- react component에서 자신이 필요 없는 데이터여도 자식에게 전달해 주기 위해서 props를 받아와야만 하는 단점을 보완할 수 있다.(컴포넌트 간 의존성 줄임)
React-Relay
참고-relay 공식문서
#기초 세팅은 되어있다고 가정
#Next.js와 Typescrip 기반으로 개발
GraphQL 사용하기
1. Schema 정의
- 루트 폴더에 schema.gql를 만들고 type Query에 불러올 데이터를 넣어준다.
- 자세한 데이터 내용은 type Query에 작성한 내용과 같은 이름으로 type을 정해준다.
// schema.gql
type Query {
products: ProductNode!
}
// 제품의 리스트와 함께 페이지네이션, 제품의 총 개수 등을 넘겨 받음
type ProductNode {
total: Int!
hasNext: Boolean!
nodes: [Product!]!
}
// 실질적인 제품 정보 데이터
type Product {
id: ID!
title: String!
description: String!
image: String!
tags: [Tag!]
category: String!
}
type Tag {
id: ID!
text: String!
}
2. Query 호출
- 데이터를 불러오고자 하는 파일에 정의해둔 query를 호출한다.
import { graphql, useQuery } from "relay-hooks";
export const query = graphql`
query ProductQuery {
products { // 위 schema에서 정의해주었던 products와 연결된 type 내용과 똑같이 작성해준다.
total
hasNext
nodes {
id
title
description
image
tags {
id
text
}
category
}
}
}
`;
const { data } = useQuery(query);
- 위 data를 콘솔로 찍어보면 아래와 같이 나올 것이다.
product: {
total: 68,
hasNext: true
nodes [
{
id: 11,
title: "query test용 11번 제목",
description: "테스트용으로 작성된 내용입니다. 어쩌구 저쩌구..",
image: "11번 image 주소",
tags: [
{
id: 1
text: "GraphQL"
},
{
id: 2
text: "Relay"
}
],
category: "GraphQL"
},
{
id: 12,
title: "query test용 12번 제목",
description: "어쩌구 저쩌구..",
image: "12번 image 주소",
tags: [
{
id: 1
text: "GraphQL"
},
{
id: 2
text: "Relay"
}
],
category: "GraphQL"
},
]
}