예꾸
개발자국
예꾸
전체 방문자
오늘
어제
  • 분류 전체보기 (111)
    • CS (6)
      • 데이터베이스 (5)
      • 운영체제 (0)
      • Computer Architecture (1)
    • 끄적끄적 (4)
    • 이론 (29)
      • 알고리즘 (18)
      • 자료구조 (4)
      • WEB (2)
      • JS (2)
      • Git (2)
      • Python (1)
    • 면접준비 (3)
      • Vue (1)
      • Design Pattern (1)
      • Frontend (1)
    • 개발기술 (20)
      • Git PUSH 자동화 (3)
      • VUE (1)
      • Linux (2)
      • MERN Stack (2)
      • React기반 Gatsby로 블로그 개발하기 (6)
      • Typescript (0)
      • 감정일기장(React) (3)
      • CI CD (3)
    • 코드트리 (6)
      • 블로그 챌린지 (3)
      • 모의시험 (3)
    • 취업준비 (3)
      • 코딩테스트 후기 (3)
    • 프로그래머스 (8)
      • SQL (7)
      • 알고리즘 (1)
    • 백준 (31)
      • 그리디(탐욕법) (6)
      • 구현 (5)
      • 그래프탐색(dfs, bfs) (5)
      • 완전탐색 (5)
      • 문자열 (5)
      • 누적합 (2)
      • DP(다이나믹 프로그래밍) (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준 그리디
  • 나만의공부노트
  • 코드트리
  • 알고리즘
  • 백준 완전탐색
  • 프로그래머스 SQL
  • 백준 구현
  • 자료구조
  • 운영체제
  • 백준 문자열
  • JS
  • React
  • 컴퓨터 시스템의 구조
  • 백준 그래프탐색
  • 코드트리 추천
  • javascript
  • 코딩테스트
  • gatsby
  • 코딩테스트실력진단
  • 프로그래머스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
예꾸

개발자국

[React기반 Gatsby로 블로그 개발하기] GraphQL 사용
개발기술/React기반 Gatsby로 블로그 개발하기

[React기반 Gatsby로 블로그 개발하기] GraphQL 사용

2022. 7. 14. 03:00

GraphQL에서의 Query 사용법

  • GraphQL은 필요한 데이터만 받아올 수 있다는 점에서 매력을 가진다

[입력값]

query getPeopleList {
  allPeople {
    edges {
      node {
        id
        name
      }
    }
  }
}

[결과 반환값]

"data": {
    "allPeople": {
      "edges": [
        {
          "node": {
            "id": "cGVvcGxlOjE=",
            "name": "Luke Skywalker"
          }
        },
        {
          "node": {
            "id": "cGVvcGxlOjQ=",
            "name": "Darth Vader"
          }
        },
      ]
    }
  }
}

이처럼 원하는 데이터만 가져올 수 있다

 

GraphiQL : 강력한 기능

Gatsby에서는 홈페이지의 메타데이터, 마크다운 관련 데이터, 이미지 데이터 등을 Query를 통해 얻어올 수 있습니다.

GraphQL은 GraphiQL라는 IDE를 제공하는데 이를 통해 어떤 데이터를 요청할 수 있는지 알 수 있을 뿐더러 `쿼리 요청 전에 잠재적인 에러를 알려줄 수 있는 강력한 기능`을 제공한다

// 로컬 서버 실행시 나타나는 해당 GraphiQL IDE에 접속
<http://localhost:8000/___graphql>

IDE를 통해 사이트 메타데이터를 요청합니다

Gatsby에서 메타데이터는 `gatsby-config.js` 파일에서 확인할 수 있습니다

아래코드는 메타데이터를 바다오기 위해 작성한 코드.

query {
  site {
    siteMetadata {
      author
      description
      title
    }
  }
}

아래와 같이 gatsby-config.js에 있는 메타데이터 정보들을 가져온 것을 확인할 수 있습니다

 

Gatsby에서 GraphQL Query 사용법

  1. Query 정의변수로서 정의가 불가능하고 StaticQuery라는 기능을 통해 정의 가능
  2. Gatsby에서는 기본적으로 pages 폴더 내부의 파일과 Gatsby API를 통해 생성해주는 페이지의 템플릿에서만 Query 정의가 가능하다
  1. pages 폴더 내부에 있는 컴포넌트에서는 아래와 같이 Query 정의하고 요청할 수 있음

▶ src/pages/info.tsx

import React, { FunctionComponent } from 'react'
import { graphql } from 'gatsby'
import Text from 'components/Text'

type InfoPageProps = {}

const InfoPage: FunctionComponent<InfoPageProps> = function () {
  return (
    <div>
      <Text text="Hello" />
    </div>
  )
}

export default InfoPage

export const metadataQuery = graphql`
  {
    site {
      siteMetadata {
        title
        description
        author
      }
    }
  }
  1. 아래와 같이 변수에 Qeury를 담아주고 이를 Export해주면 Gatsby 내부적으로 요청을 보냄
  2. 보낸 요청에 대한 응답으로 데이터를 Props로 전달해줌 (아래 데이터가 넘어옴)
{
  "data": {
    "site": {
      "siteMetadata": {
        "author": "@gatsbyjs",
        "description": "Kick off your next, great Gatsby project with this default starter. This barebones starter ships with the main Gatsby configuration files you might need.",
        "title": "Gatsby Default Starter"
      }
    }
  }
}
  1. data라는 키값 제외하면 위에 정의했던 Query형식과 일치
  2. 컴포넌트에서 받는 Props 객체의 data key값으로 Query에 대한 결과 값이 저장되어있어 아래와 같이 불러와 사용할 수 있음
import React, { FunctionComponent } from 'react'
import { graphql } from 'gatsby'
import Text from 'components/Text'

type InfoPageProps = {
  data: {
    site: {
      siteMetadata: {
        title: string
        description: string
        author: string
      }
    }
  }
}

const InfoPage: FunctionComponent<InfoPageProps> = function ({
  data: {
    site: {
      siteMetadata: { title, description, author },
    },
  },
}) {
  return (
    <div>
      <Text text={title} />
      <Text text={description} />
      <Text text={author} />
    </div>
  )
}

export default InfoPage

export const metadataQuery = graphql`
  {
    site {
      siteMetadata {
        title
        description
        author
      }
    }
  }
`;

위에서 확인한 쿼리 반환 결과 값에 따라 Props 타입을 지정해주었으며, Destructuring Assignment 문법을 활용해 title, description, author 값만 추출해 사용할 수 있습니다.

이렇게 Query를 통해 데이터 형식을 쉽게 파악할 수 있기 때문에 Props 타입 정의도 엄청 간편합니다.

 

`아래는 localhost:8000/info 결과값`

 

    '개발기술/React기반 Gatsby로 블로그 개발하기' 카테고리의 다른 글
    • [React기반 Gatsby로 블로그 개발하기] EmotionJS
    • [React기반 Gatsby로 블로그 개발하기] Gatsby Link API
    • [React기반 Gatsby로 블로그 개발하기] Typescript 적용하기
    • [React기반 Gatsby로 블로그 개발하기] Gatsby & GraphQL
    예꾸
    예꾸
    비전공자 옒의 개발이야기💻

    티스토리툴바