Sonamu + TanStack Query ๊ฐ์
์๋ ์์ฑ
useUser, usePost Hook์ฝ๋ ์์ฑ ๋ถํ์
ํ์ ์์
Service ํ์
์ ์ง์์ ํ ํ์
์ฒด์ธ
์๋ ์บ์ฑ
๋ฉ๋ชจ๋ฆฌ ์บ์์ค๋ณต ์์ฒญ ์ ๊ฑฐ
์๋ ์ฌ๊ฒ์ฆ
ํฌ์ปค์ค ์ ๊ฐฑ์ ์ฃผ๊ธฐ์ ํด๋ง
Sonamu์์ TanStack Query Hook ์ฌ์ฉํ๊ธฐ
Hook ์๋ ์์ฑ
Sonamu๋ ๊ฐ Service ํจ์๋ง๋ค TanStack Query Hook์ ์๋ ์์ฑํฉ๋๋ค. ์์ฑ๋๋ Hook (services.generated.ts):- ํจ์๋ช
:
get{Entity}โ Hook๋ช :use{Entity} - Query Key:
["{Entity}", "{methodName}", ...params] - ํ์ ์์ ๋ณด์กด (Subset ์ง์)
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
useUser Hook
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์กฐํ Hook์ ๋๋ค.data๋UserSubsetMapping["A"] | undefinedํ์- ์๋ ์บ์ฑ: ๊ฐ์ userId๋ก ๋ค์ ํธ์ถํ๋ฉด ์บ์ ์ฌ์ฉ
- ์๋ ์ฌ๊ฒ์ฆ: ํฌ์ปค์ค ์, ์ฌ์ฐ๊ฒฐ ์ ์๋ ๊ฐฑ์
- ์ค๋ณต ์ ๊ฑฐ: ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ๋์์ ํธ์ถํด๋ API๋ 1๋ฒ๋ง
Subset๊ณผ ํ์ ์์ ์ฑ
Subset์ ๋ฐ๋ผ ์ ํํ ํ์ ์ด ๋ฐํ๋ฉ๋๋ค.๊ณ ๊ธ ์ฌ์ฉ๋ฒ
์กฐ๊ฑด๋ถ ํ์นญ
ํน์ ์กฐ๊ฑด์์๋ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.true: ์ฆ์ ๋ฐ์ดํฐ ๋ก๋ (๊ธฐ๋ณธ๊ฐ)false: ๋ฐ์ดํฐ ๋ก๋ํ์ง ์์- ์ฌ์ฉ ์ฌ๋ก: ๋ก๊ทธ์ธ ์ฌ๋ถ, ํ๋ผ๋ฏธํฐ ์กด์ฌ ์ฌ๋ถ ๋ฑ
์์กด์ ํ์นญ
์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์์ฒญ์ ์ฌ์ฉํฉ๋๋ค.Query Options ์ฌ์ฌ์ฉ
๋์ผํ Query Options๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฌ์ฉํฉ๋๋ค.Mutation (๋ฐ์ดํฐ ๋ณ๊ฒฝ)
useMutation์ผ๋ก ์์ฑ/์์ /์ญ์
TanStack Query์useMutation์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
๋๊ด์ ์ ๋ฐ์ดํธ
API ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฆ์ UI๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.- ๋ฒํผ ํด๋ฆญ โ ์ฆ์ UI ์ ๋ฐ์ดํธ (๋๊ธฐ ์์)
- ๋ฐฑ๊ทธ๋ผ์ด๋์์ API ํธ์ถ
- ์ฑ๊ณต ์ ์๋ฒ ๋ฐ์ดํฐ๋ก ํ์
- ์คํจ ์ ์๋ ๋กค๋ฐฑ