Skip to content

Commit fe69e6c

Browse files
committedFeb 26, 2024
add: inside React Query docs ์ถ”๊ฐ€
1 parent ccfd8b0 commit fe69e6c

File tree

3 files changed

+163
-2
lines changed

3 files changed

+163
-2
lines changed
 

โ€ŽREADME.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,10 @@
6565

6666
<br />
6767

68-
## ๐Ÿ“ƒ API Reference
68+
## ๐Ÿ“ƒ ๊ธฐํƒ€ ์ฐธ๊ณ  ๋ฌธ์„œ
6969

7070
1. [QueryClient ์ฃผ์š” ๋‚ด์šฉ ์ •๋ฆฌ ๋ฌธ์„œ](https://github.com/ssi02014/react-query-tutorial/tree/master/document/queryClient.md)
71+
2. [๊ธฐ๋ณธ์ ์ธ React Query ์•„ํ‚คํ…์ฒ˜ ์‚ดํŽด๋ณด๊ธฐ: inside React Query](https://github.com/ssi02014/react-query-tutorial/tree/master/document/insideReactQuery.md)
7172

7273
<br />
7374

โ€ŽREADME.v4.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,10 @@
5959

6060
<br />
6161

62-
## ๐Ÿ“ƒ API Reference
62+
## ๐Ÿ“ƒ ๊ธฐํƒ€ ์ฐธ๊ณ  ๋ฌธ์„œ
6363

6464
1. [QueryClient ์ฃผ์š” ๋‚ด์šฉ ์ •๋ฆฌ ๋ฌธ์„œ](https://github.com/ssi02014/react-query-tutorial/tree/master/document/queryClient.md)
65+
2. [๊ธฐ๋ณธ์ ์ธ React Query ์•„ํ‚คํ…์ฒ˜ ์‚ดํŽด๋ณด๊ธฐ: inside React Query](https://github.com/ssi02014/react-query-tutorial/tree/master/document/insideReactQuery.md)
6566

6667
<br />
6768

โ€Ždocument/insideReactQuery.md

+159
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
# ๐Ÿ’ป Inside React Query
2+
3+
- ํ•ด๋‹น ๋ฌธ์„œ๋Š” [tkdodo - inside-react-query](https://tkdodo.eu/blog/inside-react-query) ํฌ์ŠคํŒ…์„ ๋ฒˆ์—ญํ•˜๊ณ , ์ข€ ๋” ์ดํ•ด์— ํ•„์š”ํ•œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.
4+
5+
<br />
6+
7+
## Intro
8+
9+
- React Query๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฆฌ๋ Œ๋”๋งํ•ด์•ผ ๋˜๋Š” ์‹œ์ ์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๊ณผ ์–ด๋–ป๊ฒŒ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋ฉฐ, ์–ด๋–ป๊ฒŒ ํ”„๋ ˆ์ž„์›Œํฌ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š์„๊นŒ์š”?
10+
- ์œ„ ์งˆ๋ฌธ๋“ค์„ ์ดํ•ดํ•˜๋ ค๋ฉด React Query์˜ ๋‚ด๋ถ€๋ฅผ ๋“ค์—ฌ๋‹ค๋ณด๊ณ  useQuery๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ์‹ค์ œ๋กœ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๋ถ„์„ํ•ด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
11+
12+
<br >
13+
14+
## QueryClient
15+
16+
<img width="900" alt="แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-27 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 1 41 04" src="https://github.com/ssi02014/react-query-tutorial/assets/64779472/8c0fe216-f27c-4c33-b4e4-1334ddacc294">
17+
18+
<br />
19+
20+
- ๋ชจ๋“  ๊ฒƒ์€ `QueryClient`์—์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
21+
- QueryClient๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•  ๋•Œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ `QueryClientProvider`๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
22+
23+
```tsx
24+
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
25+
26+
// โฌ‡๏ธ this creates the client
27+
const queryClient = new QueryClient();
28+
29+
function App() {
30+
return (
31+
// โฌ‡๏ธ this distributes the client
32+
<QueryClientProvider client={queryClient}>
33+
<RestOfYourApp />
34+
</QueryClientProvider>
35+
);
36+
}
37+
```
38+
39+
<br />
40+
41+
- QueryClientProvider๋Š” `React Context`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์— QueryClient๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
42+
- QueryClient๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ queryClient ์ธ์Šคํ„ด์Šค๋Š” `์•ˆ์ •์ ์ธ ๊ฐ’`์ด๋ฉฐ, ํ•œ ๋ฒˆ๋งŒ ์ƒ์„ฑ๋˜๋ฏ€๋กœ React Context๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.
43+
- ์•ฑ์ด ๋‹ค์‹œ ๋ฆฌ๋ Œ๋”๋ง ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹จ์ง€ useQueryClient๋ฅผ ํ†ตํ•ด queryClient๋Œ€ํ•œ `์•ก์„ธ์Šค ๊ถŒํ•œ๋งŒ ๋ถ€์—ฌ`ํ•ฉ๋‹ˆ๋‹ค.
44+
- queryClient ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹ค์ˆ˜๋กœ ์ž์ฃผ ๋‹ค์‹œ ์ƒ์„ฑ๋˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ๋ฉ๋‹ˆ๋‹ค.
45+
46+
<br />
47+
48+
## A vessel that holds the cache(์บ์‹œ๋ฅผ ๋‹ด๋Š” ๊ทธ๋ฆ‡)
49+
50+
- ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, QueryClient ์ž์ฒด๋Š” ์‹ค์ œ๋กœ ๋งŽ์€ ์ผ์„ ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
51+
- QueryClient๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” `QueryCache`์™€ `MutationCache`๋ฅผ ์œ„ํ•œ ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ชจ๋“  `query`์™€ `mutation`์— ๋Œ€ํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ๊ฐ’์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, cache(์บ์‹œ)๋กœ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•œ ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
52+
- ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ๋Š” `cache์™€ ์ง์ ‘ ์ƒํ˜ธ ์ž‘์šฉํ•˜์ง€ ์•Š๊ณ  QueryClient๋ฅผ ํ†ตํ•ด cache์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.`
53+
54+
<br />
55+
56+
## QueryCache
57+
58+
- queryClient๋Š” ์šฐ๋ฆฌ๊ฐ€ cache๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด cache(QueryCache)๊ฐ€ ๋ฌด์—‡์ผ๊นŒ์š”?
59+
60+
<img width="900" alt="แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-27 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 1 53 07" src="https://github.com/ssi02014/react-query-tutorial/assets/64779472/a4c6838f-afd8-4847-a195-19963b445180">
61+
62+
- ๊ฐ„๋‹จํ•˜๊ฒŒ, QueryCache๋Š” `in-memory` ๊ฐ์ฒด ์ž…๋‹ˆ๋‹ค. key๋Š” `์•ˆ์ •์ ์œผ๋กœ ์ง๋ ฌํ™”๋œ ๋ฒ„์ „์˜ queryKey`(queryKeyHash๋ผ๊ณ  ํ•จ)์ด๊ณ , value๋Š” `Query Class์˜ ์ธ์Šคํ„ด์Šค`์ž…๋‹ˆ๋‹ค.
63+
- React Query๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ `in-memory`์—๋งŒ ์ €์žฅํ•˜๊ณ , ๋‹ค๋ฅธ ๊ณณ์—๋Š” ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๊ต‰์žฅํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
64+
65+
<br />
66+
67+
<img width="900" alt="แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-27 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 2 05 50" src="https://github.com/ssi02014/react-query-tutorial/assets/64779472/7a231716-2c80-4be4-aecc-f547fb255268">
68+
69+
> ํ•ด์„: ์ข€ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋ง์”€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์บ์‹œ๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ์ด๋ฉฐ ํƒญ์— ๋Œ€ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปจํ…์ŠคํŠธ์˜ ์ˆ˜๋ช… ๋‚ด์—๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ ๊ณ ์นจ, ํ•˜๋“œ ํƒ์ƒ‰(pushState ๋˜๋Š” replaceState ํžˆ์Šคํ† ๋ฆฌ apis๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ) ๋˜๋Š” ํƒญ์„ ๋‹ซ๊ฑฐ๋‚˜ ์—ด๋ฉด ์บ์‹œ๊ฐ€ ์œ ์ง€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
70+
71+
- https://github.com/TanStack/query/issues/1677#issuecomment-766137011
72+
- ์ข€ ๋” cache์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์œ„ ์ด์Šˆ์—์„œ React Query์˜ ์ฐฝ์‹œ์ž `tannerlinsley`๊ฐ€ ์–ธ๊ธ‰ํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.
73+
- `tannerlinsley`๋Š” React Query์˜ cache๋Š” in-memory ๊ฐ์ฒด์ด๋ฉฐ, ๋ธŒ๋ผ์šฐ์ € ํƒญ์— ๋Œ€ํ•œ `JavaScript Context(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ) ์ƒ๋ช… ์ฃผ๊ธฐ ๋‚ด์—์„œ๋งŒ ์กด์žฌ`ํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.
74+
- ์ฆ‰, React Query ์บ์‹œ๋Š” ๋ธŒ๋ผ์šฐ์ € ํƒญ ๊ฐ„์— ๊ณต์œ ๋˜์ง€๋„ ์•Š๊ณ , ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์บ์‹œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์™€ ๊ฐ™์€ ์™ธ๋ถ€ ์ €์žฅ์†Œ์— ์บ์‹œ๋ฅผ ์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด [persisters](https://tanstack.com/query/v5/docs/framework/react/overview)๋ฅผ ์‚ดํŽด๋ณด๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.
75+
76+
<br />
77+
78+
### in-memory?
79+
80+
- ์œ„์—์„œ ๋งํ•˜๋Š” in-memory๋Š” `๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ`๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํƒญ์€ ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์Šต๋‹ˆ๋‹ค.
81+
- ์ด๋ฅผ ํ†ตํ•ด ๊ฐ ๋ธŒ๋ผ์šฐ์ € ํƒญ์ด ์ž์‹ ๋งŒ์˜ ๋…๋ฆฝ๋œ JavaScript ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
82+
- ์ด๋Ÿฌํ•œ ํŠน์ง•๋•Œ๋ฌธ์— ํ•œ ํƒญ์—์„œ ์ƒ์„ฑ๋œ ๋ณ€์ˆ˜, ๊ฐ์ฒด ๋“ฑ์€ ๋‹ค๋ฅธ ํƒญ๊ณผ ๊ณต์œ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
83+
84+
<br />
85+
86+
## Query
87+
88+
<img width="900" alt="แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-27 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 2 28 43" src="https://github.com/ssi02014/react-query-tutorial/assets/64779472/499b4aed-73a3-4eeb-9de9-225d8b9a6992">
89+
90+
- QueryCache์—๋Š” Query๋“ค์ด ์žˆ์œผ๋ฉฐ Query์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ๋กœ์ง๋“ค์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
91+
- Query๋Š” Query์— ๋Œ€ํ•œ `๋ชจ๋“  ์ •๋ณด(๋ฐ์ดํ„ฐ, ์ƒํƒœ ํ•„๋“œ ๋˜๋Š” ๋งˆ์ง€๋ง‰ fetching์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ฐ™์€ meta ์ •๋ณด)`๊ฐ€ ํฌํ•จ๋  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ query ํ•จ์ˆ˜๋ฅผ `์‹คํ–‰`ํ•˜๊ณ  `์žฌ์‹œ๋„`, `์ทจ์†Œ`, `์ค‘๋ณต ์ œ๊ฑฐ` ๋กœ์ง์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
92+
- Query์—๋Š” ๋‚ด๋ถ€ ์ƒํƒœ ๋จธ์‹ ์ด ์กด์žฌํ•ด์„œ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์— ๋น ์ง€์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
93+
- ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋ฏธ fetching์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ query ํ•จ์ˆ˜๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น fetching์—์„œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
94+
- query๊ฐ€ ์ทจ์†Œ๋˜๋ฉด ์ด์ „ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
95+
- ํ•ต์‹ฌ ํฌ์ธํŠธ๋Š” **query๊ฐ€ ๋ˆ„๊ฐ€ query data์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ณ , ํ•ด๋‹น ๊ด€์ฐฐ์ž(Observers)๋“ค์—๊ฒŒ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์•Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.**
96+
97+
<br />
98+
99+
## QueryObserver
100+
101+
<img width="900" alt="แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-27 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 2 43 35" src="https://github.com/ssi02014/react-query-tutorial/assets/64779472/099af439-67d6-48e7-a14b-9de5b3ee3150">
102+
103+
- Observer๋Š” query์™€ query๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์— `์ ‘์ฐฉ์ œ ์—ญํ• `์„ ํ•ฉ๋‹ˆ๋‹ค.
104+
- Observer๋Š” `useQuery๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ƒ์„ฑ`๋˜๋ฉฐ, `ํ•ญ์ƒ ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ query๋ฅผ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค.`
105+
- ์ด๋Ÿฌํ•œ ํŠน์ง•๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” useQuery์— queryKey๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
106+
- Observer๋Š” ์กฐ๊ธˆ ๋” ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์ ํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.
107+
- Observer๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ `query์˜ ์†์„ฑ`์„ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ด€๋ จ ์—†๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์•Œ๋ฆด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
108+
- ์˜ˆ๋ฅผ ๋“ค์–ด, `data ํ•„๋“œ`๋งŒ ์‚ฌ์šฉ ํ•  ๊ฒฝ์šฐ background refetch์—์„œ `isFetching`์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ ์ด๋Š” ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ๊ด€๋ จ์—†๋Š” ์†์„ฑ์ด๋ฏ€๋กœ ๊ตณ์ด ๋ฆฌ๋ Œ๋”๋ง ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
109+
- ๋” ๋‚˜์•„๊ฐ€ ๊ฐ Observer๋Š” `select`์˜ต์…˜์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์—์„œ data ํ•„๋“œ์˜ ์–ด๋–ค ๋ถ€๋ถ„์— ๊ด€์‹ฌ์žˆ๋Š”์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
110+
- ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ [tkdodo - #2: React Query Data Transformations](https://tkdodo.eu/blog/react-query-data-transformations#3-using-the-select-option) ์—์„œ ์ฐธ๊ณ ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
111+
- staleTime ๋˜๋Š” interval fetching๊ณผ ๊ฐ™์€ ๋Œ€๋ถ€๋ถ„์˜ ํƒ€์ด๋จธ๋„ `Observe Level`์—์„œ ๋ฐœ์ƒ๋ฉ๋‹ˆ๋‹ค.
112+
113+
<br />
114+
115+
## Active and inactive Queries (ํ™œ์„ฑ ๋ฐ ๋น„ํ™œ์„ฑ ์ฟผ๋ฆฌ)
116+
117+
- Observer๊ฐ€ ์—†๋Š” query๋ฅผ ๋ฐ”๋กœ inactive(๋น„ํ™œ์„ฑ) query๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
118+
- ์•„์ง ์บ์‹œ์— ์žˆ์ง€๋งŒ ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
119+
- ์ด๋Ÿฌํ•œ inactive query๋Š” React Query Devtools๋ฅผ ์‚ดํŽด๋ณด๋ฉด ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์™ผ์ชฝ์˜ ์ˆซ์ž๋Š” ํ•ด๋‹น query๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋Š” Observer์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
120+
121+
<img width="269" alt="แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-27 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 2 58 00" src="https://github.com/ssi02014/react-query-tutorial/assets/64779472/fc672a68-deca-4409-8973-82a759c11f75">
122+
123+
<br />
124+
125+
## The Complete Picture of React Query Architecture (๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์•„ํ‚คํ…์ฒ˜ ์ „์ฒด ๊ทธ๋ฆผ)
126+
127+
<img width="900" alt="แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-27 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 2 59 50" src="https://github.com/ssi02014/react-query-tutorial/assets/64779472/2a3c898e-c4fe-4c11-bba1-df121431e488">
128+
129+
- ์œ„ ๊ทธ๋ฆผ์„ ์ข…ํ•ฉํ•ด๋ณด๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ๋กœ์ง์ด ํ”„๋ ˆ์ž„์›Œํฌ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” `Query Core`์•ˆ์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
130+
- `QueryClient`, `QueryCache`, `Query`, `QueryObserver`๊ฐ€ ๋ชจ๋‘ Query Core์— ์žˆ๋‹ค.
131+
- ๋”ฐ๋ผ์„œ, ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ์šฉ `Adapter(์–ด๋Œ‘ํ„ฐ)`๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
132+
- ๊ธฐ๋ณธ์ ์œผ๋กœ Observer๋ฅผ ๋งŒ๋“ค๊ณ , Observer๋ฅผ ๊ตฌ๋…ํ•˜๊ณ , Observer๊ฐ€ ์•Œ๋ฆผ์„ ๋ฐ›์œผ๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
133+
- [react](https://github.com/TanStack/query/blob/9d9aea5fb12eb89dec54c619845b3d226b53cf2b/packages/react-query/src/useBaseQuery.ts#L33-L115)์™€ [solid](https://github.com/TanStack/query/blob/9579dd893656d0a4a7ac0207a204d4b3735c329d/packages/solid-query/src/createBaseQuery.ts#L33-L131)์šฉ useQuery Adapter์—๋Š” ๊ฐ๊ฐ ์•ฝ 100์ค„์˜ ์ฝ”๋“œ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.
134+
135+
<br />
136+
137+
### Adapter(์–ด๋Œ‘ํ„ฐ)?
138+
139+
- Adapter๋Š” ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ๋˜๋Š” ์žฅ์น˜, ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์—์„œ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์žฅ์น˜๋‚˜ ํ”„๋กœ๊ทธ๋žจ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
140+
141+
<br />
142+
143+
## From a component perspective (์ปดํฌ๋„ŒํŠธ ๊ด€์ ์—์„œ)
144+
145+
<img width="900" alt="แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-02-27 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 3 13 58" src="https://github.com/ssi02014/react-query-tutorial/assets/64779472/bee9050d-0581-4e0a-bf15-945c3e6504b0">
146+
147+
- ๋งˆ์ง€๋ง‰์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋‹ค๋ฅธ ๊ฐ๋„์—์„œ ํ๋ฆ„์„ ์‚ดํŽด๋ด…์‹œ๋‹ค.
148+
- ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋˜๋ฉด `useQuery`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ `Observer`๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
149+
- ์ƒ์„ฑ๋œ `Observer`๋Š” `QueryCache`์— ์žˆ๋Š” `Query`๋ฅผ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค.
150+
- ์ด ๊ตฌ๋…์€ `Query`๊ฐ€ ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ `Query ์ƒ์„ฑ`์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๋ž˜๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๊ฒฝ์šฐ `background refetch`๋ฅผ ํŠธ๋ฆฌ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
151+
- fetching์„ ์‹œ์ž‘ํ•˜๋ฉด `Query`์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— `Observer`์—๊ฒŒ ์ด์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
152+
- ๊ทธ๋ ‡๋‹ค๋ฉด `Observer`๋Š” ๋ช‡ ๊ฐ€์ง€ ์ตœ์ ํ™”๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ž ์žฌ์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•ด ์•Œ๋ฆฐ๋ฉด ์ƒˆ ์ƒํƒœ๋ฅผ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
153+
- `Query` ์‹คํ–‰์ด ๋๋‚˜๋ฉด `Observer`์—๊ฒŒ๋„ ์ด ์‚ฌ์‹ค์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
154+
- ์œ„ ๋‚ด์šฉ์€ ๋งŽ์€ ์ž ์žฌ์  ํ๋ฆ„ ์ค‘ ํ•˜๋‚˜์— ๋ถˆ๊ณผํ•˜๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
155+
- ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ๊ฒƒ์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ ๋  ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ cache์— ์žˆ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
156+
- [tkdodo - #17: Seeding the Query Cache](https://tkdodo.eu/blog/seeding-the-query-cache) ํ•ด๋‹น ํฌ์ŠคํŒ…์—์„œ ๊ด€๋ จ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
157+
- **๋ชจ๋“  ํ๋ฆ„์— ๋Œ€ํ•œ ๋™์ผํ•œ ์ ์€ ๋Œ€๋ถ€๋ถ„์˜ ๋กœ์ง์ด React(or Vue, or Solid) ์™ธ๋ถ€์—์„œ ๋ฐœ์ƒํ•˜๊ณ  ์ƒํƒœ ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๊ฐ€ Observer์—๊ฒŒ ์ „๋‹ฌ๋˜๋ฉฐ, Observer๋Š” ์ปดํฌ๋„ŒํŠธ์—๋„ ์•Œ๋ ค์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.**
158+
159+
<br />

0 commit comments

Comments
 (0)