11# Suspense Error λλ²κΉ
by.κΉνκ·
2- ### λΆμ : react-query μνλ μ΄λ»κ² λμκ°λκ°?
32
4- μ΄ μΈν°λ·°λ μΉλ·° κ° tanstack -query μΊμ λκΈ°ν λκ΅¬μΈ broadcast query clientλ₯Ό μ¬μ©ν λ λ°μν μ μλ Suspense νμ λ¬Έμ μ μμΈκ³Ό ν΄κ²° κ³Όμ μ λ΄κ³ μμ΄μ.
3+ ### λΆμ : react -query μνλ μ΄λ»κ² λμκ°λκ°?
54
5+ μ΄ μΈν°λ·°λ μΉλ·° κ° tanstack-query μΊμ λκΈ°ν λκ΅¬μΈ broadcast query clientλ₯Ό μ¬μ©ν λ λ°μν μ μλ Suspense νμ λ¬Έμ μ μμΈκ³Ό ν΄κ²° κ³Όμ μ λ΄κ³ μμ΄μ.
66
77## 1. μ§λ¨νκΈ°
88
99### Q1. μ²μ λ§λ±λ¨λ¦¬μ μλ¬ νμκ³Ό μλ¬ λ©μΈμ§μ λν΄ μ§§κ² μκ°ν΄μ£Όμ€ μ μμκΉμ?
10+
1011λ¨Όμ νμλΆν° κ°λ΅ν λ§μλ리μλ©΄, ` μΉλ·°λ₯Ό 5λΆ μ λ μΌλκ³ μλ€κ°, μ±μ λ°±κ·ΈλΌμ΄λ μνλ‘ λμλ€κ° λ€μ μ±μ ν€λ©΄ κ°μκΈ° Suspenseμλ¬κ° λ°μνλ€. ` λ νμμ΄μμ΄μ.
1112
1213![ ] ( ../../images/interview/react-query/1.jpeg )
1516μλ¬λ©μΈμ§λ λ€μκ³Ό κ°μλλ°μ,
1617
1718```
18- A component suspended while responding to synchronous input.
19+ A component suspended while responding to synchronous input.
1920This will cause the UI to be replaced with a loading indicator.
2021To fix, updates that suspend should be wrapped with startTransition.
2122```
2223
2324μ΄ μλ¬ λ©μΈμ§λ μ»΄ν¬λνΈκ° ` suspense ` λ₯Ό μΌμΌν¬λ λνλλ μλ¬λ©μΈμ§μΈλ°, λ³΄ν΅ ν μ€ νλ‘ νΈμλ νκ²½μμ ` suspense ` κ° μΌμ΄λ¬λ€λ κ²μ κ³§ "μ€λΉλμ§ μμ μΏΌλ¦¬κ° μμ"μ μλ―Έν΄μ. μ»΄ν¬λνΈ λ λ μμ μ μ»΄ν¬λνΈμμ μΊμκ° μ‘΄μ¬νμ§ μλ 쿼리λ₯Ό μ¬μ©ν λ μΌμ΄λλ μλ¬μμ.
2425
25-
2626### Q2. λ¬Έμ μ μ¦μκ³Ό μλ¬ λ©μμ§λ₯Ό μ²μ μ νμ λ μ΄λ€ μκ°μ νμ
¨λμ?
2727
28- μλ¬ λ©μΈμ§μ νμμ΄ λ§€μΉμ΄ μ μλμ΄μ. μ μμ κΉμ§λ§ ν΄λ react-queryμμ μΊμλ₯Ό κ΄λ¦¬νλ μμΈν λμμ λν΄μ μκ³ μμ§ λͺ»νμ΄μ.
28+ μλ¬ λ©μΈμ§μ νμμ΄ λ§€μΉμ΄ μ μλμ΄μ. μ μμ κΉμ§λ§ ν΄λ react-queryμμ μΊμλ₯Ό κ΄λ¦¬νλ μμΈν λμμ λν΄μ μκ³ μμ§ λͺ»νμ΄μ.
2929react-query μ μ λ‘μ μκ°ν΄λ΄€μ λ μ μ¬μ©λκ³ μλ νμ΄μ§μ focusκ° λ€μ λ μμ μ κΈ°μ‘΄μ μ¬μ©νλ ` cache ` κ° μ κ±°λκ³ ` suspense ` κ° λ°μνλ κ²μ΄ μλλ λμμ΄ μλλΌκ³ μκ°νμ΄μ. κ·Έλμ μ΄ νμμ΄ λ§μ΄ μλλ€κ³ μκ°νμ΄μ.
3030
31- μ΄νμ μ°Ύμ보λ νμ¬ λλλ§ λκ³ μλ μ»΄ν¬λνΈλ€μμ 쿼리λ₯Ό μ¬μ©νκ³ μλ€λ©΄, ν΄λΉ 쿼리λ ` staleTime ` , ` cacheTime ` μ΄ μ§λ¬λ€κ³ ν΄μ λ λΌκ°μ§ μλλΌκ΅¬μ.
31+ μ΄νμ μ°Ύμ보λ νμ¬ λλλ§ λκ³ μλ μ»΄ν¬λνΈλ€μμ 쿼리λ₯Ό μ¬μ©νκ³ μλ€λ©΄, ν΄λΉ 쿼리λ ` staleTime ` , ` cacheTime ` μ΄ μ§λ¬λ€κ³ ν΄μ λ λΌκ°μ§ μλλΌκ΅¬μ.
3232
3333` suspense ` κ° λ°μν κ²μΌλ‘ 보μ μΊμ κ΄λ ¨λ λ¬Έμ λ λ§λ κ² κ°κ³ , μλ¬κ° μ¬νλλ 5λΆμ΄λΌλ μκ°μ΄ ` cacheTime ` (gcTime)κ³Ό μ°κ΄μ΄ μκΈ΄ ν κ² κ°μλ°, μ μμ μΌλ‘ νμ΄μ§μμ μ¬μ© μ€μΈ μΏΌλ¦¬κ° μ κ±°λμ§ μμμκ±°κ³ , λ€λ₯Έ μμ‘΄μ±μ μν μ¬μ΄λ μ΄ν©νΈκ° μΊμλ₯Ό λ λ Έμ κ²μ΄λΌκ³ μμ¬νκΈ° μμνμ΄μ.
3434
@@ -44,7 +44,7 @@ react-query μ μ λ‘μ μκ°ν΄λ΄€μ λ μ μ¬μ©λκ³ μλ νμ΄μ§
4444
4545κ·Έλμ λ€μ€ μΉλ·° νκ²½μ μν΄ λ°λ‘ μ€μ λ κ²μ΄ μλμ§ μ΄ν΄λ³΄μκ³ , ` broadcast query client ` κ° μ¬μ©λκ³ μλ€λ μ¬μ€μ μκ²λμμ΄μ. ` broadcast query client ` λ μ¬λ¬ ν(λλ μλμ°)κ°μ 쿼리 μΊμλ₯Ό ` λκΈ°ν(broadcast) ` νκΈ° μν μ νΈ ν¨μμμ. 쿼리 μΊμλ₯Ό λ¬Έμ μ μμΈμΌλ‘ μμ¬νκ³ μλν°λΌ μ΄λλΆν°λ κ°λ ₯νκ² ` broadcast query client ` λ₯Ό μμ¬νκ² λμμ΄μ.
4646
47- ### μ§λ¨κ³Ό λμμ μ¬νμ μ±κ³΅νμ κ±°κ΅°μ!
47+ ### μ§λ¨κ³Ό λμμ μ¬νμ μ±κ³΅νμ κ±°κ΅°μ!
4848
4949## 2. μ¬ννκΈ°
5050
@@ -58,6 +58,7 @@ react-query μ μ λ‘μ μκ°ν΄λ΄€μ λ μ μ¬μ©λκ³ μλ νμ΄μ§
58585. μ±μ λ°±κ·Έμ΄λλ‘ λ³΄λΈλ€
59596. λ€μ μ±μ μΌ λ€. (νμ΄μ§Bκ° μΌμ§λ€)
6060```
61+
6162μ΄λ κ² μ
λλ€.
6263
6364![ ] ( ../../images/interview/react-query/3.jpeg )
@@ -66,10 +67,11 @@ react-query μ μ λ‘μ μκ°ν΄λ΄€μ λ μ μ¬μ©λκ³ μλ νμ΄μ§
6667
6768μΌλ¨, λ‘컬μμ μ¬νλλκ² λ¬Έμ λ₯Ό ν΄κ²°νλ κ°μ₯ λΉ λ₯Έ κΈΈμ΄λΌκ³ μκ°ν΄μ λ‘컬μμ μ¬νμ μλνμ΄μ. μ¬νμ μν΄ λ‘컬μμ query client dev toolμ μ€μΉνμ΄μ. λ‘컬 νΈμ€νΈμμ μλΉμ€λ₯Ό λμ°κ³ , νμ΄μ§Aμμ νμ΄μ§Bλ₯Ό μ΄μ΄κ°λ©° 쿼리 μνκ° μ΄λ»κ² λ³νλμ§ νμΈνμ΄μ.
6869
69- νλ μ‘μ
μ μͺΌκ°μ νμΈνκΈ° μν΄ λλ²κ±°λ₯Ό κ±Έμ΄μ κ° μ‘μ
μμ μ΄λ€ μΌμ΄ λ°μνλμ§ νμΈνμ΄μ. λ§μ°μ€λ₯Ό ν΄λ¦ν΄μ μλμ°μ ν¬μ»€μ€ν λ 쿼리 μνκ° μ΄λ»κ² λ³κ²½λλμ§
70+ νλ μ‘μ
μ μͺΌκ°μ νμΈνκΈ° μν΄ λλ²κ±°λ₯Ό κ±Έμ΄μ κ° μ‘μ
μμ μ΄λ€ μΌμ΄ λ°μνλμ§ νμΈνμ΄μ. λ§μ°μ€λ₯Ό ν΄λ¦ν΄μ μλμ°μ ν¬μ»€μ€ν λ 쿼리 μνκ° μ΄λ»κ² λ³κ²½λλμ§
7071λ±μ΄μ.
7172
7273### Q3. 쿼리μ μνκ°μμ μμΈμ μ°ΎμΌμ
¨λμ?
74+
7375κ²°λ‘ μ μΊμ μνμ κ΄λ ¨μ΄ μμμ΄μ. μΊμ μνμλ μλμ μνλ€μ΄ μμ΄μ.
7476| μν | μλ―Έ|
7577| ---| --|
@@ -79,8 +81,9 @@ react-query μ μ λ‘μ μκ°ν΄λ΄€μ λ μ μ¬μ©λκ³ μλ νμ΄μ§
7981| inactive| μ»΄ν¬λνΈμμ λ μ΄μ μ¬μ©νμ§ μμ§λ§ μμ§ μΊμλ λ¨μμμ΄μ (cacheTime μ΄ν μμ λ¨)|
8082
8183μ¬κΈ°μ ` staleTime ` κ³Ό ` cacheTime ` μ μμ ν λ³λμ κ°λ
μ΄μμ.
84+
8285```
83- μΊμ μμ 쑰건:
86+ μΊμ μμ 쑰건:
8487 - `inactive` μνμΌ λλ§ `cacheTime` κ²½κ³Ό ν μμ κ°λ₯
8588 - μ»΄ν¬λνΈμμ μ°Έμ‘° μ€μ΄λ©΄ μ λ μλ μμ λμ§ μμ
8689fresh μνλΌλ μ¬μ© μ€μΈ μ»΄ν¬λνΈκ° μμΌλ©΄ `inactive` μνκ° λ μ μμ.
@@ -91,12 +94,12 @@ fresh μνλΌλ μ¬μ© μ€μΈ μ»΄ν¬λνΈκ° μμΌλ©΄ `inactive` μνκ°
9194
9295![ ] ( ../../images/interview/react-query/4.jpeg )
9396
94-
9597### Q4. μ¬νμ μ κ²½μ°μ λΆλΆμ΄ μλμ?
96- μΊμ κ΄λ ¨λ λ¬Έμ λΌκ³ μκ°ν΄μ μΊμ νμμ 1μ΄λ‘ μ€μ νκ³ ` inactive ` μ΄ν μΊμκ° μ κ±°λ μν©μ λΉ λ₯΄κ² μ¬ννμ΄μ.
9798
99+ μΊμ κ΄λ ¨λ λ¬Έμ λΌκ³ μκ°ν΄μ μΊμ νμμ 1μ΄λ‘ μ€μ νκ³ ` inactive ` μ΄ν μΊμκ° μ κ±°λ μν©μ λΉ λ₯΄κ² μ¬ννμ΄μ.
98100
99101### Q5. μ¬ν μ€ κ°μ₯ μ΄λ €μ λ μκ°μ΄ μμλμ?
102+
100103κ²°κ΅, μ»΄ν¬λνΈμμ 리λλλ§μ΄ νΈλ¦¬κ±°λλ©° μλ¬κ° λ°μνλ κ²μΌν
λ°, μ΄ λ¦¬λλλ§μ΄ μΈμ νΈλ¦¬κ±° λλμ§ μμλ΄λλ° μ¬λ¬ κ³Όμ μ΄ νμνμ΄μ.
101104
102105μ²μμλ λ¨μν μΊμκ° μ¬λΌμ§λ μκ°μΌ κ²μ΄λΌ μκ°νμ΄μ. κ·Έλμ query client dev toolμμ μ§μ μΊμλ₯Ό μμ ν΄μ μ¬νν΄λ³΄κΈ°λ νμ΄μ. νμ§λ§ μ¬νμ΄ μλλλΌκ³ μ.
@@ -110,11 +113,10 @@ fresh μνλΌλ μ¬μ© μ€μΈ μ»΄ν¬λνΈκ° μμΌλ©΄ `inactive` μνκ°
110113- query μνκ° νλλΌλ μ‘΄μ¬ν κ²½μ°
111114```
112115
113- query μνκ° νλλΌλ μ‘΄μ¬ν λλΌλ μ‘°κ±΄μ΄ λ¦¬ν¨μΉ 쑰건μ μμμ΄μ. 쿼리 μνλ₯Ό νλλ§ λκ³ ν
μ€νΈλ₯Ό νμλλ°, κ·Έ μΊμλ₯Ό μ§μ κΈ° λλ¬Έμ μ‘΄μ¬νλ μΊμκ° νλλ λ¨μ§ μκ² λμ΄ λ¦¬ν¨μΉκ° μμΌμ΄λκ³ , 리λλκ° μμΌμ΄λ¬λ κ±°μμ΄μ.
116+ query μνκ° νλλΌλ μ‘΄μ¬ν λλΌλ μ‘°κ±΄μ΄ λ¦¬ν¨μΉ 쑰건μ μμμ΄μ. 쿼리 μνλ₯Ό νλλ§ λκ³ ν
μ€νΈλ₯Ό νμλλ°, κ·Έ μΊμλ₯Ό μ§μ κΈ° λλ¬Έμ μ‘΄μ¬νλ μΊμκ° νλλ λ¨μ§ μκ² λμ΄ λ¦¬ν¨μΉκ° μμΌμ΄λκ³ , 리λλκ° μμΌμ΄λ¬λ κ±°μμ΄μ.
114117
115118ν
μ€νΈ λΉμμ λΆλͺ
ν 'query optionμ΄ refetchOnWindowFocusκ° μ€μ λμ΄μλλ°, μ 리ν¨μΉκ° μμΌμ΄λλκ±°μ§?'νλ©° μ λ¨Ήμλ κΈ°μ΅μ΄ λ©λλ€.
116119
117-
118120## 3. μμ νκΈ°
119121
120122### Q1. λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ κ°μ₯ λ¨Όμ κ³ λ €ν μμ λ°©ν₯μ 무μμ΄μκ³ , κ·Έκ²μ μ νν μ΄μ λ 무μμ΄μλμ?
@@ -124,16 +126,17 @@ query μνκ° νλλΌλ μ‘΄μ¬ν λλΌλ μ‘°κ±΄μ΄ λ¦¬ν¨μΉ 쑰건μ
124126'` broadcast query client experimental ` μ μ½λλ₯Ό μμ ν λ²μ μ ν¨μΉν΄μ μ¬μ©νλ©΄ λκ² λ€'λ μκ°μ νκ³ μ½λλ₯Ό νμΈνλ¬ λΌμ΄λΈλ¬λ¦¬ μ½λλ₯Ό μ°Ύμ보λ€κ° ν΄λΉ λ²κ·Έκ° μμ λμλ€λ μ¬μ€μ λ°κ²¬νμ΄μ. λ€λ₯Έ μΉλ·°μμ μ νλ 쿼리 μ κ±° broadcast λ©μΈμ§κ° νμ¬ μΉλ·°μμ μ¬μ©λκ³ μλ 쿼리λΌλ©΄ μμ λμ§ μλλ‘ λ³΄μν΄μ£Όλ λ³κ²½μ΄μμ΄μ. λ°λΌμ ν΄λΉ λ²μ μΌλ‘ μ
λ°μ΄νΈνλ©΄ λκ² λ€κ³ μκ°νμ΄μ.
125127κ·Έλ¦¬κ³ λ¬Έμ κ° ν΄κ²°λμμ΅λλ€. ππΌ
126128
127-
128129## μΆκ°μ§λ¬Έ
130+
129131### Q1. λλ²κΉ
μ€ ν¬κΈ°νκ³ μΆμ μκ°λ μμ κ² κ°μμ. μ΄λ€ μκ°μ΄ λκΉμ§ λλ²κΉ
μ νκ² νλμ§ κΆκΈν΄μ.
130- μ²μ μλ¬ λ©μΈμ§λ νμμ λ΄€μ λ ` useQuery ` , ` cache-time ` μ¬μ΄ μ΄λκ°μ μ‘΄μ¬νλ μ΄μμΌ κ² κ°μ ν¬κ² μ΄λ ΅μ§ μμ μ΄μμΌ κ²μ΄λΌ μκ°νμ΄μ. λ κ·Έλ₯ μμ μ¬λ―Έμ κΆκΈμ¦μΌλ‘ νλ³΄κ³ μΆμμ΄μ. κ·Έλ¦¬κ³ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ©΄ λ¬λμ΄ μκΈΈ κ² κ°μκ±°λ μ. βκ²°κ΅μ ν΄κ²°μ λ κ²μ΄λ€β λΌλ λ―Ώμμ΄ μμμ΅λλ€ ^-^
131132
133+ μ²μ μλ¬ λ©μΈμ§λ νμμ λ΄€μ λ ` useQuery ` , ` cache-time ` μ¬μ΄ μ΄λκ°μ μ‘΄μ¬νλ μ΄μμΌ κ² κ°μ ν¬κ² μ΄λ ΅μ§ μμ μ΄μμΌ κ²μ΄λΌ μκ°νμ΄μ. λ κ·Έλ₯ μμ μ¬λ―Έμ κΆκΈμ¦μΌλ‘ νλ³΄κ³ μΆμμ΄μ. κ·Έλ¦¬κ³ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ©΄ λ¬λμ΄ μκΈΈ κ² κ°μκ±°λ μ. βκ²°κ΅μ ν΄κ²°μ λ κ²μ΄λ€β λΌλ λ―Ώμμ΄ μμμ΅λλ€ ^-^
132134
133135### Q2. λλ²κΉ
κΏνμ΄ μλ€λ©΄?
136+
134137λ‘컬과 κ°μ μ κ·ΌνκΈ° μ¬μ΄ νκ²½μμ μ΅λν λΉμ·ν μ¬ν 쑰건μ λ§λλ κ²μ
λλ€. ` μ¬νμ μ±κ³΅νλ€λ κ² === λ¬Έμ λ₯Ό ν΄κ²°νλ κ² ` μ΄λΌκ³ μκ°ν΄μ.
135138κ·Έλμ μ¬ν 쑰건μ λ§λλ κ² μ체λ μ¬λ¬ κ³Όμ μ κ±°μ³μ μ¬νμ μ±κ³΅ν΄μ. λμΆ© λΉμ·ν μ¬ν쑰건μ λ§λλ κ²μ μ€νλ € λλ²κΉ
κ³Ό λ©μ΄μ§ μ μμ΄μ. νμ€ν μ¬ν쑰건μ λ§λλλ°μλ μκ°μ λ§μ΄ ν¬μνλ κ² κ°μμ.
136139
137140첫째λ‘, μ΄λ»κ² νλ©΄ μ¬μ©μ νκ²½κ³Ό κ°μ₯ λκ°μ λ‘컬 μ¬ν νκ²½μ λ§λ€ μ μμκΉμ μ§μ€ν΄μ. μλ₯Όλ€μ΄, ` μλ‘μ΄ μΉλ·°λ₯Ό μ¬λκ² === μλ‘μ΄ localhost:3000λ₯Ό λμ°λκ² ` κ³Ό κ°μ΄, μ λ§ κΈ°λ³Έμ΄κ³ λ¨μν λ΄μ©λΆν° μ΅λν κ°μ νκ²½μ λ§λ€λ©° μ¬νν΄λ €κ³ ν΄μ.
138141
139- λμ§Έλ‘λ, μ¬νμ€κ° κ³Όμ μμλ μ¬νμ΄ μλλ μ΄μ λ₯Ό 곡λΆνλ νΈμ΄μμ. μλ₯Όλ€μ΄, "hydration λ¬Έμ μΈκ°? μ¬λ΄ λΌμ΄λΈλ¬λ¦¬μμ λκ° νΉλ³νκ² νλκ² μλ?" μλ¬Έμ΄ λλ μ§μ μ΄ μκΈ°λ©΄ μ½λλ₯Ό μ΄ν΄λ³΄λ©΄μ κ°μ€μ κ²μ¦ν΄λ³΄λ κ³Όμ μ ν΅ν΄μ ν΄κ²°λ°©λ²μ μ’ λ κ°κΉμμ§λ κ² κ°μμ.
142+ λμ§Έλ‘λ, μ¬νμ€κ° κ³Όμ μμλ μ¬νμ΄ μλλ μ΄μ λ₯Ό 곡λΆνλ νΈμ΄μμ. μλ₯Όλ€μ΄, "hydration λ¬Έμ μΈκ°? μ¬λ΄ λΌμ΄λΈλ¬λ¦¬μμ λκ° νΉλ³νκ² νλκ² μλ?" μλ¬Έμ΄ λλ μ§μ μ΄ μκΈ°λ©΄ μ½λλ₯Ό μ΄ν΄λ³΄λ©΄μ κ°μ€μ κ²μ¦ν΄λ³΄λ κ³Όμ μ ν΅ν΄μ ν΄κ²°λ°©λ²μ μ’ λ κ°κΉμμ§λ κ² κ°μμ.
0 commit comments