WEB/REACT

[React] Rerendering(λ¦¬λ Œλ”λ§)

mingzoo 2021. 6. 24. 18:23

λ¦¬μ•‘νŠΈλ₯Ό κ³΅λΆ€ν•˜λ‹€λ³΄λ©΄, νš¨μœ¨μ„±μ΄λΌλŠ” 단어λ₯Ό 빼놓을 μˆ˜κ°€ μ—†λŠ” 것 κ°™λ‹€. μ €λ²ˆμ— μ •λ¦¬ν–ˆλ˜ DOMμ—μ„œμ˜ 가상 돔도 κ·Έλ ‡κ³ , μ–΄λ–€ ν•œ κ°œλ…μ„ 곡뢀할 λ•Œλ§ˆλ‹€ κ·Έ κ°œλ…μ΄ 효율적이게 도와쀀닀고 ν•˜λŠ” 것이 λ§Žλ‹€λŠ”κ²ƒμ΄λ‹€.

λ‚˜λŠ” 전에 이런 μ§ˆλ¬Έμ„ 받은 적이 μžˆλ‹€. 'λ¦¬λ Œλ”λ§μ΄ 뭔지 μ•„μ‹œλ‚˜μš”?'

이 글을 λ³΄λŠ” μ—¬λŸ¬λΆ„λ“€μ€ 무슨 λŒ€λ‹΅μ„ ν•˜κ² λŠ”κ°€?

λ‚˜λŠ” κ·Έλ•ŒλŠ” λΆ€λ„λŸ½μ§€λ§Œ λ¦¬λ Œλ”λ§μ΄ κ·Έλƒ₯ λ Œλ”λ§μ„ λ‹€μ‹œν•œλ‹€λŠ” κ±° μ•„λ‹Œκ°€? μ΄λ ‡κ²Œ μƒκ°ν–ˆμ—ˆλ‹€.

사싀 말 λœ»μ€ κ·Έλ ‡λ‹€. ν•˜μ§€λ§Œ, 질문의 μ˜λ„κ°€ κ³Όμ—° μ§„μ§œ λœ»μ„ λ¬Όμ–΄λ³΄λŠ” κ²ƒμ΄μ—ˆμ„κΉŒ?

μ΄λ•Œ λͺ¨λ“  μ§ˆλ¬Έμ— 닡을 κ°œλ–‘κ°™μ΄ ν•œ λ‚˜λŠ” 집에 μ™€μ„œ μ°¨λΆ„νžˆ λ‹€ μ μ–΄λ†¨μ—ˆλ‹€. 그리고 λ‹€μ‹œ κ³΅λΆ€ν•˜λ©΄μ„œ μ±„μ›Œλ‚˜κ°€κΈ° μ‹œμž‘ν–ˆλ‹€.

λ¦¬λ Œλ”λ§μ€ 무엇인지 κ·Όλ³ΈλΆ€ν„° μ•Œμ•„μ•Όν•˜λ©°, μ™œ 이걸 μ•Œμ•„μ•Όν•˜λŠ”μ§€, μ–΄λ””μ—μ„œ 이 κ°œλ…μ΄ μ“°μ΄λŠ” 건지 λ“± λ‚΄κ°€ μ–Όλ§ˆλ‚˜ μ§„μ‹¬μœΌλ‘œ μ‚¬μš©ν•˜κ³  느꼈던 λ°”λ₯Ό κ³λ“€μ—¬μ„œ λ§ν•΄μ•Όν–ˆλ‹€.

λ‘λ²ˆ λ‹€μ‹œ 같은 μ‹€μˆ˜λ₯Ό λ°˜λ³΅ν•˜μ§€ μ•ŠκΈ° μœ„ν•΄μ„œ μ΄λ ‡κ²Œ μ •λ¦¬ν•΄λ³΄λ €κ³ ν•œλ‹€.

μ΄λž˜μ„œ μ§„μ§œ κ²½ν—˜μ΄ μ€‘μš”ν•˜λ‹€ μƒκ°ν–ˆλ‹€. 쒋은 κ²½ν—˜μ΄λ“  λ‚˜μœ κ²½ν—˜μ΄λ“  κ΅ν›ˆμ„ λŠλΌλŠ” 것 κ°™λ‹€.

 

μ΄λ²ˆμ— 이 λ¦¬λ Œλ”λ§μ„ 찾아보닀가 정리λ₯Ό 잘 해놓은 λΈ”λ‘œκ·Έκ°€ 있길래 μ°Έκ³ ν•΄μ„œ μž‘μ„±ν•˜μ˜€λ‹€.


μ—¬κΈ°μ„œ μ»΄ν¬λ„ŒνŠΈμ™€ renderν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ μ„€λͺ…을 κ³„μ†ν•˜κΈ° λ•Œλ¬Έμ— 계속 μ»΄ν¬λ„ŒνŠΈμ™€ λ Œλ”ν•¨μˆ˜μ— λŒ€ν•΄μ„œ 짚고 λ„˜μ–΄κ°€κ² λ‹€!

μ»΄ν¬λ„ŒνŠΈ

λΆ€ν’ˆμ΄λΌκ³  λ³Ό 수 μžˆλ‹€.

λ²„νŠΌ, ν…μŠ€νŠΈ λ°•μŠ€ λ“±μ˜ μš”μ†Œλ“€μ„ μ»΄ν¬λ„ŒνŠΈλ‘œ μ •μ˜ν•΄μ„œ 곡μž₯처럼 UIλ₯Ό 섀계할 수 μžˆλ‹€. μ΄λŠ” μž¬μ‚¬μš©μ΄ μš©μ΄ν•˜κ²Œ λ§Œλ“€μ–΄μ£Όλ©°, 무엇보닀 μ»΄ν¬λ„ŒνŠΈ 내에 μƒκΉ€μƒˆ 및 μž‘λ™λ°©μ‹μ„ μ •μ˜ν•΄μ€€λ‹€.

Render ν•¨μˆ˜

UIλ₯Ό λ‚˜νƒ€λ‚Ό λ•Œ λˆˆμ— λ³΄μ΄λŠ” 화면을 κ΅¬μ„±ν•΄μ£ΌλŠ” λ Œλ”λ§μ΄ ν•„μš”ν•˜λ‹€.

λ¦¬μ•‘νŠΈμ—μ„œλŠ” renderν•¨μˆ˜κ°€ κ·Έ 역할을 ν•œλ‹€.

renderν•¨μˆ˜λŠ” μ»΄ν¬λ„ŒνŠΈκ°€ μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€ μ •μ˜ν•˜κ³ , 뷰의 ꡬ성과 μž‘λ™ 방식에 λŒ€ν•œ 정보λ₯Ό μ§€λ‹Œ 객체λ₯Ό λ°˜ν™˜ν•œλ‹€.


초기 λ Œλ”λ§

renderν•¨μˆ˜λ‘œ μ»΄ν¬λ„ŒνŠΈμ˜ 정보λ₯Ό μ΄μš©ν•΄ 화면을 ꡬ성(λ Œλ”λ§)ν•œλ‹€.

λ Œλ”λ§μ΄ 되면, renderν•¨μˆ˜κ°€ λ°˜ν™˜ν•œ 객체의 정보λ₯Ό μ΄μš©ν•˜μ—¬ λ¬Έμžμ—΄ ν˜•μ‹μ˜ html μ½”λ“œλ₯Ό λ°˜ν™˜ν•΄μ„œ νŠΉμ • DOM에 μ£Όμž…ν•œλ‹€.

 

  1. μ»΄ν¬λ„ŒνŠΈ μ •μ˜
  2. μ»΄ν¬λ„ŒνŠΈμ˜ 정보λ₯Ό μ΄μš©ν•΄ λ Œλ”λ§
  3. λ¬Έμžμ—΄ ν˜•μ‹ html μ½”λ“œ λ°˜ν™˜
  4. DOMμš”μ†Œμ— μ£Όμž…

λ¦¬λ Œλ”λ§

λ¦¬μ•‘νŠΈμ—μ„œ λ·°λ₯Ό μ—…λ°μ΄νŠΈ ν•  λ•Œλ₯Ό λ¦¬λ Œλ”λ§ν•œλ‹€κ³  ν•œλ‹€. 이것은 전에 DOM κ°œλ…μ„ κ³΅λΆ€ν–ˆλ˜ 것을 여기에 μ ‘λͺ©μ‹œν‚€λ©΄λœλ‹€! λ¦¬λ Œλ”λ§μ„ ν•˜λ©΄, λ·°λ₯Ό λ³€ν˜•μ‹œν‚€λŠ” κ²ƒμœΌλ‘œ λ³΄μ΄λ‚˜ 사싀 renderν•¨μˆ˜λ‘œ 인해 μƒˆλ‘œμš΄ μš”μ†Œλ‘œ κ°ˆμ•„λΌμ›Œμ§€λŠ” 것이닀. 

데이터λ₯Ό μ—…λ°μ΄νŠΈν–ˆμ„ λ•Œ, μ»΄ν¬λ„ŒνŠΈλŠ” renderν•¨μˆ˜λ₯Ό 재차 ν˜ΈμΆœν•΄μ„œ μƒˆλ‘œμš΄ λ·°λ₯Ό μƒμ„±ν•œλ‹€. 이것은 DOM을 계속 μƒˆλ‘œ κ°ˆμ•„μ•Όν•˜λŠ” 것과 같은 κ²ƒμ²˜λŸΌ κ³Όλ„ν•œ μ‚¬μš©μœΌλ‘œ νš¨μœ¨μ„±μ΄ ꡉμž₯히 떨어진닀. 이λ₯Ό λ¦¬μ•‘νŠΈμ—μ„œ 가상 DOM을 μ‚¬μš©ν•΄μ„œ μ΅œμ’…μ μœΌλ‘œ λ³€ν•œ λΆ€λΆ„λ§Œ DOM에 μ μš©ν•˜λ“―μ΄, 이전에 μƒμ„±ν•œ μ»΄ν¬λ„ŒνŠΈ 정보와 λ‹€μ‹œ λ Œλ”λ§ν•œ 정보λ₯Ό 비ꡐ해 μ΅œμ†Œν•œμ˜ μ—°μ‚°μœΌλ‘œ DOM트리λ₯Ό μ—…λ°μ΄νŠΈν•˜κ²Œ λœλ‹€κ³  λ³΄μ•˜λ‹€.

 

μ •λ¦¬ν•˜λ©΄,

  1. λ°μ΄ν„°μ˜ μ—…λ°μ΄νŠΈ
  2. μ—…λ°μ΄νŠΈλœ 데이터λ₯Ό μ΄μš©ν•œ renderν•¨μˆ˜μ˜ λ¦¬λ Œλ”λ§
  3. μ΄μ „μ˜ μ»΄ν¬λ„ŒνŠΈ, λ¦¬λ Œλ”λ§λœ μ»΄ν¬λ„ŒνŠΈμ˜ 차이 비ꡐ
  4. 바뀐 μš”μ†Œλ“€λ§Œ DOM에 반영

λ¦¬λ Œλ”λ§μ„ ν•˜λŠ” 상황

  • μžμ‹ μ˜ state κ°’ λ³€κ²½
  • λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ˜ λ¦¬λ Œλ”λ§
  • μžμ‹ μ΄ 전달받은 props κ°’ λ³€κ²½
  • κ°•μ œ μ—…λ°μ΄νŠΈ(forceUpdate) μ‹€ν–‰μ‹œ
728x90