λ¦¬λžœλ”λ§?🧐

Samuel .JΒ·2022λ…„ 3μ›” 26일
0

μž‘μ„±ν•˜κ²Œλœ 계기

λ¦¬μ•‘νŠΈλ₯Ό μ‚¬μš©ν•˜λ©° κ°•μ˜λ₯Ό λ“€μ„λ•Œ λ¦¬λ Œλ”λ§ μ΄λž€ 말을 자주 λ“€μ—ˆλŠ”λ° 그게 뭔지 λͺ°λžμ§€λ§Œ 크게 μ€‘μš”ν•˜μ§€ μ•Šλ‹€ μƒκ°ν•˜κ³  진행을 ν•˜κ²Œ λ˜μ—ˆλ‹€. ν•˜μ§€λ§Œ 자주 λ‚˜μ˜€λŠ” 단어인 만큼 μ•Œμ•„λ‘λ©΄ 쒋을것 κ°™μ•„μ„œ λΈ”λ‘œκ·Έμž‘μ„±μ„ ν•˜λ©° μ•Œκ²Œλœ 것듀을 μ •λ¦¬ν•˜λ €κ³  λ§ˆμŒμ„ λ¨Ήμ—ˆλ‹€.

λžœλ”λ§μ΄λž€?

  • μ‚¬μš©μž 화면에 View(λ‚΄μš©)λ₯Ό λ³΄μ—¬μ£ΌλŠ” 것을 λ Œλ”λ§μ΄λΌκ³  ν•œλ‹€.
  • Reactμ—˜λ¦¬λ¨ΌνŠΈλ₯Ό 루트 DOMλ…Έλ“œμ— λ Œλ”λ§ ν•˜λ €λ©΄ λ‘˜λ‹€ ReactDOM.render()둜 μ „λ‹¬ν•˜λ©΄ λœλ‹€.
  • 초기 λ Œλ”λ§μ΄λž€ μ–΄λ– ν•œ UIκ΄€λ ¨ ν”„λ ˆμž„μ›Œν¬, 라이브러리λ₯Ό μ‚¬μš©ν•˜λ“ μ§€ 간에 맨 처음 μ‚¬μš©μž 화면에 λ·°λ₯Ό λ³΄μ—¬μ£ΌλŠ” 것을 초기 λ Œλ”λ§μ΄λΌκ³  ν•œλ‹€. λ¦¬μ•‘νŠΈμ—μ„œλŠ” λ Œλ”λ§μ„ λ‹€λ£¨λŠ” renderν•¨μˆ˜κ°€ μžˆλ‹€.

Render ν•¨μˆ˜μ˜ νŠΉμ§•

  1. μ»΄ν¬λ„ŒνŠΈλ₯Ό μ •μ˜ν•œλ‹€.
  2. 뷰의 λͺ¨μ–‘μƒˆμ™€ μž‘λ™ 방식에 λŒ€ν•œ 정보λ₯Ό μ§€λ‹Œ 객체λ₯Ό λ°˜ν™˜ν•œλ‹€.
    ( render()ν•¨μˆ˜λŠ” htmlν˜•μ‹μ˜ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜μ§€ μ•Šκ³ , λ·°κ°€ μ–΄λ–»κ²Œ 생겼고 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€μ— λŒ€ν•œ 정보λ₯Ό μ§€λ‹Œ 객체λ₯Ό λ°˜ν™˜ν•œλ‹€.)
  3. λ‚΄λΆ€ μ»΄ν¬λ„ŒνŠΈ μž¬κ·€μ  λ Œλ”λ§μ΄ κ°€λŠ₯ν•˜λ‹€.(μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—λŠ” 또 λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈλ“€μ΄ λ“€μ–΄κ°ˆ 수 μžˆμ–΄, render ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λ©΄ κ·Έ 내뢀에 μžˆλŠ” μ»΄ν¬λ„ŒνŠΈλ“€λ„ μž¬κ·€μ μœΌλ‘œ λ Œλ”λ§ λœλ‹€.)

μ–΄λ–€ μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ”κ°€?

초기 λ Œλ”λ§μ„ ν•  λ•Œ 과정은 λ‹€μŒκ³Ό κ°™λ‹€ -> λ‚΄λΆ€ μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§μ„ μ‹œμž‘μœΌλ‘œ μ΅œμƒμœ„ μ»΄ν¬λ„ŒνŠΈμ™€ λ‚΄λΆ€ μ»΄ν¬λ„ŒνŠΈλ“€μ„ λ Œλ”λ§ν•¨.(λ‚΄λΆ€ to μ΅œμƒμœ„) -> μ΅œμƒμœ„ μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§ μž‘μ—…μ΄ λλ‚˜λ©΄ μ§€λ‹ˆκ³  μžˆλŠ” 정보듀을 μ‚¬μš©ν•˜μ—¬ HTMLλ§ˆν¬μ—…μ„ λ§Œλ“ λ‹€. -> μ‹€μ œ νŽ˜μ΄μ§€μ˜ DOMμš”μ†Œ μ•ˆμ— μ£Όμž…ν›„ DOM을 μ‚¬μš©μž 화면에 λ‚˜νƒ€λ‚Έλ‹€.

  • Render ν•¨μˆ˜λŠ” 가상 돔 κ³„μΈ΅μ—μ„œ μ•„λž˜μ™€ 같이 μˆœμ„œλŒ€λ‘œ ν˜ΈμΆœλœλ‹€. (λ¦¬μ•‘νŠΈ μ—˜λ¦¬λ¨ΌνŠΈ λ Œλ” μˆœμ„œ )
    : App -> Parent -> Child
  • λ¦¬μ•‘νŠΈ μ—˜λ¦¬λ¨ΌνŠΈλŠ” κ³„μΈ΅μ˜ 맨 μ•„λž˜λΆ€ν„° λ°˜λŒ€ μˆœμ„œλ‘œ 마운트 λœλ‹€. (λ¦¬μ•‘νŠΈ μ—˜λ¦¬λ¨ΌνŠΈ 마운트 μˆœμ„œ )
    : Child -> Parent -> App

λ¦¬λžœλ”λ§μ΄λž€?

  • λ¦¬λ Œλ”λ§μ€ μ‚¬μš©μžκ°€ 화면에 λ·°λ₯Ό λ‹€μ‹œ μƒˆλ‘­κ²Œ λ³΄μ—¬μ€€λ‹€λŠ” 의미인데 이것을 μ—…λ°μ΄νŠΈ 과정을 κ±°μΉœλ‹€. λ˜λŠ” μ‘°ν™” 과정을 κ±°μΉœλ‹€ 라고 ν‘œν˜„ν•œλ‹€.
  • λ¦¬μ•‘νŠΈμ—μ„œ λ·°(View)λ₯Ό μ—…λ°μ΄νŠΈν•  λ•ŒλŠ” "μ—…λ°μ΄νŠΈ 과정을 κ±°μΉœλ‹€" λ³΄λ‹€λŠ” μ‘°ν™” 과정을 κ±°μΉœλ‹€ 라고 ν‘œν˜„ν•˜λŠ” 것이 더 μ •ν™•ν•˜λ‹€. μ™œλƒν•˜λ©΄ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 데이터에 λ³€ν™”κ°€ μžˆμ„ λ•Œ μš°λ¦¬κ°€ λ³΄κΈ°μ—λŠ” 변화에 따라 λ·°κ°€ λ³€ν˜•λ˜λŠ”κ²ƒ 처럼 λ³΄μ΄μ§€λ§Œ, 사싀 μƒˆλ‘œμš΄ μš”μ†Œλ‘œ κ°ˆμ•„ 끼우기 λ•Œλ¬Έμ΄λ‹€.

μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λžœλ”λ§ λ˜λŠ” 경우

  • μžμ‹ μ˜ μƒνƒœκ°€ 변경될 λ•Œ
  • λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§ 될 λ•Œ
  • μžμ‹ μ΄ 전달받은 propsκ°€ 변경될 λ•Œ
  • forceUpdate ν•¨μˆ˜κ°€ 싀행될 λ•Œ

λ¦¬λžœλ”λ§ 정리

  • λ¦¬λ Œλ”λ§μ΄λΌλŠ” 것은 λ Œλ”λ§μ΄ λ‹€μ‹œ λ°œμƒν•˜λŠ” 것이닀. λ Œλ”λ§μ΄λΌλŠ” 것은 화면상에 λ·°(λ‚΄μš©)λ₯Ό λ³΄μ—¬μ£ΌλŠ” 것이닀.
  • λ¦¬μ•‘νŠΈμ—μ„œ λ¦¬λ Œλ”λ§μ€ μƒνƒœκ°€ λ³€ν™”ν•  λ•Œ λ°œμƒν•˜λŠ”λ° Virtual DOMμ—μ„œ λ³€κ²½λœ ν˜Ήμ€ μ—…λ°μ΄νŠΈλœ λ‚΄μš©μ„ 이전 κ°’κ³Ό λΉ„κ΅ν•˜μ—¬ λ³€κ²½λœ 값에 λŒ€ν•΄ λ Œλ”λ§μ„ ν•΄μ£ΌλŠ” (DOM 트리λ₯Ό μ—…λ°μ΄νŠΈν•΄μ£ΌλŠ”) 것을 μ˜λ―Έν•œλ‹€.
profile
κΈ°λ‘ν•˜λŠ” μ½”λ¦°μ΄μ˜ λΈ”λ‘œκ·ΈπŸ₯Έ

0개의 λŒ“κΈ€