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 ํธ์ถ
- ์ฑ๊ณต ์ ์๋ฒ ๋ฐ์ดํฐ๋ก ํ์
- ์คํจ ์ ์๋ ๋กค๋ฐฑ
์บ์ ๊ด๋ฆฌ
์บ์ ๋ฌดํจํ
ํน์ ์ฟผ๋ฆฌ์ ์บ์๋ฅผ ๋ฌดํจํํ์ฌ ์ฌ๋ก๋ํฉ๋๋ค.์บ์ ์ง์ ์์
API ํธ์ถ ์์ด ์บ์๋ฅผ ์ง์ ์์ ํฉ๋๋ค.Prefetching
๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํต๋๋ค.์ค์ ์์
๋ฌดํ ์คํฌ๋กค
ํ์ด์ง๋ค์ด์ ๋์ ๋ฌดํ ์คํฌ๋กค์ ๊ตฌํํฉ๋๋ค.์ค์๊ฐ ํด๋ง
์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.์ฌ๋ฌ Hook ์กฐํฉ
TanStack Query ์ค์
์ ์ญ ์ค์
DevTools
๊ฐ๋ฐ ์ค ์บ์ ์ํ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ธํฉ๋๋ค.์ฑ๋ฅ ์ต์ ํ
Subset์ผ๋ก ์ต์ ํ
์ํฉ์ ๋ง๋ Subset์ ์ ํํ์ฌ ๋คํธ์ํฌ ๋น์ฉ ์ ๊ฐ:์ ํ์ ์ฌ๊ฒ์ฆ
๋ถํ์ํ ์ฌ๊ฒ์ฆ์ ๋ง์ต๋๋ค:๋ณ๋ ฌ ์์ฒญ
์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ๋์์ ๋ก๋:์ฃผ์์ฌํญ
๋ค์ ๋จ๊ณ
Service ๋์ ์๋ฆฌ
์๋ ์์ฑ ์ดํดํ๊ธฐ
Service ์ฌ์ฉํ๊ธฐ
Service ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
TanStack Query ๊ณต์ ๋ฌธ์
TanStack Query ๋ ์์๋ณด๊ธฐ
Subset System
Subset ์์คํ