โ† ๋ชจ๋“  ๊ธ€

reacttanstack

Tanstack Query for Angular

ํšŒ์‚ฌ์—์„œ๋Š” Angular๊ณผ ์ผ๋ ‰ํŠธ๋ก ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ˜‘์—… ํˆด์„ ์›น๊ณผ ์•ฑ์œผ๋กœ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค.

2024.04.112 min read

ํ˜„ ์ƒํ™ฉ๊ณผ ๋ฌธ์ œ์ 

ํšŒ์‚ฌ์—์„œ๋Š” Angular๊ณผ ์ผ๋ ‰ํŠธ๋ก ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ˜‘์—… ํˆด์„ ์›น๊ณผ ์•ฑ์œผ๋กœ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค.
ํ˜„์žฌ Redux๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์ง€๋งŒ, ํ™”๋ฉด์˜ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ์˜ ์ƒ์„ฑ๊ณผ ์ œ๊ฑฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์›Œ์กŒ์Šต๋‹ˆ๋‹ค.
๊ฐ ํ™”๋ฉด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ ๋ฐ ์ œ๊ฑฐํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์€ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง€๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋„ ์‰ฝ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์˜ ์ƒˆ๋กœ์šด ์ ‘๊ทผ

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ํ™”๋ฉด์ด ์•„๋‹Œ ๋…๋ฆฝ์ ์ธ ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ณ ๋ฏผํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ํ™”๋ฉด์ด ์•„๋‹Œ ์ž์ฒด์ ์ธ ๋ผ์ดํ”„ ์‚ฌ์ดํด๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

Tanstack Query์˜ ์†Œ๊ฐœ

๊ทธ๋Ÿฐ ๋‹ค์Œ Tanstack Query๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด์‹œํ‚ค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ์ง๊ด€์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ , ์บ์‹œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ API ํ˜ธ์ถœ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ปดํฌ๋„ŒํŠธ ๋กœ์ง์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ์›น์†Œ์ผ“์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ๋“ค์–ด๋ณด๊ธฐ

Todo ์•ฑ์„ ๋งŒ๋“ค์–ด ๋ณด๋ฉด์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ์ง€ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. (Github repo)
๊ฐ„๋‹จํ•œ ์ŠคํŽ™์„ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธ ์ŠคํŽ™

  1. ์›” ๋‹จ์œ„๋กœ todo ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ง
  2. ์›” ๋‹จ์œ„๋กœ todo ๋ฆฌ์ŠคํŠธ ๋ทฐ ์ œ๊ณต
  3. ์œ„์ ฏ ํ˜•ํƒœ๋กœ ์—ฌ๋Ÿฌ ์›”์„ ๋™์‹œ์— ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ทฐ ์ œ๊ณต

์„œ๋ฒ„ ์ŠคํŽ™

  1. ์›” ๋‹จ์œ„ todo ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•œ ์›น์†Œ์ผ“ ์ œ๊ณต
  2. ๋‹จ์ผ todo ์ˆ˜์ •์— ๋Œ€ํ•ด์„œ๋Š” ์›น์†Œ์ผ“ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ
  3. todo ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ์— ๋Œ€ํ•œ API ์ œ๊ณต

์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•ด๋ณธ ์•ฑ์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ ๊ณ„์ธต์—์„œ๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๋กœ์ง์„ ์ตœ์†Œํ™”ํ•˜๊ณ , Tanstack Query๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ํŠนํžˆ ์›น์†Œ์ผ“์„ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ถ€๋ถ„์—์„œ Tanstack Query๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋งค์šฐ ํšจ๊ณผ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ๊ณ„์ธต์—์„œ ์ƒ์„ฑ๊ณผ ์ œ๊ฑฐ ์‹œ์ ์— ์ž๋™์œผ๋กœ ์›น์†Œ์ผ“์˜ room์— joinํ•˜๊ณ  leaveํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์—ฌ, ํ™”๋ฉด์—์„œ๋Š” ์ด์— ๋Œ€ํ•œ ๋กœ์ง์„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ์ƒ ์˜ณ์ง€๋Š” ์•Š์Œ

Tanstack Query๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ๊ณผ ํ•จ๊ป˜, ์šฐ๋ฆฌ ์•ฑ์˜ ํŠน์„ฑ์— ๋งž์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ๋“ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด stale time ์„ค์ •์€ ์ž๋™์œผ๋กœ api๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋งŒ๋“œ๋Š”๋ฐ ์ด๋Š” ์šฐ๋ฆฌ ์•ฑ์˜ ํŠน์„ฑ์— ๋งž์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
์ตœ์†Œํ•œ์˜ api ํ˜ธ์ถœ๊ณผ ์›น์†Œ์ผ“์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์ค‘์ ์œผ๋กœ ๋‘๏ฟฝ๏ฟฝ์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋Ÿฌํ•œ ์„ค์ •์€ ์˜คํžˆ๋ ค ๋ถˆํ•„์š”ํ•œ api ํ˜ธ์ถœ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์ง์ ‘ ๋„์ž…ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, ๊ทธ ๊ฐœ๋…์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ๊ณผ ๋ฐฐ์šด ์ 

์‹ค์ œ๋กœ ๋„์ž… ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ, ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ณ ๋ คํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.
์ด๋Š” ์•ฑ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.