๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Frontend/TanStack Query

Network Mode

TanStack Query์˜ ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ๋Š” ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด ์—†์„ ๋•Œ ์ฟผ๋ฆฌ์™€ ๋ฎคํ…Œ์ด์…˜์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” 3๊ฐ€์ง€ ์„ค์ •์„ ์ œ๊ณตํ•œ๋‹ค. ์ด ๋ชจ๋“œ๋Š” ๊ฐ ์ฟผ๋ฆฌ/๋ฎคํ…Œ์ด์…˜์— ๊ฐœ๋ณ„์ ์œผ๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ๊ธฐ๋ณธ๊ฐ’์„ ํ†ตํ•ด ์ „์—ญ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ํŒจ์นญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ, ๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ๋Š” online์ด๋‹ค.

 

Network Mode: online

์ด ๋ชจ๋“œ์—์„œ๋Š” ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ๋งŒ ์ฟผ๋ฆฌ์™€ ๋ฎคํ…Œ์ด์…˜์ด ์‹คํ–‰๋œ๋‹ค. ์ด๊ฒƒ์ด ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.

 

์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด ์—†์–ด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์ฟผ๋ฆฌ๋Š” ๊ธฐ์กด์˜ state(pending, error, success) ์ƒํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋•Œ fetchStatus๋ผ๋Š” ์ถ”๊ฐ€์ ์ธ ์ƒํƒœ๊ฐ€ ์ œ๊ณต๋˜์–ด ๋” ์ž์„ธํ•œ ์ƒํ™ฉ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • fetching: queryFn์ด ์‹ค์ œ๋กœ ์‹คํ–‰ ์ค‘์ด๋ฉฐ, ์š”์ฒญ์ด ์ง„ํ–‰ ์ค‘์ธ ์ƒํƒœ์ด๋‹ค.
  • paused: ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์ผ์‹œ์ •์ง€๋œ ์ƒํƒœ์ด๋‹ค. ์ธํ„ฐ๋„ท์ด ๋‹ค์‹œ ์—ฐ๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค.
  • idle: ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ์ง€๋„, ์ผ์‹œ์ •์ง€๋˜์ง€๋„ ์•Š์€ ์œ ํœด ์ƒํƒœ์ด๋‹ค.

ํŽธ์˜๋ฅผ ์œ„ํ•ด isFetching๊ณผ isPaused๋ผ๋Š” flag๋„ ์ด ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ๊ณต๋œ๋‹ค.

 

๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ๋ฅผ ํ‘œ์‹œํ•  ๋•Œ pending ์ƒํƒœ๋งŒ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด ์—†๋Š” ์ƒํƒœ์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ๋งˆ์šดํŠธ๋˜๋ฉด, ์ฟผ๋ฆฌ๋Š” state: 'pending' ์ด๋ฉด์„œ ๋™์‹œ์— fetchStatus: 'paused' ์ƒํƒœ์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

๋งŒ์•ฝ ์˜จ๋ผ์ธ ์ƒํƒœ์—์„œ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜์—ˆ์ง€๋งŒ ์š”์ฒญ์ด ์ง„ํ–‰๋˜๋Š” ๋„์ค‘์— ์˜คํ”„๋ผ์ธ์ด ๋˜๋ฉด TanStack Query๋Š” ์žฌ์‹œ๋„ ๋กœ์ง ๋˜ํ•œ ์ผ์‹œ์ •์ง€๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ผ์‹œ์ •์ง€๋œ ์ฟผ๋ฆฌ๋Š” ์ธํ„ฐ๋„ท์ด ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜๋ฉด ์ด์–ด์„œ ์‹คํ–‰๋œ๋‹ค. ์ด๋Š” refetchOnReconnect ์˜ต์…˜(์ด ๋ชจ๋“œ์—์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด true)๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ๋™์ž‘ํ•˜๋Š”๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ด์–ด์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งŒ์•ฝ ๊ทธ ์‚ฌ์ด์— ์ฟผ๋ฆฌ๊ฐ€ ์ทจ์†Œ๋˜์—ˆ๋‹ค๋ฉด ์ด์–ด์„œ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

Network Mode: always

์ด ๋ชจ๋“œ์—์„œ๋Š” TanStack Query๊ฐ€ ์˜จ๋ผ์ธ/์˜คํ”„๋ผ์ธ ์ƒํƒœ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ํ•ญ์ƒ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 

์ด ๋ชจ๋“œ๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๋ฐ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ํ•„์š” ์—†๋Š” ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, AsyncStorage์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๊ฑฐ๋‚˜ queryFn์—์„œ ๋‹จ์ˆœํžˆ Promise.resolve(5)์™€ ๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด ์—†๋‹ค๊ณ  ํ•ด์„œ ์ฟผ๋ฆฌ๊ฐ€ paused๋˜๋Š” ์ผ์€ ์ ˆ๋Œ€ ์—†๋‹ค.
  • ์žฌ์‹œ๋„ ์—ญ์‹œ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ , ์‹คํŒจํ•˜๋ฉด ๋ฐ”๋กœ error ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  • ์ด ๋ชจ๋“œ์—์„œ refetchOnReconnect์˜ ๊ธฐ๋ณธ๊ฐ’์€ false์ด๋‹ค. ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ํ•„์š” ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์—, ์ธํ„ฐ๋„ท์ด ๋‹ค์‹œ ์—ฐ๊ฒฐ๋๋‹ค๊ณ  ํ•ด์„œ ๊ตณ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋˜ ๊ฐ€์ ธ์˜ฌ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์›ํ•œ๋‹ค๋ฉด ์ด ์˜ต์…˜์„ ๋‹ค์‹œ ์ผค ์ˆ˜ ์žˆ๋‹ค.

Network Mode: offlineFirst

์ด ๋ชจ๋“œ๋Š” online๊ณผ always์˜ ์ค‘๊ฐ„ ์ง€์ ์— ํ•ด๋‹นํ•œ๋‹ค. queryFn์„ ์ตœ์ดˆ ํ•œ ๋ฒˆ์€ ์‹คํ–‰ํ•˜์ง€๋งŒ, ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„๋Š” ์ผ์‹œ์ •์ง€ํ•œ๋‹ค. 

 

์ด ๋ฐฉ์‹์€ offline-fist PWA์ฒ˜๋Ÿผ ์„œ๋น„์Šค์›Œ์ปค๊ฐ€ ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„ ์บ์‹ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, Cache-Control header๋ฅผ ํ†ตํ•ด HTTP ์บ์‹ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์— ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค. 

 

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ๋Š” ์ฒซ ์š”์ฒญ์ด ์˜คํ”„๋ผ์ธ ์ €์žฅ์†Œ๋‚˜ ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ cache miss๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์‹ค์ œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ, ์ด ๋ชจ๋“œ๋Š” online ๋ชจ๋“œ์ฒ˜๋Ÿผ ์žฌ์‹œ๋„๋ฅผ ์ผ์‹œ์ •์ง€ํ•˜๋ฉฐ ๋™์ž‘ํ•œ๋‹ค.

 

Devtools

TanStack Query ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ๋Š” ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด ์—†์–ด ์‹คํ–‰๋˜์ง€ ๋ชปํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ paused ์ƒํƒœ๋กœ ํ‘œ์‹œํ•ด์ค€๋‹ค. ๋˜ํ•œ, Mock offline behavior(์˜คํ”„๋ผ์ธ ๋™์ž‘ ํ‰๋‚ด๋‚ด๊ธฐ) ํ† ๊ธ€ ๋ฒ„ํŠผ์ด ์žˆ์–ด ์˜คํ”„๋ผ์ธ ์ƒํƒœ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฒ„ํŠผ์€ ์‹ค์ œ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์„ ๋Š๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ TanStack Query์˜ OnlineManager๋ฅผ ์˜คํ”„๋ผ์ธ ์ƒํƒœ๋กœ ์„ค์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

Signature

  • networkMode: 'online' | 'always' | 'offlineFirst'
    • optional
    • ๊ธฐ๋ณธ๊ฐ’์€ online์ด๋‹ค.

https://tanstack.com/query/latest/docs/framework/react/guides/network-mode

 

Network Mode | TanStack Query React Docs

TanStack Query provides three different network modes to distinguish how and should behave if you have no network connection. This mode can be set for each Query / Mutation individually, or globally v...

tanstack.com

 

'Frontend > TanStack Query' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Dependent Queries  (0) 2025.11.04
Parallel Queries  (0) 2025.11.03
Query Options  (0) 2025.10.23
Query Functions  (0) 2025.10.22
Query Keys  (0) 2025.10.21