π€ μ μν κ΄λ¦¬κ° μ΄λ κ² λ³΅μ‘ν κΉ?
νλ‘ νΈμλ κ°λ°μ νλ€ λ³΄λ©΄ “μ΄ μνλ μ΄λμ μ μ₯ν΄μΌ νμ§?” νλ κ³ λ―Όμ΄ μκΉλλ€.
λ‘κ·ΈμΈ μ 보, λͺ¨λ¬ μ΄λ¦Ό μ¬λΆ, API μλ΅κ°κΉμ§…
μ΄ λͺ¨λ κ±Έ νλμ μνλ‘ λ¬Άμ΄λ λ κΉμ?
1. APIμμ λ°μμ¨ μ λ³΄κ° κ³§ ν΄λΌμ΄μΈνΈ μν μλκ°?
μ²μμ μ΄λ κ² μκ°ν μ μμ΄μ. “μλ²μμ λ°μ΄ν°λ₯Ό λ°μμ€λ©΄ κ·Έκ² λ°λ‘ μνμ§!”
νμ§λ§ μ€μ λ‘λ λ κ°μ§ μνλ‘ λλ μ κ΄λ¦¬νλ κ² λ λͺ
νν©λλ€.
κ΅¬λΆ | μλ² μν (Server State) | ν΄λΌμ΄μΈνΈ μν (Client State) |
---|---|---|
μ μ | μλ²μμ κ°μ Έμ¨ λ°μ΄ν° | λΈλΌμ°μ λ΄λΆ UI μν |
μμ μ | μλ²κ° μλ³Έ (Source of Truth) | νλ‘ νΈμλ μ± |
μμ | κ²μλ¬Ό λͺ©λ‘, μ μ μ 보 | λͺ¨λ¬ μ΄λ¦Ό μ¬λΆ, νμ¬ νμ΄μ§, μ λ ₯κ° |
λκΈ°ν νμ | μ (μλ²μ μΌμΉν΄μΌ ν¨) | μλμ€ (μ±μμλ§ μ¬μ©) |
2. μ κ΅³μ΄ μ΄λ κ² λλ μΌ ν κΉ?
- μλ² μνλ λΉλκΈ°μ΄κ³ μμΈ‘μ΄ μ΄λ €μ
- ν΄λΌμ΄μΈνΈ μνλ λ΄κ° μ§μ μ μ΄ κ°λ₯
- λκΈ°ν μ± μμ΄ λ€λ¦ (API μμ² vs UI μ΄λ²€νΈ)
- ν μ€νΈμ μ μ§λ³΄μκ° μ¬μμ§
// ꡬλΆν΄μ κ΄λ¦¬νλ©΄ κΉλν¨
const { data: user } = useQuery(['user'], fetchUser); // μλ² μν
const [isEditing, setIsEditing] = useState(false); // ν΄λΌμ΄μΈνΈ μν
3. λ§€λ² APIλ‘ κ°μ Έμ€λ©΄ μ λλ?
λ¨μν μκ°νλ©΄, νμ΄μ§λ§λ€ μλ²μμ μμ²νλ©΄ λλ κ±° μλκ°? μΆμ§λ§, λ¬Έμ κ° λ§μ΅λλ€.
λ¬Έμ | μ€λͺ |
---|---|
μλ μ ν | νμ μ μμ² = λλ¦° UX |
μλ² λΆν | κ°μ λ°μ΄ν° λ°λ³΅ μμ² → νΈλν½ μ¦κ° |
λΆνμν μμ² | νμ΄μ§λ₯Ό μλ€ κ°λ€ ν λλ§λ€ μλ‘ μμ² |
μ€νλΌμΈ λ―Έμ§μ | λ€νΈμν¬ μκ° μ€λ₯ μ μ무κ²λ λͺ» 보μ¬μ€ |
4. μλ²μμ μΊμ±νλ©΄ λμ§ μλ?
λ¬Όλ‘ μλ²λ μΊμ±μ ν©λλ€. CDN, Redis λ±μ ν΅ν΄ λΉ λ₯΄κ² μλ΅νμ£ .
νμ§λ§ νλ‘ νΈμλμ νμν μΊμ±μ μ‘°κΈ λ€λ¦
λλ€.
- μλ² μΊμλ λͺ¨λ μ¬μ©μ κ³΅ν΅ – μ¬μ©μ λ§μΆ€ λ°μ΄ν°μ νκ³ μμ
- μ¬μ©μ λΈλΌμ°μ μ μ μ₯ν΄μΌ μ€νλΌμΈ λμ κ°λ₯
- UI ν¨ν΄μ λ°λΌ μ μ°νκ² λ¦¬ν¨μΉ μ μ΄ν΄μΌ ν¨
μ¦, νλ‘ νΈμλλ μ¬μ©μ κ²½ν μ΅μ νλ₯Ό μν΄ μ체 μΊμ± μ λ΅μ΄ νμν©λλ€.
5. κ·Έλμ λμ¨ λꡬ - Tanstack Query
μ΄λ° λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ¬μ©νλ λνμ μΈ λκ΅¬κ° Tanstack Queryμ λλ€.
- μλ μΊμ±
- stale-while-revalidate ν¨ν΄ μ§μ
- μλ¬, λ‘λ© μν μλ κ΄λ¦¬
const { data: user } = useQuery(['user'], fetchUser);
Tanstack Queryμ μΊμ± κΈ°μ€
μ΅μ | μ€λͺ |
---|---|
Query Key | μΊμλ₯Ό μλ³νλ κ³ μ μ΄λ¦ |
staleTime | λ°μ΄ν°λ₯Ό “μ μ ”νλ€κ³ κ°μ£Όν μκ° |
cacheTime | μΈλ§μ΄νΈ ν μΊμ μ μ§ μκ° |
refetchOnWindowFocus | μ°½ λ€μ μ΄ λ μλ 리ν¨μΉ |
enabled | 쑰건λΆλ‘ 쿼리 μ€ν μ μ΄ |
6. Tanstack Queryλ μ΄λμ λ°μ΄ν°λ₯Ό μ μ₯ν κΉ?
λͺ¨λ λ°μ΄ν°λ QueryClient
λΌλ κ°μ²΄ μμ μ μ₯λ©λλ€.
const queryClient = new QueryClient();
κ° μ¬μ©μμ λΈλΌμ°μ λ©λͺ¨λ¦¬μ μΊμκ° μ μ₯λλ©°, κ°μ 쿼리 ν€κ° λ€μ΄μ€λ©΄ κΈ°μ‘΄ λ°μ΄ν°λ₯Ό μ¬μ¬μ©ν©λλ€.
β μμ½
- APIλ‘ λ°μμ¨ λ°μ΄ν°μ UI μνλ μ±κ²©μ΄ λ€λ₯΄λ€ → λΆλ¦¬ νμ
- λ§€λ² API μμ²νλ©΄ UX, μ±λ₯, μλ² λΆν μΈ‘λ©΄μμ λΉν¨μ¨
- μλ² μΊμλ‘λ μ¬μ©μ κ°μΈν λμμ΄ μ΄λ €μ
- νλ‘ νΈμλ μΊμ±μ μ¬μ©μ κ²½ν ν₯μ, μ€νλΌμΈ λμ λ±μ νμ
- μ΄λ₯Ό μν΄ Tanstack Query κ°μ λꡬλ₯Ό νμ©νμ!