๐โโ๏ธ Apollo Client guild ๊ณต์๋ฌธ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌ ํ๊ธ์ ๋๋ค * ๋ชจ๋ ์ด๋ฏธ์ง,์์ ์ถ์ฒ๋ ๊ณต์๋ฌธ์์ ๋๋ค (์ง์ ์์ ์ค)
:https://www.apollographql.com/docs/react/data/queries
graphQl ์ฌ์ฉ๋ฒ: https://graphql.org/learn/queries/
Apollo client ์ฌ์ฉํด ์๋ฒ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๋ด ์๋ค
apollo client ์ API ์ธ useQuery ํ ์ค๋ฅผ ์ฌ์ฉํ๋ค
ReactQuery , swr ๊ณผ ๋น์ทํ ์์์ ๋๋๊ฒ ํน์ง์ด๋ค
๊ทธ๋ก ๊ทธ๋ด๊ฒ์ด ์บ์ฑ๋ ํด์ค๋ค
Apollo ํด๋ผ์ด์ธํธ์ ์บ์ฑ
์ด๋ฐ ํํ๋ก ์ ์ฅ๋๋ค
flat ํ ์ด๋ธ (cash๋ด์ํ ์ด๋ธ) ์ ์ค์ฒฉ ๋ฐ์ดํฐ๋ฅผ InMemoryCache์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ ์ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทํ ํด์ผ ํ๋ค.
์ ๊ทํ ์ ์ฅ๊ณผ์ ์ ๋ง์น ์๋์ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ตฌ์ฑ๊ณผ ๋น์ทํ๋ค
Apollo ํด๋ผ์ด์ธํธ ์บ์ ๊ตฌ์ฑ
์๋์ ๊ฐ์ด ์ฌ์ฉํ๊ณ
const cache = new InMemoryCache({ addTypename:..., resultCaching:..., typePolicies:{ ... , ... , })
์ต์ ๋ค์ ์๋ ์ ๊ฐ๋ค
์บ์ ID ์ง์
typePolicies: { AuthRootQuery: { keyFields: [] }, HospitalRootQuery: { keyFields: [] },
์ ๊ทํ
Apollo Client ์บ์๊ฐ ์ฟผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ๋ค์ ์ํํ๋ค.
1.๊ฐ์ฒด๋ฅผ ํ์ธํ๋ค. (Identify objects)
2.์บ์ ID๋ฅผ ๋ง๋ ๋ค. (Generate cache IDs)
3.๊ฐ์ฒด์ ํ๋๋ฅผ ๋ ํผ๋ฐ์ค๋ก ๋์ฒดํ๋ค. (Replace object field with references)
4.์ ๊ทํ๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ค.
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ต์ ํ์ธ
๋๊ฐ ์ง ๋ฐฉ์ polling ๊ณผ refetching ์ ์ฌ์ฉํ๋ค
polling
์ด๋ฐ์์ผ๋ก ๋ฐ๋ฆฌ์ธ์ปจ๋๋ฅผ ์ค๋ค
์์ ๊ฐ์ ํํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ ์ผ๋ก ์ฌ์ฉํ ์์๋ค
refetching
:๋ค์ ๊ฐ์ ธ์ค๊ธฐ
onClick ์ด๋ฒคํธ์๋ง๋ค refetch ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ ๋ณด๋ฅผ ๋ค์ ๋ฐ์์ค๊ณ ์๋ค
๊ทธ๋ฌ๋ ์ฌ์ด๋์ดํํธ (๋ก๋ ์ํ์ ์ฝ๊ฐ์ ๋ณต์ก์ฑ์ด) ์ด์๋ค ์๋์์ ์์ธํ ๋ค๋ฃฐ ์์
์บ์์ ๋ฐ์ดํฐ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ
Apollo client ์์ ์บ์์ ์ ๊ทผํ๊ธฐ ์ํ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ์์ ์ง์ํ๋ค
readQuery
์บ์์์ ์ง์ GraphQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค
ID๊ฐ 5์ธ ์บ์๋ ํ ์ผ ํญ๋ชฉ์ ๊ฐ์ ธ์ต๋๋ค.
์ด ๊ฐ์ฒด์ ํ์ํ ๋ณ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ ํ์ด ์ผ์นํ์ง ์๋ ๋ณ์๋
null
์ ๋ฐํํฉ๋๋ค.
useQuery ๋ loading ์ ๋ฐํํ๋ค
๊ทธ๋ผ ์ฌํธ์ถ์(refetch) ์์๋ loading ์ํ๊ฐ ๋ณํ ๊น?
์๋๋ค ํธ์ถ๋ ๋ฐ์ดํฐ๋ ๊ทธ๋๋ก์ด๊ณ loading ๊ฐ๋ ๋ณํ์ง ์๋๋ค
๊ทธ๋ผ ์ฌํธ์ถ์ ๋ก๋ฉ ์ํ์ ๋ํด์ ์ฌ์ฉ์์๊ฒ ์๋ ค์ฃผ๊ณ ์ถ์ผ๋ฉด ์ด๋ป๊ฒ ํ ๊น?
๋ฒ์ญ์ด ์ด์ํ๋ฐ... useQuery ํ ์์ ์กฐ๊ฑด(notifyOnNetworkStatusChange) ์ ๊ฑธ์ด์ฃผ๋ฉด ๋๋ค
if (networkStatus === NetworkStatus.refetch) return 'Refetching!';
networkStatus์ refetch ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ก๋ ์ํ๋ฅผ ๊ฐ์งํ๋ค
NetworkStatus ์ํ๋ ์๋์ ๊ฐ์ด enum ์ผ๋ก ์ ์ ๋์ด์๋ค(5๋ ์ด๋ฐ๋บด๋จน์๊ฒจ)
export enum NetworkStatus { loading = 1, setVariables = 2, fetchMore = 3, refetch = 4, poll = 6, ready = 7, error = 8, }
https://github.com/apollographql/apollo-client/blob/main/src/core/networkStatus.ts
Apollo client ์ฌ์ฉํด ์๋ฒ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํด ๋ด ์๋ค
ํ๋ผ๋ฏธํฐ๋ค
uri ๋ฅผ ์๋ฃ์ผ๋ฉด link ์ต์ ํ์
query Mutation ์ํ์ ์ฌ์ฉ์๊ฐ ์ ์ํ Link ๊ฐ ์์ฐจ์ ์ผ๋ก ์คํ๋์ด Link๋ฅผ ํตํด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ์ด ํ ์์๋๋ก ๊ตฌํ ํ ์ ์๋ค
Advanced HTTP networking
link ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํจ
์ด๊ธฐ๋ฅ์ผ๋ก ๋คํธ์ํฌ ๋์ , ๋ฐ์ดํฐ ํ๋ฆ ์ ์ ์ด ํจ
์ธ๋๋ ๊ฐ์ฒด๋ชจ์์ผ๋ก ์ ์
Ex) link: from([ link.auth, link.error, link.persistedQueries, ]),
์์ ๋ฅผ ํ๋ฒ๋ณด์!
์๋ฌ ํธ๋ค๋ง ๋งํฌ๋ ํ๋ฒ ๋ณด์
์ข ๋ฅ
`from` ํจ์๋ ๊ฐ๋ณ ๋งํฌ์ ๋ฐฐ์ด์ ๊ฒฐํฉํฉ๋๋ค.
Custom Link
๋๋ต์ ์ธ ์์ ์๊ฐ์ ์์ ์ปจํ ์คํธ์ ์ถ๊ฐํ๋ ์์ฒญ ํธ๋ค๋ฌ๋ฅผ ์ ์ ํ๋ ์์
operation , forward ๋ ?
Context ๊ด๋ฆฌ
์์
์บ์ฑ์กฐํ
์ฌ์ฉ์ ์ธ์ฆ ํ ํฐ ์์
์ธ์ฆํ ํฐ์์ฐพ๊ณ ์บ์ํ๋ค์ 401 ์๋ต์์ ์ ๊ฑฐ
๊นํ ๋ฌธ์