3. VirtualDOM

가상 DOM에 λŒ€ν•΄μ„œ μ΄ν•΄ν•˜κΈ° 전에 DOM에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

DOM μ΄λž€?

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

  • Document Node(λ¬Έμ„œ λ…Έλ“œ)

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

  • Element Node(μš”μ†Œ λ…Έλ“œ)

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

  • Attribute Node(속성 λ…Έλ“œ)

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

  • Text Node(ν…μŠ€νŠΈ λ…Έλ“œ)

    • HTML μš”μ†Œμ˜ ν…μŠ€νŠΈλ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ…Έλ“œ


Virtual DOM μ΄λž€?

λ§κ·ΈλŒ€λ‘œ κ°€μƒμ˜ DOM이며, μ‹€μ œ DOM의 λ³΅μ œλ³Έμ΄λ‹€. μ‹€μ œ DOM을 μ‘°μž‘ν•˜μ—¬ HTML μš”μ†Œλ₯Ό λ³€κ²½ν•˜λ €λ©΄ λ‹€μŒκ³Ό 같은 과정을 거치게 λœλ‹€.

  • > HTML element λ₯Ό 선택

  • > 속성 λ³€κ²½

  • > μƒˆλ‘œμš΄ HTML element μš”μ†Œ 생성

  • > μƒμ„±λœ HTML element μΆ”κ°€

  • > 기쑴의 HTML element 제거

μ΄λŸ¬ν•œ 직접적인 DOM μ‘°μž‘μ„, React μ—μ„œλŠ” 가상 DOM을 ν†΅ν•΄μ„œ μˆ˜ν–‰ν•œλ‹€. 가상 DOM이기 λ•Œλ¬Έμ— κ°„μ ‘μ μœΌλ‘œ μ‘°μž‘ν•˜λ©°, 이λ₯Ό ν†΅ν•΄μ„œ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¨λ‹€. Reactμ—μ„œλŠ” μƒνƒœμ™€ 가상 DOM을 ν†΅ν•œ 좔상화λ₯Ό 톡해 λ³€ν™”λ₯Ό κ°μ§€ν•˜κ³  μ΅œμ†Œν•œμ˜ DOM μ‘°μž‘μ„ μˆ˜ν–‰ν•˜μ—¬ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¨λ‹€.

가상 DOM을 ν™œμš©ν•˜μ—¬ μ–΄λ–»κ²Œ DOM μ‘°μž‘μ„ ν•˜λŠ”κ°€?

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

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

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

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

React μ—μ„œ μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§ 될 λ•Œ

μƒνƒœ(state) λ³€κ²½, 속성(props) λ³€κ²½, λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ˜ λ¦¬λ Œλ”λ§, μ»΄ν¬λ„ŒνŠΈ 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œ 호좜, μ»¨ν…μŠ€νŠΈ(Context) λ³€κ²½

이 과정을 ν†΅ν•΄μ„œ λ³€κ²½ν•΄μ•Ό ν•˜λŠ” λΆ€λΆ„λ§Œ μ‹€μ œ DOM에 μ μš©ν•œλ‹€. 이 과정을 Reconciliation(μž¬μ‘°μ •) 이라고 ν•œλ‹€. 그런데 μ—¬κΈ°μ„œ μ•Œμ•„μ•Ό ν•  점은, μ΄λŸ¬ν•œ λ³€κ²½λœ λͺ¨λ“  HTML μš”μ†Œλ“€μ„ ν•œ λ²ˆμ— μ‹€μ œ DOM에 μ μš©ν•œλ‹€λŠ” 사싀이닀.

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

κ·ΈλŸ¬λ‚˜, 가상 DOM을 μ‚¬μš©ν•˜λŠ” μ΄μœ κ°€ νΌν¬λ¨ΌμŠ€κ°€ μ’‹μ•„μ„œλŠ” μ•„λ‹ˆλΌκ³  ν•œλ‹€. λΉ¨λΌμ„œ μ‚¬μš©ν•˜λŠ” 것이 μ•„λ‹ˆλΌ(μΆ©λΆ„νžˆ λΉ λ₯΄κΈ΄ ν•˜λ‹€), μœ μ§€λ³΄μˆ˜μ„±μ΄ λ›°μ–΄λ‚œ 것이 ν•΅μ‹¬μ΄λΌλŠ” 것이닀. 단지, 가상 DOM이 무엇이고 μ™œ μ“°λŠ”μ§€ μ΄ν•΄ν•˜μ˜€λ‹€λ©΄, μ΅œμ ν™” ν•  수 μžˆλŠ” 기법이 μ‘΄μž¬ν•œλ‹€.

μ°Έμ‘°: Virtual DOM (React) 핡심정리

Last updated