Apollo client cache

JIHahnSolยท2019๋…„ 12์›” 3์ผ
0
post-thumbnail

๐Ÿ—ฃ ๋จผ์ €, Apollo Client๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  1. graphQL๋ฅผ ์‚ฌ์šฉ์ค‘์ด๋‹ค. โ‡’ graphQL๊ณผ ์—ฐ๋™์„ ์‰ฝ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ
  2. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์บ์‹œ๋Š” GET ์š”์ฒญ๋งŒ ์บ์‹ฑํ•˜๋Š”๋ฐ, graphQL์€ ๋ชจ๋“  ์š”์ฒญ์„ POSTํ•˜๋ฏ€๋กœ, ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— Apollo client๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์บ์‹œ๋ž€, ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•ด๋‘๋Š” ๊ณณ

๋‚˜๋Š” hooks๋ฅผ ์‚ฌ์šฉํ•ด์„œ useQuery๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•˜๊ณ ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ฝ”๋“œ๋„ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ , loading, error, refetch, data ๋“ฑ์„ ์ œ๊ณตํ•ด์คŒ์œผ๋กœ์จ ์—๋Ÿฌํ•ธ๋“ค๋ง, ์ƒํƒœ์ฒ˜๋ฆฌ, ์žฌ์š”์ฒญ ๋“ฑ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    const { loading, error, refetch, data } = useQuery(Queries.TEMP_DATA, {
        fetchPolicy: 'cache-and-network'
      });

์•ž์„œ ์ด์•ผ๊ธฐํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ, graphQL ์„œ๋ฒ„์— ์š”์ฒญ ์‹œ ๋ชจ๋“  ์š”์ฒญ์ด POST๋กœ ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—, GET ์š”์ฒญ๋งŒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. Apollo client cache๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์„œ ๋‹จ์ˆœํžˆ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋„˜์–ด์„œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

๐Ÿ“Œ Apollo client cache ๋™์ž‘ ์›๋ฆฌ

  1. ๊ฐ๊ฐ์˜ ์š”์ฒญ๋ณ„๋กœ ์บ์‹ฑ
  2. ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ๊ตฌ์กฐํ™”ํ•˜์—ฌ ์ž๋™์œผ๋กœ cache data๋ฅผ ์—…๋ฐ์ดํŠธ ์‚ฌ์‹ค ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์™€๋‹ฟ์ง€ ์•Š์Œ.
  3. ๋กœ์ปฌ ์ƒํƒœ ๊ด€๋ฆฌ
    1. ๋กœ์ปฌ ์ƒํƒœ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. @client ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์ฃผ๋Š” ๊ฒƒ ์ด์™ธ์— ์„œ๋ฒ„์— ์š”์ฒญ๋ณด๋‚ด๋Š” ๋ฌธ๋ฒ•์ด ๊ฐ™๋‹ค. โ‡’ ๋ณ€์ˆ˜๋ช… ์•ฝ์†์„ ๋งŒ๋“ค๋ฉด ์œ ์ง€๋ณด์ˆ˜์— ์‰ฝ๋‹ค!
  4. ์œ„ ์ฝ”๋“œ์—์„œ fetchPolicy์— ํ•ด๋‹นํ•˜๋Š” ๋‹ค์–‘ํ•œ cache ์˜ต์…˜์„ ์ œ๊ณตํ•œ๋‹ค. ์ด ์˜ต์…˜์€ ๊ฐ๊ฐ์˜ ์š”์ฒญ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ๊ฐ์˜ ์š”์ฒญ์— ์ ์ ˆํ•œ ์˜ต์…˜์„ ์„ ํƒํ•œ๋‹ค๋ฉด ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” cache ์˜ต์…˜์— ์ข€ ๋” ์ž์„ธํžˆ ์ ์–ด๋ณด๋ คํ•œ๋‹ค.

๐Ÿ—ฃ cache ์˜ต์…˜ (fetchPolicy)

fetchPolicy๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์บ์‹œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์บ์‹œ์—์„œ ์ฝ๊ธฐ๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์ฟผ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์žˆ์œผ๋ฉด Apollo๋Š” ๋‹จ์ˆœํžˆ ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฟผ๋ฆฌ์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์—†์œผ๋ฉด Apollo๋Š” ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์‹คํ–‰ํ•œ๋‹ค.

๐Ÿคญcache-first ํ•ญ์ƒ ์บ์‹œ๋ฅผ ๋จผ์ € ํ™•์ธํ•œ๋‹ค. ์บ์‹œ๊ฐ€ ๋ฐ์ดํ„ฐ์— ์—†๋‹ค๋ฉด network ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

๐Ÿคญnetwork-only ์บ์‹œ์—์„œ ์ดˆ๊ธฐ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ  ํ•ญ์ƒ network ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

๐Ÿคญcache-only ์บ์‹œ๋งŒ ํ™•์ธํ•œ๋‹ค. ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿคญcache-and-network ๋จผ์ € ์บ์‹œ๋ฅผ ํ™•์ธํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.(์—…๋ฐ์ดํŠธ ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ์ผ์ง€๋ผ๋„) ์ดํ›„ network์š”์ฒญ์„ ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€ ์บ์‹œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ์—…๋ฐ์ดํŠธ๋œ ์บ์‹ฑ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿคญno-cache ์บ์‹œ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ํ•ญ์ƒ network ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. network-only ์ •์ฑ…๊ณผ ๋‹ฌ๋ฆฌ ์ฟผ๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์ง€ ์•Š๋Š”๋‹ค.

profile
Front-end Web Developer

0๊ฐœ์˜ ๋Œ“๊ธ€