← λͺ©λ‘μœΌλ‘œ
Tanstack Query for Angular

ν˜„ 상황과 문제점

νšŒμ‚¬μ—μ„œλŠ” 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 ν˜ΈμΆœμ„ μœ λ°œν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ 직접 λ„μž…ν•˜μ§€λŠ” μ•Šμ•˜μ§€λ§Œ, κ·Έ κ°œλ…μ„ ν™œμš©ν•˜μ—¬ λ°μ΄ν„°μ˜ 라이프 사이클을 κ΄€λ¦¬ν•˜λŠ” 라이브러리λ₯Ό λ§Œλ“€κΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€.

결둠과 배운 점

μ‹€μ œλ‘œ λ„μž… ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ, μ΄λŸ¬ν•œ 과정을 톡해 데이터 ꡬ쑰λ₯Ό 섀계할 λ•Œ ν™•μž₯μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ κ³ λ €ν•˜λŠ” 방법을 λ°°μ› μŠ΅λ‹ˆλ‹€.
μ΄λŠ” μ•±μ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κ³  μœ μ§€λ³΄μˆ˜λ₯Ό μš©μ΄ν•˜κ²Œ λ§Œλ“œλŠ” 데 큰 도움이 될 κ²ƒμž…λ‹ˆλ‹€.