Virtual DOM

Virtual DOM(가상돔)에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

πŸ€” DOM(Document Object Model) μ΄λž€?

HTML μš”μ†Œλ“€μ„ λ‹΄κ³  μžˆλŠ” μ›ΉνŽ˜μ΄μ§€λ₯Ό Document라고 ν•˜λŠ”λ°, DOMμ΄λž€ HTML μš”μ†Œλ“€μ„ 트리 ν˜•νƒœλ‘œ ν‘œν˜„ν•œ 것을 λ§ν•œλ‹€. DOM의 각 νŠΈλ¦¬λŠ” Node(λ…Έλ“œ)둜 κ΅¬μ„±λ˜μ–΄μžˆλ‹€. λ‹€μ‹œ λ§ν•˜λ©΄, DOM의 λͺ¨λ“  것은 Node이닀.

ν”νžˆ DOM을 μ‘°μž‘ν•œλ‹€κ³  ν•  λ•Œ, getElementById λ˜λŠ” querySelector λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬, μ›ν•˜λŠ” HTMLμš”μ†Œλ₯Ό μ„ νƒν•˜κ³  μ‘°μž‘ν•œλ‹€. DOM의 NodeλŠ” μ•„λž˜μ™€ 같이 κ΅¬μ„±λœλ‹€.

  • Document Node(λ¬Έμ„œ λ…Έλ“œ): λ¬Έμ„œ 전체λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ…Έλ“œ

  • Element Node(μš”μ†Œ λ…Έλ“œ): HTML μš”μ†Œλ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ…Έλ“œ

  • Attribute Node(속성 λ…Έλ“œ): HTML μš”μ†Œμ˜ 속성을 λ‚˜νƒ€λ‚΄λŠ” λ…Έλ“œ

  • Text Node(ν…μŠ€νŠΈ λ…Έλ“œ): - HTML μš”μ†Œμ˜ ν…μŠ€νŠΈλ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ…Έλ“œ

πŸ€” Virtual DOM μ΄λž€?

μ‹€μ œ DOM의 λ³΅μ œλ³Έμ΄λ‹€. Reactμ—μ„œλŠ” 가상 DOM을 ν†΅ν•˜μ—¬ μ‹€μ œ DOM을 μ‘°μž‘ν•œλ‹€.

μ‹€μ œ DOM을 μ‘°μž‘ν•˜μ—¬ HTML μš”μ†Œλ₯Ό λ³€κ²½ν•˜λ €λ©΄ λ‹€μŒκ³Ό 같은 과정을 거치게 λ˜λŠ”λ°,

    1. HTML element λ₯Ό 선택

    1. 속성 λ³€κ²½

    1. μƒˆλ‘œμš΄ HTML element μš”μ†Œ 생성

    1. μƒμ„±λœ HTML element μΆ”κ°€

    1. 기쑴의 HTML element 제거

Reactμ—μ„œλŠ” 가상 DOM을 μ‚¬μš©ν•˜μ—¬ κ°„μ ‘μ μœΌλ‘œ μ‘°μž‘ν•œλ‹€. 가상 DOM의 좔상화λ₯Ό ν†΅ν•˜μ—¬ λ³€ν™”λ₯Ό κ°μ§€ν•˜κ³ , μ΅œμ†Œν•œμ˜ DOM μ‘°μž‘μ„ μˆ˜ν–‰ν•œλ‹€.

ReactλŠ” 항상 λ‘κ°œμ˜ 가상돔 객체λ₯Ό κ°€μ§€κ³  μžˆλ‹€.

  • λ Œλ”λ§ 이전 ν™”λ©΄ ꡬ쑰λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 가상돔

  • λ Œλ”λ§ 이후 ν™”λ©΄ ꡬ쑰λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 가상돔

Rerendering(λ¦¬λ Œλ”λ§)이 일어날 λ•Œ λ§ˆλ‹€ μƒˆλ‘œμš΄ λ‚΄μš©μ΄ λ‹΄κΈ΄ 가상 DOM을 μƒμ„±ν•œλ‹€. λžœλ”λ§ 이전과 μ΄ν›„μ˜ 가상 DOM을 λΉ„κ΅ν•˜μ—¬ μ–΄λ–€ HTML μš”μ†Œκ°€ λ³€κ²½λ˜μ—ˆλŠ”μ§€ λΉ„κ΅ν•œλ‹€. ReactλŠ” 이것을 μœ„ν•΄ Diffing Algorithm λ₯Ό μ‚¬μš©ν•œλ‹€.

React μ—μ„œ μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§ λ˜λŠ” 쑰건을 κ°„λ‹¨ν•˜κ²Œ μ •λ¦¬ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€.

  • μƒνƒœ(state)λ³€κ²½

  • 속성(props)λ³€κ²½

  • λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ˜ λ¦¬λ Œλ”λ§

  • μ»΄ν¬λ„ŒνŠΈ 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œ 호좜

  • μ»¨ν…μŠ€νŠΈ(Context) λ³€κ²½

이 과정을 ν†΅ν•΄μ„œ λ³€κ²½ν•΄μ•Ό ν•˜λŠ” λΆ€λΆ„λ§Œ μ‹€μ œ DOM에 μ μš©ν•œλ‹€. 이 과정을 Reconciliation(μž¬μ‘°μ •) 이라고 ν•œλ‹€.

μ—¬κΈ°μ„œ μ•Œμ•„μ•Ό ν•  점은, λ³€κ²½λœ λͺ¨λ“  HTML μš”μ†Œλ“€μ„ ν•œ λ²ˆμ— μ‹€μ œ DOM에 μ μš©ν•œλ‹€λŠ” 사싀이닀. μ–΄λ–€ νŽ˜μ΄μ§€μ˜ HTML μš”μ†Œκ°€ 듀이 1κ°œκ°€ λ³€κ²½λ˜κ±΄ 10κ°œκ°€ λ³€κ²½λ˜κ±΄ 상관없이, 이λ₯Ό κ°μ§€ν•˜κ³  ν•œ λ²ˆμ— μ‹€μ œ DOM에 μ μš©μ‹œν‚¨λ‹€. 즉, 10κ°œκ°€ λ³€κ²½λ˜μ—ˆμ„ λ•Œ μ‹€μ œ DOM에 μ μš©μ‹œν‚€λŠ” 것을 10번 λ°˜λ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€.

가상 DOM을 μ‚¬μš©ν•˜λŠ” μ΄μœ κ°€ 퍼포먼슀 λ•Œλ¬Έμ€ μ•„λ‹ˆκ³ (μΆ©λΆ„νžˆ λΉ λ₯΄κΈ΄ ν•˜μ§€λ§Œ..), μœ μ§€λ³΄μˆ˜μ„±μ΄ λ›°μ–΄λ‚œ 것이 핡심이닀. λ‹€λ§Œ, 가상 DOM이 무엇이고 μ™œ μ“°λŠ”μ§€ μ΄ν•΄ν•˜μ˜€λ‹€λ©΄, μ΅œμ ν™” ν•  수 μžˆλŠ” 기법이 μ‘΄μž¬ν•œλ‹€.

Last updated