
๋ชจ๋ฐ์ผ ์ฑ์ด ์ ์ ๋ณต์กํด์ง๋ฉด์ API ํธ์ถ ๋ฐฉ์๋ ๋ค์ํด์ก๋ค.
๊ธฐ์กด REST API๋ง ์ฌ์ฉํ๋ ํ๊ฒฝ์์ GraphQL์ ๋์
ํ๋ฉด ๋ฐ์ดํฐ ์์ฒญ ๋ฐฉ์๊ณผ ๊ฐ๋ฐ ๊ฒฝํ์ด ํฌ๊ฒ ๋ฌ๋ผ์ง๋ค.
์ด๋ฒ ๊ธ์์๋ React Native ํ๊ฒฝ์์ GraphQL์ ์ฌ์ฉํ ๋
๋ํ์ ์ธ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Apollo Client, URQL, Relay๋ฅผ ๋น๊ตํ๊ณ
์ค์น๋ถํฐ ์ฌ์ฉ ์์๊น์ง ์ ๋ฆฌํ๋ค.
GraphQL์ Facebook์ด ๋ง๋ API ์ฟผ๋ฆฌ ์ธ์ด๋ก, ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์๋ค.
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>
);
}
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>
);
}
Relay๋ Facebook์ด ๋ง๋ GraphQL ํด๋ผ์ด์ธํธ๋ก, ์ฑ๋ฅ๊ณผ ํ์ ์์ ์ฑ์ ๊ฐ์ ์ด ์๋ค.
npm install react-relay relay-runtime graphql
Relay๋ ์ปดํ์ผ ๋จ๊ณ์์ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ๋ฏ๋ก ์ค์ ์ด ๋ค์ ๋ณต์กํ์ง๋ง, ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ๊ฐ๋ ฅํ๋ค.
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์ฅ์ | ๋จ์ | ์ถ์ฒ ์ฌ์ฉ ํ๊ฒฝ |
|---|---|---|---|
| Apollo Client | ํ๋ถํ ๊ธฐ๋ฅ, ์ํ๊ณ ํฌ๋ค | ๋ฒ๋ค ํฌ๊ธฐ ํผ | ๋๋ถ๋ถ์ ํ๋ก์ ํธ |
| URQL | ๊ฐ๋ณ๊ณ ๋น ๋ฆ | ๊ธฐ๋ฅ ์ ํ | ๊ฐ๋จํ ์ฑ, ๋น ๋ฅธ ์์ |
| Relay | ์ฑ๋ฅ ์ต์ ํ, ํ์ ์์ | ์ค์ ๋ณต์ก | ๋๊ท๋ชจ, Facebook ์คํ์ผ ๊ฐ๋ฐ |
graphql-codegen)๐ โGraphQL์ ์ ํํ๋ ์๊ฐ, ๋ฐ์ดํฐ ํ๋ฆ ์ค๊ณ๊ฐ API ์ค๊ณ์ ํ๋๊ฐ ๋๋ค.โ