Skip to main content
Sonamu์˜ ์ž๋™ ์ƒ์„ฑ๋œ TanStack Query Hook์„ ์‚ฌ์šฉํ•˜์—ฌ React์—์„œ ํƒ€์ž… ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

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์— ๋”ฐ๋ผ ์ •ํ™•ํ•œ ํƒ€์ž…์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
ํƒ€์ž… ์ฒด์ธ:
๋ชจ๋“  ๋‹จ๊ณ„์—์„œ ํƒ€์ž…์ด ๋ณด์กด๋ฉ๋‹ˆ๋‹ค!

๊ณ ๊ธ‰ ์‚ฌ์šฉ๋ฒ•

์กฐ๊ฑด๋ถ€ ํŽ˜์นญ

ํŠน์ • ์กฐ๊ฑด์—์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
enabled ์˜ต์…˜:
  • true: ์ฆ‰์‹œ ๋ฐ์ดํ„ฐ ๋กœ๋“œ (๊ธฐ๋ณธ๊ฐ’)
  • false: ๋ฐ์ดํ„ฐ ๋กœ๋“œํ•˜์ง€ ์•Š์Œ
  • ์‚ฌ์šฉ ์‚ฌ๋ก€: ๋กœ๊ทธ์ธ ์—ฌ๋ถ€, ํŒŒ๋ผ๋ฏธํ„ฐ ์กด์žฌ ์—ฌ๋ถ€ ๋“ฑ

์˜์กด์  ํŽ˜์นญ

์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์Œ ์š”์ฒญ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Query Options ์žฌ์‚ฌ์šฉ

๋™์ผํ•œ Query Options๋ฅผ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Mutation (๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ)

useMutation์œผ๋กœ ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œ

TanStack Query์˜ useMutation์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ

API ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ฆ‰์‹œ UI๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ๊ฒฝํ—˜:
  • ๋ฒ„ํŠผ ํด๋ฆญ โ†’ ์ฆ‰์‹œ UI ์—…๋ฐ์ดํŠธ (๋Œ€๊ธฐ ์—†์Œ)
  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ API ํ˜ธ์ถœ
  • ์„ฑ๊ณต ์‹œ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋กœ ํ™•์ •
  • ์‹คํŒจ ์‹œ ์ž๋™ ๋กค๋ฐฑ

์บ์‹œ ๊ด€๋ฆฌ

์บ์‹œ ๋ฌดํšจํ™”

ํŠน์ • ์ฟผ๋ฆฌ์˜ ์บ์‹œ๋ฅผ ๋ฌดํšจํ™”ํ•˜์—ฌ ์žฌ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

์บ์‹œ ์ง์ ‘ ์ˆ˜์ •

API ํ˜ธ์ถœ ์—†์ด ์บ์‹œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

Prefetching

๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋กœ๋“œํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

์‹ค์ „ ์˜ˆ์ œ

๋ฌดํ•œ ์Šคํฌ๋กค

ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋Œ€์‹  ๋ฌดํ•œ ์Šคํฌ๋กค์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์‹œ๊ฐ„ ํด๋ง

์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ Hook ์กฐํ•ฉ

TanStack Query ์„ค์ •

์ „์—ญ ์„ค์ •

DevTools

๊ฐœ๋ฐœ ์ค‘ ์บ์‹œ ์ƒํƒœ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ์ตœ์ ํ™”

Subset์œผ๋กœ ์ตœ์ ํ™”

์ƒํ™ฉ์— ๋งž๋Š” Subset์„ ์„ ํƒํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ๋น„์šฉ ์ ˆ๊ฐ:

์„ ํƒ์  ์žฌ๊ฒ€์ฆ

๋ถˆํ•„์š”ํ•œ ์žฌ๊ฒ€์ฆ์„ ๋ง‰์Šต๋‹ˆ๋‹ค:

๋ณ‘๋ ฌ ์š”์ฒญ

์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ๋กœ๋“œ:

์ฃผ์˜์‚ฌํ•ญ

TanStack Query Hook ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ: 1. Hook์€ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ๋งŒ ํ˜ธ์ถœ (React ๊ทœ์น™) 2. Subset ํŒŒ๋ผ๋ฏธํ„ฐ ํ•„์ˆ˜: useUser("A", userId) 3. enabled: false๋กœ ์กฐ๊ฑด๋ถ€ ํŽ˜์นญ ๊ตฌํ˜„ 4. Mutation ์„ฑ๊ณต ์‹œ ์บ์‹œ ๋ฌดํšจํ™” ํ•„์ˆ˜ 5. Query Key๋Š” ์ž๋™ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ์ˆ˜๋™ ์ž‘์„ฑ ๊ธˆ์ง€ 6. ์ƒ์„ฑ๋œ Hook์€ ์ˆ˜์ • ๊ธˆ์ง€ (์žฌ์ƒ์„ฑ ์‹œ ๋ฎ์–ด์”€) 7. QueryClientProvider๋กœ ์•ฑ ์ „์ฒด ๊ฐ์‹ธ๊ธฐ

๋‹ค์Œ ๋‹จ๊ณ„

Service ๋™์ž‘ ์›๋ฆฌ

์ž๋™ ์ƒ์„ฑ ์ดํ•ดํ•˜๊ธฐ

Service ์‚ฌ์šฉํ•˜๊ธฐ

Service ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

TanStack Query ๊ณต์‹ ๋ฌธ์„œ

TanStack Query ๋” ์•Œ์•„๋ณด๊ธฐ

Subset System

Subset ์‹œ์Šคํ…œ