๐Ÿ“ก 78. React Native์—์„œ GraphQL ์‚ฌ์šฉ ์™„์ „ ์ •๋ฆฌ โ€” Apollo Client, URQL, Relay ๋น„๊ต

JM_Devยท2025๋…„ 8์›” 13์ผ
post-thumbnail

๋ชจ๋ฐ”์ผ ์•ฑ์ด ์ ์  ๋ณต์žกํ•ด์ง€๋ฉด์„œ API ํ˜ธ์ถœ ๋ฐฉ์‹๋„ ๋‹ค์–‘ํ•ด์กŒ๋‹ค.
๊ธฐ์กด REST API๋งŒ ์‚ฌ์šฉํ•˜๋˜ ํ™˜๊ฒฝ์—์„œ GraphQL์„ ๋„์ž…ํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋ฐฉ์‹๊ณผ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง„๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” React Native ํ™˜๊ฒฝ์—์„œ GraphQL์„ ์‚ฌ์šฉํ•  ๋•Œ
๋Œ€ํ‘œ์ ์ธ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Apollo Client, URQL, Relay๋ฅผ ๋น„๊ตํ•˜๊ณ 
์„ค์น˜๋ถ€ํ„ฐ ์‚ฌ์šฉ ์˜ˆ์‹œ๊นŒ์ง€ ์ •๋ฆฌํ•œ๋‹ค.


๐Ÿ” 1. GraphQL์ด๋ž€?

GraphQL์€ Facebook์ด ๋งŒ๋“  API ์ฟผ๋ฆฌ ์–ธ์–ด๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋‹ค.

  • ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์š”์ฒญ ๊ฐ€๋Šฅ
  • ์—ฌ๋Ÿฌ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•œ ๋ฒˆ์˜ ์š”์ฒญ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ
  • ํƒ€์ž… ๊ธฐ๋ฐ˜ ์Šคํ‚ค๋งˆ๋กœ API ๋ฌธ์„œ์™€ ํƒ€์ž… ๋ณด์žฅ

โš™๏ธ 2. Apollo Client ์‚ฌ์šฉ๋ฒ•

์„ค์น˜

npm install @apollo/client graphql

๊ธฐ๋ณธ ์‚ฌ์šฉ ์˜ˆ์‹œ

import { ApolloClient, InMemoryCache, ApolloProvider, gql, useQuery } from '@apollo/client';

const client = new ApolloClient({
  uri: 'https://example.com/graphql',
  cache: new InMemoryCache(),
});

const GET_USER = gql`
  query {
    user(id: 1) {
      id
      name
    }
  }
`;

function User() {
  const { data, loading, error } = useQuery(GET_USER);

  if (loading) return <Text>Loading...</Text>;
  if (error) return <Text>Error!</Text>;

  return <Text>{data.user.name}</Text>;
}

export default function App() {
  return (
    <ApolloProvider client={client}>
      <User />
    </ApolloProvider>
  );
}

โšก 3. URQL ์‚ฌ์šฉ๋ฒ•

์„ค์น˜

npm install urql graphql

๊ธฐ๋ณธ ์‚ฌ์šฉ ์˜ˆ์‹œ

import { createClient, Provider, useQuery } from 'urql';

const client = createClient({
  url: 'https://example.com/graphql',
});

const GET_USER = `
  query {
    user(id: 1) {
      id
      name
    }
  }
`;

function User() {
  const [{ data, fetching, error }] = useQuery({ query: GET_USER });

  if (fetching) return <Text>Loading...</Text>;
  if (error) return <Text>Error!</Text>;

  return <Text>{data.user.name}</Text>;
}

export default function App() {
  return (
    <Provider value={client}>
      <User />
    </Provider>
  );
}

๐Ÿง  4. Relay ์‚ฌ์šฉ๋ฒ•

Relay๋Š” Facebook์ด ๋งŒ๋“  GraphQL ํด๋ผ์ด์–ธํŠธ๋กœ, ์„ฑ๋Šฅ๊ณผ ํƒ€์ž… ์•ˆ์ •์„ฑ์— ๊ฐ•์ ์ด ์žˆ๋‹ค.

์„ค์น˜

npm install react-relay relay-runtime graphql

Relay๋Š” ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๋ฏ€๋กœ ์„ค์ •์ด ๋‹ค์†Œ ๋ณต์žกํ•˜์ง€๋งŒ, ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ•๋ ฅํ•˜๋‹ค.


๐Ÿ“Š 5. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋น„๊ต

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์žฅ์ ๋‹จ์ ์ถ”์ฒœ ์‚ฌ์šฉ ํ™˜๊ฒฝ
Apollo Clientํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ, ์ƒํƒœ๊ณ„ ํฌ๋‹ค๋ฒˆ๋“ค ํฌ๊ธฐ ํผ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ
URQL๊ฐ€๋ณ๊ณ  ๋น ๋ฆ„๊ธฐ๋Šฅ ์ œํ•œ๊ฐ„๋‹จํ•œ ์•ฑ, ๋น ๋ฅธ ์‹œ์ž‘
Relay์„ฑ๋Šฅ ์ตœ์ ํ™”, ํƒ€์ž… ์•ˆ์ „์„ค์ • ๋ณต์žก๋Œ€๊ทœ๋ชจ, Facebook ์Šคํƒ€์ผ ๊ฐœ๋ฐœ

๐Ÿงฉ 6. ์‹ค์ „ ํŒ

  1. ์บ์‹œ ์ „๋žต์„ ๋ฏธ๋ฆฌ ์„ค๊ณ„ํ•ด์•ผ ์„ฑ๋Šฅ์„ ์ตœ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. GraphQL ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ํƒ€์ž…์„ ์ž๋™ ์ƒ์„ฑํ•˜๋ฉด ์ƒ์‚ฐ์„ฑ์ด ํฌ๊ฒŒ ์˜ค๋ฅธ๋‹ค. (graphql-codegen)
  3. ๋ชจ๋ฐ”์ผ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•ด ์˜คํ”„๋ผ์ธ ์ง€์› ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

๐Ÿ“Œ โ€œGraphQL์„ ์„ ํƒํ•˜๋Š” ์ˆœ๊ฐ„, ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์„ค๊ณ„๊ฐ€ API ์„ค๊ณ„์™€ ํ•˜๋‚˜๊ฐ€ ๋œ๋‹ค.โ€


profile
๊ฐœ๋ฐœ์ž๋กœ ์ทจ์—…์„ ์ค€๋น„ ์ค‘ ์ด๋ฉฐ, ์—ด์‹ฌํžˆ ๊ณต๋ถ€ ์ค‘ ์ž…๋‹ˆ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€