Step-by-step Guide

Step 1. Create React App

# NPM
npx create-react-app your-app-name

# Yarn
yarn create react-app your-app-name
# NPM
cd your-app-name
npm start

# Yarn
cd your-app-name
yarn start

Step 2. Fetch GraphQL (Relay 없이 fetch() 사용)

2.1. GitHub GraphQL Authentication

# your-app-name/.env.local
REACT_APP_GITHUB_AUTH_TOKEN=<TOKEN>

2.2. A fetchGraphQL Helper

2.3. Fetching GraphQL From React

Step 3. When To Use Relay (Relay 사용해 데이터 가져오기)

step2를 사용하면, 어플리케이션의 규모가 커지는 속도와 크기에 대응하기 어려워진다.

이 때 Relay를 사용하면 빠르고 믿을 수 있는 방식으로 이에 대응할 수 있는데, 이유는 다음과 같다.

  1. GraphQL 프래그먼트, 데이터 일관성, mutations을 컴포넌트에 위치시켜 데이터 의존성을 모아놓기 (colocating)

Step 4. Adding Relay To Our Project

Relay는 3가지 핵심으로 이루어져있다.

  1. relay-compiler : 컴파일러 (빌드 타임에 사용됨)

  2. relay-runtime : 코어 런타임 (React 친화적)

  3. react-relay : React integration layer

4.1. Configure Relay Compiler

Relay example app의 .graphql 스키마 카피를 다운로드 받기 위해

package.json 설정은 다음과 같다.

여기서, GraphQL을 사용하게 되면 Relay는 이를 감지하여 해당 프로젝트에서 작성한 쿼리를 나타내는 코드를 your-app-name/src/__generated__/ 에 생성한다.

4.2. Configure Relay Runtime

컴파일러 설정이 완료되었으니 런타임을 세팅할 수 있는데, 이는 Relay에게 우리의 GraphQL 서버와 어떻게 연결할 것인지에 대해 알려주는 것과 같다.

위의 코드를 동일하게 사용하되, 추가적으로 Relay Environment 를 정의한다. 이는 서버 (Relay Network) 에 저장된 캐시를 어떻게 활용할 것인지에 대해 캡슐화하는 것을 의미한다.

Step 5. Fetching a Query With Relay

  1. RepositoryNameQuery

    • 쿼리를 정의한다.

  2. preloadQuery

    • 사전에 정의한 RelayEnvironment와 RepositoryNameQuery, 쿼리 변수(args)를 전달한다.

  3. AppRoot

    • <RelayEnvironmentProvider> 은 현재 Relay Environment 인스턴스와의 소통 방식을 child 컴포넌트에 전달한다.

    • <Suspense> 는 child가 suspend할 경우의 fallback을 지정한다.

Last updated