๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
code.camp

์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ฟผ๋ฆฌ๋ฐฉ์‹, refetch๋ฌธ์ œ์ , ApolloState ์ง์ ‘ ์ˆ˜์ •

by jyamin 2021. 8. 8.
728x90

8/6 

๐Ÿง useApolloClient๋กœ ์›ํ•˜๋Š” ๊ณณ์—์„œ ์ฟผ๋ฆฌํ•˜๊ธฐ ๐Ÿง

๊ทธ๋™์•ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•ด์˜ฌ ๋•Œ, useQuery๋ฅผ ์‚ฌ์šฉ ํ–ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ, ๊ธฐ์กด์— openapi๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด axios๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋ฅผ ๊ธฐ์–ตํ•˜๋ฉด,
axios๋Š” useQuery์™€ ๋‹ค๋ฅด๊ฒŒ, ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ณณ์—์„œ ์›ํ•˜๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ, api์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ! useQuery๋Š” ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•˜์ง€ ์•Š๊ณ , ํŽ˜์ด์ง€๊ฐ€ ๋ Œ๋”๋ง๋  ๋•Œ ์ž๋™์œผ๋กœ ์ฟผ๋ฆฌ๊ฐ€ ์š”์ฒญ๋๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด, useQuery๋ฅผ axios์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ณณ์—์„œ api๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ข‹์„๊นŒ?
์ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ๋Šฅ์ด useApolloClient ๐Ÿ‘๐Ÿ‘
๊ทธ๋ ‡๋‹ค๋ฉด, ์™œ useQuery๋ฅผ ์ด์šฉํ•˜์—ฌ ํŽ˜์ด์ง€๊ฐ€ ๋žœ๋”๋ง๋  ๋•Œ fetchUserLoggedIn ์ด๋ผ๋Š” API๋ฅผ ์ž๋™์œผ๋กœ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ , 
useApolloClient๋ฅผ ์‚ฌ์šฉํ•ด loginUser๋ผ๋Š” API๋ฅผ ์š”์ฒญ ํ›„ fetchUserLoggedIn์ด๋ผ๋Š” API๋ฅผ ๊ณง๋ฐ”๋กœ ์š”์ฒญํ•ด์•ผ ํ•˜๋Š”๊ฑธ๊นŒ?
 = ํŽ˜์ด์ง€๊ฐ€ ๋žœ๋”๋ง๋  ๋•Œ fetchUserLoggedIn์„ ์š”์ฒญํ•ด๋„, accessToken์„ ์ฒจ๋ถ€ํ•˜์ง€ ๋ชปํ•œ ์ƒํƒœ์ด๋ฏ€๋กœ ์ฟผ๋ฆฌ์— ์‹คํŒจํ•˜๊ฒŒ ๋œ๋‹ค.
fetchUserLoggedIn์ด๋ผ๋Š” API๋Š” accessToken์ด๋ผ๋Š” ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  
๋กœ๊ทธ์ธ๋œ ์œ ์ €์˜ ์ด๋ฉ”์ผ๊ณผ ์ด๋ฆ„ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” API์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ˜Š apolloCache ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ธฐ ๐Ÿ˜Š

๊ธฐ์กด์—๋Š” refetchQueries๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค.
์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํžˆ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ refetch๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.
๋ชฉ๋ก(๊ฒŒ์‹œ๋ฌผ ๋ชฉ๋ก, ์ƒํ’ˆ ๋ชฉ๋ก ๋“ฑ)์„ refetchํ•˜๋Š” ๊ฒƒ์ด ๋Œ€ํ‘œ์ ์ธ ์˜ˆ.
๋ชฉ๋ก์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—, ์ˆ˜๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ํ•œ๊บผ๋ฒˆ์— refetch ์š”์ฒญ์„ ํ•˜๊ฒŒ๋˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌ ๋น„์šฉ์ด ๋งŽ์ด ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค.
์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๋ชฉ๋ก์˜ ๊ฒฝ์šฐ์—๋Š” refetch๋ณด๋‹ค๋Š” Apollo์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” cacheState๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•ด ์ฃผ์—ˆ๋‹ค.
์ด๊ฒƒ์„ ๋„คํŠธ์›Œํฌ ํƒญ์„ ํ•จ๊ป˜ ์—ด์–ด๋†“๊ณ  ๋ณด๋ฉด, ์ถ”๊ฐ€์ ์ธ refetch api ์š”์ฒญ์ด ๋ฐฑ์—”๋“œ๋กœ ๊ฐ€์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ทจ์—…ํ•˜๊ฒŒ ๋˜๋Š” ์‹ค๋ฌด ํ™˜๊ฒฝ์—์„œ๋Š” ์ด๋ฏธ ์ด๋Ÿฌํ•œ ๋ฌธํ™”๊ฐ€ ๊ฐ–์ถ”์–ด์ ธ์žˆ๊ณ  ์‚ฌ์šฉ ๋˜๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค.
๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํ™•์žฅ์„ฑ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ์ข‹์€ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์ง€ ์ƒ๊ฐํ•˜๋ฉฐ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. (๋ฉด์ ‘์‹œ ์ค‘์š”ํ•˜๊ฒŒ ๋ณด๋Š” ์š”์†Œ)

 

ํŽ˜์ด์ง€ ์ „ํ™˜

๋กœ๊ทธ์ธ์„ ๋ˆ„๋ฅด๋ฉด ๋กœ๊ทธ์ธ ์ฐฝ์ด ๋‚˜์˜จ๋‹ค

๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด
๋‚ด๊ฐ€ ์ •ํ•œ ์œ„์น˜์— ๋ˆ„๊ตฌ๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค~ ๋ผ๊ณ  ๋‚˜์™€์•ผ ํ•˜๋Š”๋ฐ?

๋ˆˆ์— ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— useQuery๊ฐ€ ๋‚˜๊ฐ„ ๊ฒƒ.
๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด ๋ฐ”๊ปด์•ผ ๋˜๋‹ˆ๊นŒ refetch๋ฅผ ํ•ด์•ผํ•œ๋‹ค
์—‘์„ธ์Šคํ† ํฐ์„ ๊ฐ€์ง€๊ณ  ์š”์ฒญ์„ ํ•ด์•ผํ•œ๋‹ค

์ €์žฅ์„ ํ•œ๋‹ค. ์™ผ์ชฝ์ด ๋ฐ”๋€Œ์–ด์„œ
์—‘์„ธ์Šคํ† ํฌ์ธ์ด ์ฒจ๋ถ€๋œ ์ฑ„๋กœ ๋‚˜๊ฐ„๋‹ค

์ด๋ ‡๊ฒŒ ์“ฐ๋ฉด ์ข‹๊ธด ํ•œ๋ฐ ์—‘์„ธ์Šค ์ฒจ๋ถ€์ธ์ด ์•ˆ๋œ ์ƒํƒœ
๊ทธ๋ž˜์„œ useAoplloClient๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

์—ฌ๊ธฐ์— ๋“ค์–ด๊ฐ€์„œ ๊ทธ ์ดํ›„์— ์—‘์„ธ์Šคํ† ํฐ์ด ๋œ๋‹ค.
ํŽ˜์ด์ง€๊ฐ€ ์ด๋™์ด ๋˜๋ฉด ์ด๋™๋œ ํŽ˜์ด์ง€์—์„œ๋Š” ์—‘์„ธ์Šคํ† ํฐ์ด ์žˆ๊ธฐ๋•Œ๋ฌธ์—

์ฒจ๋ถ€๋œ ์ƒํƒœ๋กœ ๋ณด๋‚ธ๋‹ค
์ฒจ๋ถ€๋œ ์ƒํƒœ๋กœ ๋ณด๋‚ด์„œ ๋ˆ„๊ตฌ๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค~ ๊ฐ€ ๋‚˜์˜จ๋‹ค
refetch ๋ชป๋“ค์Œ. ๊ทธ๋ž˜์„œ useAoplloClient๋กœ 
๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค

 

์ปค์„œ๊ฐ€ ์žˆ๋Š”์ชฝ์— ์ด๋ฆ„์„ ์ง“๋Š”๋‹ค
์ €์žฅ์„ ํ•ด๋‘๊ณ  ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋“  ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค
cachestate๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ์…ˆ~ ์ด๋ผ๋Š” ๋œป
๊ฒŒ์‹œ๋ฌผ ํ•˜๋‚˜์”ฉ ์‚ญ์ œํ•˜๊ธฐ

์บ์‰ฌ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ• 2๊ฐœ ์ถ”๊ฐ€

refetchQueries: [{query}]
๋ฆฌํŒจ์น˜์ฟผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜ ์ˆ˜์ •ํ•˜๊ณ  ํ•˜๋‚˜ ๋ฐ›์•„์˜ฌ๋•Œ๋Š” ๊ดœ์ฐฎ์€๋ฐ ๊ทธ ์™ธ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Œ

์ด๋ ‡๊ฒŒ ์—ฐ๊ฒฐ
๊ธฐ์กด์— ์žˆ๋˜๊ฑฐ ๊ฐ€์ ธ์™€์„œ
ํ•„ํ„ฐ๋ง

1๊ฐœ๋ฅผ ์‚ญ์ œํ–ˆ์œผ๋‹ˆ 9๊ฐœ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ
10๊ฐœ ์žˆ๋˜๊ฒŒ 9๋กœ ์ค„์–ด๋“ฌ

…prev = ๊ธฐ์กด์— 10๊ฐœ ์Šคํ”„๋ ˆ๋“œ ์‹œํ‚ด

์›ํ•˜๋Š”๋ฐ๋กœ ์•ˆ๋ ์ˆ˜๋„ ์žˆ๋‹ค
๋˜‘๊ฐ™์•„์•ผํ•จ

_id๋งŒ ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค
๊ทธ๋ž˜์„œ

๋‹ค ๋„ฃ์–ด์•ผํ•œ๋‹ค

writer, title, contents  

728x90

๋Œ“๊ธ€