Skip to content

Commit d61a259

Browse files
authored
docs: standardize English terminology in with-react-query documentation (feature-sliced#802)
1 parent 3c405bb commit d61a259

File tree

1 file changed

+51
-40
lines changed

1 file changed

+51
-40
lines changed

โ€Ži18n/kr/docusaurus-plugin-content-docs/current/guides/tech/with-react-query.mdxโ€Ž

Lines changed: 51 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ sidebar_position: 10
33
---
44
# React Query์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ
55

6-
## โ€œํ‚ค๋ฅผ ์–ด๋””์— ๋‘์–ด์•ผ ํ•˜๋Š”๊ฐ€โ€ ๋ฌธ์ œ
6+
## "Query Key ๋ฐฐ์น˜" ๋ฌธ์ œ
77

8-
### ํ•ด๊ฒฐ์ฑ… โ€” ์—”ํ‹ฐํ‹ฐ๋ณ„๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ
8+
### ํ•ด๊ฒฐ์ฑ… โ€” entities๋ณ„๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ
99

10-
ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด๋ฏธ ์—”ํ‹ฐํ‹ฐ ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ ์š”์ฒญ์ด ๋‹จ์ผ ์—”ํ‹ฐํ‹ฐ์— ํ•ด๋‹นํ•œ๋‹ค๋ฉด, ์—”ํ‹ฐํ‹ฐ๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
10+
ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด๋ฏธ entities ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ ์š”์ฒญ์ด ๋‹จ์ผ entity์— ํ•ด๋‹นํ•œ๋‹ค๋ฉด, entities๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
1111

1212
```sh
1313
โ””โ”€โ”€ src/ #
@@ -18,11 +18,11 @@ sidebar_position: 10
1818
โ”œโ”€โ”€ entities/ #
1919
| โ”œโ”€โ”€ {entity}/ #
2020
| ... โ””โ”€โ”€ api/ #
21-
| โ”œโ”€โ”€ `{entity}.query` # ์ฟผ๋ฆฌ ํ‚ค์™€ ํ•จ์ˆ˜
22-
| โ”œโ”€โ”€ `get-{entity}` # ์—”ํ‹ฐํ‹ฐ ์กฐํšŒ ํ•จ์ˆ˜
23-
| โ”œโ”€โ”€ `create-{entity}` # ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ ํ•จ์ˆ˜
24-
| โ”œโ”€โ”€ `update-{entity}` # ์—”ํ‹ฐํ‹ฐ ์—…๋ฐ์ดํŠธ ํ•จ์ˆ˜
25-
| โ”œโ”€โ”€ `delete-{entity}` # ์—”ํ‹ฐํ‹ฐ ์‚ญ์ œ ํ•จ์ˆ˜
21+
| โ”œโ”€โ”€ `{entity}.query` # Query Keys์™€ Query Functions
22+
| โ”œโ”€โ”€ `get-{entity}` # entity fetch ํ•จ์ˆ˜
23+
| โ”œโ”€โ”€ `create-{entity}` # entity create ํ•จ์ˆ˜
24+
| โ”œโ”€โ”€ `update-{entity}` # entity update ํ•จ์ˆ˜
25+
| โ”œโ”€โ”€ `delete-{entity}` # entity delete ํ•จ์ˆ˜
2626
| ... #
2727
| #
2828
โ”œโ”€โ”€ features/ #
@@ -33,18 +33,18 @@ sidebar_position: 10
3333
... #
3434
```
3535

36-
๋งŒ์•ฝ ์—”ํ‹ฐํ‹ฐ ๊ฐ„์— ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ (์˜ˆ: Country ์—”ํ‹ฐํ‹ฐ์— City ์—”ํ‹ฐํ‹ฐ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ), [๊ต์ฐจ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐœ API][public-api-for-cross-imports]์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋Œ€์•ˆ์œผ๋กœ ์•„๋ž˜์˜ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
36+
๋งŒ์•ฝ entities ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ(์˜ˆ: Country ์—”ํ„ฐํ‹ฐ๊ฐ€ City ์—”ํ„ฐํ‹ฐ์˜ ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ), [๊ต์ฐจ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์œ„ํ•œ Public API][public-api-for-cross-imports]๋ฅผ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜, ์•„๋ž˜์™€ ๊ฐ™์€ ๋Œ€์ฒด ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
3737

38-
### ๋Œ€์•ˆ ๋ฐฉ์•ˆ โ€” shared์— ์œ ์ง€ํ•˜๊ธฐ
38+
### ๋Œ€์•ˆ ๋ฐฉ์•ˆ โ€” shared์— ์ €์žฅํ•˜๊ธฐ
3939

40-
์—”ํ‹ฐํ‹ฐ๋ณ„ ๋ถ„๋ฆฌ๊ฐ€ ์ ์ ˆํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
40+
entities๋ณ„ ๋ถ„๋ฆฌ๊ฐ€ ์ ์ ˆํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
4141

4242
```sh
4343
โ””โ”€โ”€ src/ #
4444
... #
4545
โ””โ”€โ”€ shared/ #
4646
โ”œโ”€โ”€ api/ #
47-
... โ”œโ”€โ”€ `queries` # ์ฟผ๋ฆฌ ํŒฉํ† ๋ฆฌ๋“ค
47+
... โ”œโ”€โ”€ `queries` # Query Factories
4848
| โ”œโ”€โ”€ `document.ts` #
4949
| โ”œโ”€โ”€ `background-jobs.ts` #
5050
| ... #
@@ -57,9 +57,9 @@ sidebar_position: 10
5757
export { documentQueries } from "./queries/document";
5858
```
5959

60-
## "mutation ์œ„์น˜ ์„ค์ •" ๋ฌธ์ œ
60+
## "Mutation ์œ„์น˜ ์„ค์ •" ๋ฌธ์ œ
6161

62-
์ฟผ๋ฆฌ์™€ mutation์„ ๊ฐ™์€ ์œ„์น˜์— ๋‘๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค:
62+
Query์™€ Mutation์„ ๊ฐ™์€ ์œ„์น˜์— ๋‘๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค:
6363

6464
### 1. ์‚ฌ์šฉ ์œ„์น˜ ๊ทผ์ฒ˜์˜ `api` ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ปค์Šคํ…€ ํ›… ์ •์˜ํ•˜๊ธฐ
6565

@@ -80,7 +80,7 @@ export const useUpdateTitle = () => {
8080
};
8181
```
8282

83-
### 2. ๊ณต์šฉ ๋˜๋Š” ์—”ํ‹ฐํ‹ฐ์—์„œ mutation ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ์—์„œ `useMutation`์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ธฐ
83+
### 2. ๊ณต์šฉ ๋˜๋Š” entities์—์„œ mutation ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ์—์„œ `useMutation`์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ธฐ
8484

8585
```tsx
8686
const { mutateAsync, isPending } = useMutation({
@@ -115,11 +115,13 @@ export const CreatePost = () => {
115115
};
116116
```
117117

118-
## ์š”์ฒญ์˜ ์กฐ์งํ™”
118+
## Request ์กฐ์งํ™”
119119

120-
### ์ฟผ๋ฆฌ ํŒฉํ† ๋ฆฌ
120+
### Query Factory
121121

122-
์ฟผ๋ฆฌ ํŒฉํ† ๋ฆฌ๋Š” ์ฟผ๋ฆฌ ํ‚ค ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
122+
Query Factory๋Š” Query Key ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
123+
124+
์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
123125

124126
```ts
125127
const keyFactory = {
@@ -129,7 +131,7 @@ const keyFactory = {
129131
```
130132

131133
:::info
132-
`queryOptions`๋Š” react-query@v5์˜ ๋‚ด์žฅ ์œ ํ‹ธ๋ฆฌํ‹ฐ์ž…๋‹ˆ๋‹ค (์„ ํƒ ์‚ฌํ•ญ)
134+
`queryOptions`๋Š” TanStack Query v5์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‚ด์žฅ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ, ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
133135

134136
```ts
135137
queryOptions({
@@ -138,11 +140,11 @@ queryOptions({
138140
});
139141
```
140142

141-
๋” ํฐ ํƒ€์ž… ์•ˆ์ •์„ฑ, react-query์˜ ํ–ฅํ›„ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ, ํ•จ์ˆ˜ ๋ฐ ์ฟผ๋ฆฌ ํ‚ค์— ๋Œ€ํ•œ ์‰ฌ์šด ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด, "@tanstack/react-query"์˜ ๋‚ด์žฅ queryOptions ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ)](https://tkdodo.eu/blog/the-query-options-api#queryoptions).
143+
๋” ์—„๊ฒฉํ•œ ํƒ€์ž…, TanStack Query์˜ ํ–ฅํ›„ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ, Query Function ๋ฐ Query Key์— ๋Œ€ํ•œ ์‰ฌ์šด ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด, "@tanstack/react-query"์˜ ๋‚ด์žฅ queryOptions ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ)](https://tkdodo.eu/blog/the-query-options-api#queryoptions).
142144

143145
:::
144146

145-
### 1. ์ฟผ๋ฆฌ ํŒฉํ† ๋ฆฌ ์ƒ์„ฑ ์˜ˆ์‹œ
147+
### 1. Query Factory ์ƒ์„ฑ ์˜ˆ์‹œ
146148

147149
```tsx title="@/entities/post/api/post.queries.ts"
148150
import { keepPreviousData, queryOptions } from "@tanstack/react-query";
@@ -171,7 +173,7 @@ export const postQueries = {
171173
};
172174
```
173175

174-
### 2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ์˜ ์ฟผ๋ฆฌ ํŒฉํ† ๋ฆฌ ์‚ฌ์šฉ ์˜ˆ์‹œ
176+
### 2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ์˜ Query Factory ์‚ฌ์šฉ ์˜ˆ์‹œ
175177
```tsx
176178
import { useParams } from "react-router-dom";
177179
import { postApi } from "@/entities/post";
@@ -214,16 +216,17 @@ export const PostPage = () => {
214216
};
215217
```
216218

217-
### ์ฟผ๋ฆฌ ํŒฉํ† ๋ฆฌ ์‚ฌ์šฉ์˜ ์žฅ์ 
218-
- **์š”์ฒญ ๊ตฌ์กฐํ™”**: ํŒฉํ† ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  API ์š”์ฒญ์„ ํ•œ ๊ณณ์— ์กฐ์งํ™”ํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.
219-
- **์ฟผ๋ฆฌ ๋ฐ ํ‚ค์— ๋Œ€ํ•œ ํŽธ๋ฆฌํ•œ ์ ‘๊ทผ**: ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์ฟผ๋ฆฌ์™€ ํ•ด๋‹น ํ‚ค์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
220-
- **์ฟผ๋ฆฌ ์žฌํ˜ธ์ถœ ์šฉ์ด์„ฑ**: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์—์„œ ์ฟผ๋ฆฌ ํ‚ค๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š” ์—†์ด ์‰ฝ๊ฒŒ ์žฌํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
219+
### Query Factory ์‚ฌ์šฉ์˜ ์žฅ์ 
220+
- **Request ๊ตฌ์กฐํ™”**: ๋ชจ๋“  API ์š”์ฒญ์„ Factory ํŒจํ„ด์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
221+
- **Query์™€ Key์— ๋Œ€ํ•œ ํŽธ๋ฆฌํ•œ ์ ‘๊ทผ**: ๋‹ค์–‘ํ•œ Query ์œ ํ˜•๊ณผ ํ•ด๋‹น Key๋ฅผ ์†์‰ฝ๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
222+
- **Query Invalidation ์šฉ์ด์„ฑ**: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „๋ฐ˜์—์„œ Query Key๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š” ์—†์ด ์‰ฝ๊ฒŒ Invalidateํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
223+
224+
## Pagination
221225

222-
## ํŽ˜์ด์ง€๋„ค์ด์…˜
223-
์ด ์„น์…˜์—์„œ๋Š” ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒŒ์‹œ๋ฌผ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” API ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” `getPosts` ํ•จ์ˆ˜์˜ ์˜ˆ๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
226+
์ด ์„น์…˜์—์„œ๋Š” Pagination์„ ํ™œ์šฉํ•˜์—ฌ `getPosts` ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฒŒ์‹œ๋ฌผ entity๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” API ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
224227

225228
### 1. `getPosts` ํ•จ์ˆ˜ ์ƒ์„ฑํ•˜๊ธฐ
226-
getPosts ํ•จ์ˆ˜๋Š” `api` ์„ธ๊ทธ๋จผํŠธ์˜ `get-posts.ts` ํŒŒ์ผ์— ์žˆ์Šต๋‹ˆ๋‹ค.
229+
getPosts ํ•จ์ˆ˜๋Š” `api` segments์˜ `get-posts.ts` ํŒŒ์ผ์—์„œ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
227230

228231
```tsx title="@/pages/post-feed/api/get-posts.ts"
229232
import { apiClient } from "@/shared/api/base";
@@ -254,8 +257,9 @@ export const getPosts = async (
254257
};
255258
```
256259

257-
### 2. ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ์œ„ํ•œ ์ฟผ๋ฆฌ ํŒฉํ† ๋ฆฌ
258-
`postQueries` ์ฟผ๋ฆฌ ํŒฉํ† ๋ฆฌ๋Š” ํŠน์ • ํŽ˜์ด์ง€์™€ ์ œํ•œ์— ๋งž์ถฐ ๊ฒŒ์‹œ๋ฌผ ๋ชฉ๋ก์„ ์š”์ฒญํ•˜๋Š” ๋“ฑ ๊ฒŒ์‹œ๋ฌผ ๊ด€๋ จ ๋‹ค์–‘ํ•œ ์ฟผ๋ฆฌ ์˜ต์…˜์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
260+
### 2. Pagination์„ ์œ„ํ•œ Query Factory
261+
262+
`postQueries` Query Factory๋Š” ํŠน์ • ํŽ˜์ด์ง€์™€ ์ œํ•œ์— ๋งž์ถฐ ๊ฒŒ์‹œ๋ฌผ ๋ชฉ๋ก์„ ์š”์ฒญํ•˜๋Š” ๋“ฑ, ๊ฒŒ์‹œ๋ฌผ ๊ด€๋ จ ๋‹ค์–‘ํ•œ Query Options์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
259263

260264
```tsx
261265
import { keepPreviousData, queryOptions } from "@tanstack/react-query";
@@ -301,11 +305,12 @@ export const HomePage = () => {
301305
์˜ˆ์‹œ๋Š” ๋‹จ์ˆœํ™”๋œ ๋ฒ„์ „์ด๋ฉฐ, ์ „์ฒด ์ฝ”๋“œ๋Š” [GitHub](https://github.com/ruslan4432013/fsd-react-query-example)์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
302306
:::
303307

304-
## ์ฟผ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ `QueryProvider`
305-
์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” `QueryProvider`๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•˜๋Š”์ง€ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.
308+
## Query ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ `QueryProvider`
309+
310+
์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” `QueryProvider`์˜ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
306311

307312
### 1. `QueryProvider` ์ƒ์„ฑํ•˜๊ธฐ
308-
`query-provider.tsx` ํŒŒ์ผ์€ `@/app/providers/query-provider.tsx` ๊ฒฝ๋กœ์— ์žˆ์Šต๋‹ˆ๋‹ค.
313+
`QueryProvider`๋Š” `@/app/providers/query-provider.tsx` ๊ฒฝ๋กœ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.
309314

310315
```tsx title="@/app/providers/query-provider.tsx"
311316
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
@@ -328,7 +333,9 @@ export const QueryProvider = ({ client, children }: Props) => {
328333
```
329334

330335
### 2. `QueryClient` ์ƒ์„ฑํ•˜๊ธฐ
331-
`QueryClient`๋Š” API ์š”์ฒญ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. `query-client.ts` ํŒŒ์ผ์€ `@/shared/api/query-client.ts`์— ์†ํ•ด ์žˆ์œผ๋ฉฐ, ์ฟผ๋ฆฌ ์บ์‹ฑ์„ ์œ„ํ•ด ํŠน์ • ์„ค์ •์œผ๋กœ `QueryClient`๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
336+
337+
`QueryClient`๋Š” API ์š”์ฒญ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋กœ, Query Caching์„ ์œ„ํ•œ ์„ค์ •๊ณผ ํ•จ๊ป˜ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
338+
์ด ์ธ์Šคํ„ด์Šค๋Š” `@/shared/api/query-client.ts` ํŒŒ์ผ์— ์ •์˜๋ฉ๋‹ˆ๋‹ค.
332339

333340
```tsx title="@/shared/api/query-client.ts"
334341
import { QueryClient } from "@tanstack/react-query";
@@ -345,14 +352,18 @@ export const queryClient = new QueryClient({
345352

346353
## ์ฝ”๋“œ ์ƒ์„ฑ
347354

348-
API ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋„๊ตฌ๋“ค์ด ์žˆ์ง€๋งŒ, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์œ„์˜ ์˜ˆ์ œ ์ฒ˜๋Ÿผ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค ์œ ์—ฐ์„ฑ์ด ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Swagger ํŒŒ์ผ์ด ์ž˜ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ  ์ด๋Ÿฌํ•œ ์ž๋™ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ `@/shared/api` ๋””๋ ‰ํ† ๋ฆฌ์— ๋‘์–ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
349-
355+
API ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ๋“ค์ด ์žˆ์ง€๋งŒ, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค ์œ ์—ฐ์„ฑ์ด ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
356+
๊ทธ๋Ÿฌ๋‚˜ Swagger ํŒŒ์ผ์ด ์ž˜ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ, ์ž๋™ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋Š” `@/shared/api` ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
350357

351358
## React Query๋ฅผ ์กฐ์งํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ์กฐ์–ธ
359+
352360
### API ํด๋ผ์ด์–ธํŠธ
353361

354-
๊ณต์œ  ๋ ˆ์ด์–ด์—์„œ ์ปค์Šคํ…€ API ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํ”„๋กœ์ ํŠธ ๋‚ด API ์ž‘์—…์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋กœ๊น…, ํ—ค๋” ์„ค์ •, ๋ฐ์ดํ„ฐ ์ „์†ก ํ˜•์‹(JSON ๋˜๋Š” XML ๋“ฑ)์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ API์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‰ฝ๊ฒŒ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ, ํ”„๋กœ์ ํŠธ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
362+
shared layer์—์„œ ์ปค์Šคํ…€ API ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํ”„๋กœ์ ํŠธ ๋‚ด API ์š”์ฒญ์„ ๋ณด๋‹ค ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
355363

364+
- ๋กœ๊น… ๋ฐ ์—๋Ÿฌ ํ•ธ๋“ค๋ง์„ ์ค‘์•™์—์„œ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
365+
- ํ—ค๋” ์„ค์ • ๋ฐ ๋ฐ์ดํ„ฐ ์ „์†ก ํ˜•์‹(JSON, XML ๋“ฑ)์„ ์ผ๊ด„์ ์œผ๋กœ ์ ์šฉ
366+
- API ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ•œ ๊ณณ์—์„œ ์‰ฝ๊ฒŒ ๋ฐ˜์˜ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ
356367

357368
```tsx title="@/shared/api/api-client.ts"
358369
import { API_URL } from "@/shared/config";
@@ -420,6 +431,6 @@ export const apiClient = new ApiClient(API_URL);
420431

421432
- [(GitHub) ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ](https://github.com/ruslan4432013/fsd-react-query-example)
422433
- [(CodeSandbox) ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ](https://codesandbox.io/p/github/ruslan4432013/fsd-react-query-example/main)
423-
- [์ฟผ๋ฆฌ ํŒฉํ† ๋ฆฌ์— ๋Œ€ํ•˜์—ฌ](https://tkdodo.eu/blog/the-query-options-api)
434+
- [Query Options์— ๋Œ€ํ•˜์—ฌ](https://tkdodo.eu/blog/the-query-options-api)
424435

425-
[public-api-for-cross-imports]: /docs/reference/public-api#public-api-for-cross-imports
436+
[public-api-for-cross-imports]: /docs/reference/public-api#public-api-for-cross-imports

0 commit comments

Comments
ย (0)