πŸ’¬ Q&A λͺ¨μŒ #01

BOOaΒ·2024λ…„ 11μ›” 30일

Q&A

λͺ©λ‘ 보기
1/5
post-thumbnail

πŸ”— 2024λ…„ 11μ›” λ„·μ§Έ μ£Ό ( 11.25 ~ 11.30 ) - μ€‘μš” Q&A λͺ¨μŒ


Q. 가상 DOM의 λ³€κ²½ 횟수 λ§ˆλ‹€ 생성, 비ꡐ , 반영이 μΌμ–΄λ‚˜λŠ”κ°€?

"λ§Œμ•½ 각 λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ β€œhello”, β€œhi”, β€œyaya” κ°€ μƒμ„±λ˜λŠ” 3개의 λ²„νŠΌμ΄ μžˆμ„ λ•Œ, μ‚¬μš©μžκ°€ κ·Έ λ²„νŠΌ 3개λ₯Ό μ—°μ†μœΌλ‘œ λˆŒλ €μ„ λ•Œ, 3번의 λ Œλ”λ§μ΄ μΌμ–΄λ‚˜λŠ” 걸까?"

πŸ“ κ²°λ‘ 

"μ΄λŸ¬ν•œ 뢀뢄은 μ„±λŠ₯ μ΅œμ ν™”μ™€ 관련이 κΉŠλ‹€. μ‚¬μš©μžκ°€ λ²„νŠΌ 3개λ₯Ό λΉ λ₯΄κ²Œ λˆŒλ €μ„ λ•Œ, ReactλŠ” 각각의 λ²„νŠΌ 클릭 이벀트둜 인해 μƒνƒœκ°€ λ³€κ²½λ˜μ§€λ§Œ, 변경을 μ²˜λ¦¬ν•˜λŠ” 방식은 λ‹¨μˆœνžˆ 3번 λͺ¨λ‘ 가상 DOM을 μƒμ„±ν•˜κ³  λΉ„κ΅ν•˜κ³  λ°˜μ˜ν•˜λŠ” 게 μ•„λ‹ˆλ‹€."

  • ReactλŠ” 배치 μ—…λ°μ΄νŠΈ(Batched Updates) λΌλŠ” μ΅œμ ν™” 기법을 μ‚¬μš©ν•œλ‹€. 이 기법은 μ—¬λŸ¬ μƒνƒœ 변경이 λ°œμƒν•΄λ„, κ·Έ κ²°κ³Όλ₯Ό ν•œ λ²ˆμ— λΉ„κ΅ν•˜κ³  λΈŒλΌμš°μ € DOM에 λ°˜μ˜ν•  수 μžˆλ‹€.

βœ”γ…€λ°°μΉ˜ μ—…λ°μ΄νŠΈ(Batched Updates)

  1. μƒνƒœ λ³€κ²½ μš”μ²­ : μ‚¬μš©μžκ°€ λ²„νŠΌμ„ λˆ„λ₯Ό λ•Œλ§ˆλ‹€ μƒνƒœ λ³€κ²½ μš”μ²­μ΄ λ°œμƒν•œλ‹€.

  2. 배치 처리 : ReactλŠ” λ³€κ²½ μš”μ²­λ“€μ„ λͺ¨μ•„ ν•˜λ‚˜μ˜ λ Œλ”λ§ μ‚¬μ΄ν΄μ—μ„œ μ²˜λ¦¬ν•œλ‹€.

  3. 가상 DOM 비ꡐ : λ³€κ²½λœ μƒνƒœλ₯Ό 기반으둜 μ΅œμ’…μ˜ 가상 DOM을 μƒμ„±ν•˜κ³  이전 가상 DOMκ³Ό λΉ„κ΅ν•œλ‹€.

  4. DOM μ—…λ°μ΄νŠΈ : λ³€κ²½λœ λΆ€λΆ„λ§Œ λΈŒλΌμš°μ € DOM에 ν•œ λ²ˆμ— λ°˜μ˜ν•œλ‹€


Q. 캐싱 μ΄λž€?

πŸ“ κ²°λ‘ 

"자주 μ‚¬μš©ν•˜λŠ” 데이터λ₯Ό μ €μž₯ν•΄λ‘μ—ˆλ‹€κ°€ λΉ λ₯΄κ²Œ κΊΌλ‚΄ μ“°λŠ” 것이닀."

βœ”γ…€μΊμ‹œλ₯Ό μ‚¬μš©ν•˜λŠ” 이유

  • μ›Ή μ‚¬μ΄νŠΈλ₯Ό λ°©λ¬Έν•  λ•Œ, 이미 λ‹€μš΄λ‘œλ“œν•œ μ΄λ―Έμ§€λ‚˜ λ°μ΄ν„°λŠ” λ‹€μ‹œ κ°€μ Έμ˜€μ§€ μ•Šκ³  μ €μž₯된 데이터λ₯Ό μ‚¬μš©ν•œλ‹€.
  • 같은 데이터λ₯Ό μ—¬λŸ¬ 번 λ‹€μš΄λ‘œλ“œ ν•˜μ§€ μ•Šμ•„μ„œ 데이터 μ‚¬μš©λŸ‰μ„ 쀄일 수 μžˆλ‹€.

βœ”γ…€Disable Cache

  • μΊμ‹œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šλ„λ‘ μ„€μ •ν•˜λŠ” κ²ƒμœΌλ‘œ, 항상 졜슨 데이터λ₯Ό κ°€μ Έμ™€μ„œ 확인할 수 μžˆλ‹€.
  • μ›Ή μ‚¬μ΄νŠΈλ₯Ό μˆ˜μ •ν–ˆλŠ”λ°, λΈŒλΌμš°μ €κ°€ μ˜›λ‚  μΊμ‹œ 데이터λ₯Ό 보여쀄 수 μžˆμ–΄μ„œ ν•„μš”ν•˜λ‹€.
  • 개발 ν•  λ•ŒλŠ” Disable Cache 둜 ν™•μΈν•˜λŠ” 게 μ’‹λ‹€.

Q. JSX λ²”μœ„ λ‚΄λΆ€λŠ” 어디인가?

"쑰건뢀 λ Œλ”λ§μ—μ„œ JSX λ‚΄λΆ€μ—μ„œλŠ” if 문은 μ‚¬μš©ν•  수 μ—†μ–΄μ„œ JSX λ²”μœ„ λ°–μ—μ„œ μ‚¬μš©ν•œλ‹€κ³  ν•˜λŠ”λ°, μ •ν™•νžˆ JSX λ²”μœ„κ°€ μ–΄λ””μΌκΉŒ?"

πŸ“ κ²°λ‘ 

"JSX λ‚΄λΆ€λŠ” return λ¬Έ μ•ˆμ— μžˆλŠ” μ½”λ“œμ΄λ‹€."

  • JSX λ‚΄λΆ€μ—μ„œ {} λ₯Ό μ‚¬μš©ν•˜λ©΄ JavaScript μ½”λ“œλ₯Ό μ‹€ν–‰ν•  수 μžˆλ‹€.
  • JSX μ™ΈλΆ€μ—μ„œλŠ” 일반 JavaScript 문법을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

"그러면 if 문도 {} λ₯Ό μ‚¬μš©ν•˜λ©΄ JSX λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” κ±° μ•„λ‹Œκ°€?"

πŸ“ κ²°λ‘ 

"JSX은 JavaScript ν‘œν˜„μ‹μ„ μ‚¬μš©ν•  수 μžˆλŠ” μ˜μ—­μ΄μ§€λ§Œ, if 문은 ν‘œν˜„μ‹μ΄ μ•„λ‹ˆλΌ 문이기 λ•Œλ¬Έμ— μ‚¬μš©ν•  수 μ—†λ‹€."

  • ν‘œν˜„μ‹μ€ 값을 λ°˜ν™˜ν•˜λŠ” μ½”λ“œμ΄λ‹€.
  • 문은 νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€λ§Œ, 값을 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€. ex) if , for

Q. useState와 ν΄λ‘œμ €, μ½œλ°±ν•¨μˆ˜μ˜ 관계?

"[count, setCount]μ—μ„œ setCount ν•¨μˆ˜μ—μ„œ (count +1)이 μ•„λ‹Œ μ½œλ°±ν•¨μˆ˜λ₯Ό μ“°λŠ” 게 더 μ•ˆμ „ν•œ μ΄μœ λŠ” 뭘까?"

πŸ“ κ²°λ‘ 

"useState λŠ” ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒνƒœ 값을 κ΄€λ¦¬ν•œλ‹€. React의 μƒνƒœ μ—…λ°μ΄νŠΈλŠ” 비동기적이기에 μ—¬λŸ¬λ²ˆ setCountλ£° ν˜ΈμΆœν•  λ•Œ, μƒνƒœ μ—…λ°μ΄νŠΈκ°€ μ˜ˆμƒλŒ€λ‘œ λ™μž‘ν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€. μ΄λ•Œ 콜백 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κ²Œ 되면, 이전 μƒνƒœλ₯Ό ν™•μ‹€ν•˜κ²Œ μ°Έμ‘°ν•  수 있고 이λ₯Ό 기반으둜 μ•ˆμ „ν•˜κ²Œ μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈ ν•  수 μžˆλ‹€."

βœ”γ…€μ›μΈ-κ²°κ³Ό 논리 흐름

  • useState λŠ” μƒνƒœ κ°’κ³Ό μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” 것이며, 이 λ°˜ν™˜ 값듀은 λ‚΄λΆ€μ μœΌλ‘œ ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•œλ‹€.
  • μ—¬κΈ°μ„œ ν΄λ‘œμ €λŠ” λ³€μˆ˜μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό κΈ°μ–΅ν•˜λŠ” ν•¨μˆ˜ μž„μ„ 생각해라.
  • React의 μƒνƒœ μ—…λ°μ΄νŠΈλŠ” λΉ„λ™κΈ°μ μœΌλ‘œ 처리 λœλ‹€. 즉, setCount κ°€ 호좜될 λ•Œ, μ¦‰μ‹œ μƒνƒœκ°€ λ³€κ²½λ˜λŠ” 것이 μ•„λ‹ˆλΌ μ—…λ°μ΄νŠΈ 큐에 μƒνƒœ 변경을 μ˜ˆμ•½ ν•˜κ³  μ»΄ν¬λ„ŒνŠΈλ₯Ό μž¬λ Œλ”λ§ ν•œ 후에 μƒνƒœλ₯Ό μ‹€μ œλ‘œ λ³€κ²½ν•˜κ²Œ λœλ‹€.
  • κ·Έλž˜μ„œ μ—¬λŸ¬ 번 ν˜ΈμΆœν•˜κ²Œ 되면, μƒνƒœ 값이 μ˜ˆμƒκ³Ό λ‹€λ₯΄κ²Œ λ™μž‘ν•  수 μžˆλ‹€. μ™œλƒν•˜λ©΄ μ¦‰μ‹œ μƒνƒœλ₯Ό λ³€κ²½ν•΄μ£ΌλŠ” 것이 μ•„λ‹Œλ°, 이전 μƒνƒœλ₯Ό κΈ°μ€€μœΌλ‘œ μ—…λ°μ΄νŠΈκ°€ μΌμ–΄λ‚˜κΈ° λ•Œλ¬Έμ΄λ‹€. (μ•„λž˜μ˜ μ½”λ“œλ₯Ό μ°Έκ³ )
const [count, setCount] = useState(0);

setCount(count + 1); // 1
setCount(count + 1); // 1
  • μ½”λ“œλ₯Ό 보면 setCount λ₯Ό ν˜ΈμΆœν–ˆμ§€λ§Œ, μ—…λ°μ΄νŠΈ 된 μƒνƒœ 값이 μ•„λ‹Œ, count=0 인 μƒνƒœλ₯Ό μ°Έμ‘°ν•˜μ—¬ 2번 λ‹€ 1 을 λ°˜ν™˜ν•˜κ³  μžˆλ‹€.
  • μ΄λŸ¬ν•œ 문제 λ•Œλ¬Έμ—, μƒνƒœ μ—…λ°μ΄νŠΈ μ‹œ ν™•μ‹€ν•˜κ²Œ 이전 μƒνƒœ 값을 기반으둜 μƒˆλ‘œμš΄ μƒνƒœλ₯Ό μ„€μ •ν•  ν•„μš”κ°€ μžˆλ‹€.
  • μ—¬κΈ°μ„œ 콜백 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μ΅œμ‹  이전 μƒνƒœλ₯Ό μ•ˆμ „ν•˜κ²Œ μ°Έμ‘°ν•  수 μžˆλŠ”λ°, 이것을 ν•¨μˆ˜ν˜• μ—…λ°μ΄νŠΈ 방식 이라고 ν•œλ‹€.
  • ν•¨μˆ˜ν˜• μ—…λ°μ΄νŠΈ 방식을 μ‚¬μš©ν•˜λ©΄ setCount κ°€ 호좜될 λ•Œ 이전 μƒνƒœλ₯Ό 인자둜 λ°›λŠ” ν•¨μˆ˜λ₯Ό μ „λ‹¬ν•œλ‹€.
  • ReactλŠ” 이 ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜κΈ° 전에 μƒνƒœλ₯Ό 배치 큐 μ—μ„œ κ°€μ Έμ˜€κ³ , 이λ₯Ό ν•¨μˆ˜μ˜ 인자둜 전달 ν•˜μ—¬ μ΅œμ‹  μƒνƒœλ₯Ό 기반으둜 μƒˆλ‘œμš΄ μƒνƒœλ₯Ό 계산할 수 있게 ν•΄μ€€λ‹€.
  • μ΄λŠ” React의 νŠΉμ§•μΈ 단방ν–₯ 데이터 흐름 과도 연관이 μžˆλ‹€.

βœ”γ…€React μƒνƒœ 관리 λ©”μ»€λ‹ˆμ¦˜

  • μƒνƒœ μ—…λ°μ΄νŠΈκ°€ λ°œμƒν•  λ•Œλ§ˆλ‹€, ReactλŠ” μƒνƒœ 변경을 μ¦‰μ‹œ μ μš©ν•˜λŠ” λŒ€μ‹  μ—…λ°μ΄νŠΈ 큐에 μΆ”κ°€ν•˜κ³  λ‹€μŒ λ Œλ”λ§ μ‹œμ μ— ν•œ λ²ˆμ— 처리 ν•œλ‹€. (μœ„μ˜ 배치 μ—…λ°μ΄νŠΈ μ°Έκ³ )
  • 이 κ³Όμ •μ—μ„œ μ—…λ°μ΄νŠΈ 큐에 μŒ“μΈ μƒνƒœ λ³€κ²½ μž‘μ—…λ“€μ΄ 순차적으둜 μ‹€ν–‰ λœλ‹€.
  1. setCount κ°€ 호좜되면, ReactλŠ” μ—…λ°μ΄νŠΈ 큐에 μƒνƒœ λ³€κ²½ μš”μ²­μ„ μΆ”κ°€ν•œλ‹€.
  2. 각 μƒνƒœ μ—…λ°μ΄νŠΈλŠ” μƒνƒœκ°€ 변경될 λ•Œλ§ˆλ‹€, 이전 μƒνƒœλ₯Ό ν•¨μˆ˜μ— μ „λ‹¬ν•˜κ³  이λ₯Ό λ°”νƒ•μœΌλ‘œ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό κ³„μ‚°ν•œλ‹€. μ΄λ•Œ ReactλŠ” μ—…λ°μ΄νŠΈ 큐의 μƒνƒœλ₯Ό ν•˜λ‚˜μ”© μ²˜λ¦¬ν•˜λ©΄μ„œ , setState 둜 μ „λ‹¬λœ ν•¨μˆ˜μ˜ 이전 μƒνƒœ 값을 μžλ™μœΌλ‘œ μ΅œμ‹  κ°’μœΌλ‘œ μ—…λ°μ΄νŠΈ ν•œλ‹€.

0개의 λŒ“κΈ€